ZGlmZiAtLWdpdCBhL2NvbXBpbGVyL2NwcC9zcmMvZ2VuZXJhdGUvdF9lcmxfZ2VuZXJhdG9yLmNjIGIvY29tcGlsZXIvY3BwL3NyYy9nZW5lcmF0ZS90X2VybF9nZW5lcmF0b3IuY2MKaW5kZXggZmYyZTI4Ny4uNDQwN2NmNSAxMDA2NDQKLS0tIGEvY29tcGlsZXIvY3BwL3NyYy9nZW5lcmF0ZS90X2VybF9nZW5lcmF0b3IuY2MKKysrIGIvY29tcGlsZXIvY3BwL3NyYy9nZW5lcmF0ZS90X2VybF9nZW5lcmF0b3IuY2MKQEAgLTksMTMgKzksMTIgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgInRfZXJsX2dlbmVyYXRvci5oIgotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogdm9pZCBocmxfaGVhZGVyKHN0ZDo6b3N0cmVhbSYgb3V0LCBzdGQ6OnN0cmluZyBuYW1lKTsKIHZvaWQgaHJsX2Zvb3RlcihzdGQ6Om9zdHJlYW0mIG91dCwgc3RkOjpzdHJpbmcgbmFtZSk7IAogCi0KIC8qKgogICogVUkgZm9yIGZpbGUgZ2VuZXJhdGlvbiBieSBvcGVuaW5nIHVwIHRoZSBuZWNlc3NhcnkgZmlsZSBvdXRwdXQKICAqIHN0cmVhbXMuCkBAIC05OSw4ICs5OCw5IEBACiAgKi8KIHN0cmluZyB0X2VybF9nZW5lcmF0b3I6OmVybF9pbXBvcnRzKCkgewogICByZXR1cm4KLSAgICBzdHJpbmcoIi1pbmNsdWRlKFwidGhyaWZ0L3Byb3RvY29sL3RQcm90b2NvbC5ocmxcIikuXG4iKSArIAotCSAgICItaW5jbHVkZShcInRocmlmdC90aHJpZnQuaHJsXCIpLiI7CisgICAgc3RyaW5nKCItaW5jbHVkZShcInRocmlmdC5ocmxcIikuXG4iKSArIAorICAgICItaW5jbHVkZShcInRBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmxcIikuXG4iICsKKyAgICAiLWluY2x1ZGUoXCJwcm90b2NvbC90UHJvdG9jb2wuaHJsXCIpLlxuIjsKIH0KIAogLyoqCkBAIC00MTQsNyArNDE0LDcgQEAKICAgaW5kZW50X3VwKCk7CiAgICAgCiAgIG91dCA8PAotICAgIGluZGVudCgpIDw8ICI/TTAoSXByb3QsIHJlYWRTdHJ1Y3RCZWdpbiksIiA8PCBlbmRsIDw8ICAgCisgICAgaW5kZW50KCkgPDwgIj9SMChJcHJvdCwgcmVhZFN0cnVjdEJlZ2luKSwiIDw8IGVuZGwgPDwgICAKICAgICBpbmRlbnQoKSA8PCAiU3RyID0gIiA8PCB1bmNhcGl0YWxpemUodHlwZV9uYW1lKHRzdHJ1Y3QpKSA8PCAiX3JlYWRfbG9vcChJcHJvdCwgIjsKIAogICAvLyAgaWYgKGZpZWxkcy5zaXplKCkgPiAwKSB7IC8vIGNwaXJvOiBzZW5zaWJsZSBkZWZhdWx0IGZvciBub24tZW1wdHkgc3RydWN0cwpAQCAtNDI0LDcgKzQyNCw3IEBACiAgICAgLy8gIH0KIAogICBvdXQgPDwgIiksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIj9NMChJcHJvdCwgcmVhZFN0cnVjdEVuZCksIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIj9SMChJcHJvdCwgcmVhZFN0cnVjdEVuZCksIiA8PCBlbmRsIDw8CiAgICAgaW5kZW50KCkgPDwgIlN0ci4iIDw8IGVuZGw7CiAgIAogICBpbmRlbnRfZG93bigpOwpAQCAtNDM0LDkgKzQzNCw5IEBACiAgIGluZGVudF91cCgpOwogCiAgICAgLy8gUmVhZCBiZWdpbm5pbmcgZmllbGQgbWFya2VyCi0gICAgaW5kZW50KG91dCkgPDwKLSAgICAgICJ7IEZuYW1lLCBGdHlwZSwgRmlkIH0gPSA/TTAoSXByb3QsIHJlYWRGaWVsZEJlZ2luKSwiIDw8IGVuZGwgPDwKLSAgICAgIGluZGVudCgpIDw8ICJGaWQsIEZuYW1lLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncyIgPDwgZW5kbDsKKyAgb3V0IDw8CisgICAgaW5kZW50KCkgPDwgInsgX0ZuYW1lLCBGdHlwZSwgRmlkIH0gPSA/UjAoSXByb3QsIHJlYWRGaWVsZEJlZ2luKSwiIDw8IGVuZGwgPDwKKyAgICBpbmRlbnQoKSA8PCAiRmlkLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncyIgPDwgZW5kbDsKIAogICAgIC8vIENoZWNrIGZvciBmaWVsZCBTVE9QIG1hcmtlciBhbmQgYnJlYWsKICAgICBpbmRlbnQob3V0KSA8PCAiaWYiIDw8IGVuZGw7CkBAIC00NzAsNyArNDcwLDcgQEAKICAgICAgIGluZGVudF91cCgpOwogICAgICAgZ2VuZXJhdGVfZGVzZXJpYWxpemVfZmllbGQob3V0LCAqZl9pdGVyLCAiVmFsIik7CiAKLSAgICAgIG91dCA8PCBpbmRlbnQoKSA8PCAiP00wKElwcm90LCByZWFkRmllbGRFbmQpLCIgPDwgZW5kbAorICAgICAgb3V0IDw8IGluZGVudCgpIDw8ICI/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksIiA8PCBlbmRsCiAJICA8PCBpbmRlbnQoKSA8PCB1bmNhcGl0YWxpemUodHlwZV9uYW1lKHRzdHJ1Y3QpKSA8PCAiX3JlYWRfbG9vcChJcHJvdCwgIgogCSAgPDwgIlN0ciMiIDw8IHVuY2FwaXRhbGl6ZSh0eXBlX25hbWUodHN0cnVjdCkpCiAJICA8PCAieyIgPDwgKCpmX2l0ZXIpLT5nZXRfbmFtZSgpCkBAIC00ODEsOCArNDgxLDggQEAKICAgICAvLyBJbiB0aGUgZGVmYXVsdCBjYXNlIHdlIHNraXAgdGhlIGZpZWxkCiAgICAgb3V0IDw8CiAgICAgICBpbmRlbnQoKSA8PCAidHJ1ZSAtPiAiIDw8IGVuZGwgPDwKLSAgICAgIGluZGVudCgpIDw8ICIgID9NMShJcHJvdCwgc2tpcCwgRnR5cGUpLCIgPDwgZW5kbCA8PAotICAgICAgaW5kZW50KCkgPDwgIiAgP00wKElwcm90LCByZWFkRmllbGRFbmQpLCIgPDwgZW5kbCA8PAorICAgICAgaW5kZW50KCkgPDwgIiAgP1IxKElwcm90LCBza2lwLCBGdHlwZSksIiA8PCBlbmRsIDw8CisgICAgICBpbmRlbnQoKSA8PCAiICA/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksIiA8PCBlbmRsIDw8CiAgICAgICBpbmRlbnQoKSA8PCAiICAiIDw8IHVuY2FwaXRhbGl6ZSh0eXBlX25hbWUodHN0cnVjdCkpIDw8ICJfcmVhZF9sb29wKElwcm90LCBTdHIpIiA8PCBlbmRsOwogICAgIGluZGVudF9kb3duKCk7CiAgICAgaW5kZW50KG91dCkgPDwgImVuZC4iIDw8IGVuZGw7IApAQCAtNTE5LDkgKzUxOSw5IEBACiAgIGluZGVudChvdXQpIDw8IGZuYW1lIDw8ICIoU3RyLCBPcHJvdCkgLT4gJXh5IiA8PCBlbmRsOwogICBpbmRlbnRfdXAoKTsKICAgCi0gIGluZGVudChvdXQpIDw8Ci0gICAgIlN0ciwgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MiIDw8IGVuZGwgPDwgCi0gICAgaW5kZW50KCkgPDwgIj9NMShPcHJvdCwgd3JpdGVTdHJ1Y3RCZWdpbiwgXCIiIDw8IG5hbWUgPDwgIlwiKSwiIDw8IGVuZGw7CisgIG91dCA8PAorICAgIGluZGVudCgpIDw8ICJTdHIsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIj9SMShPcHJvdCwgd3JpdGVTdHJ1Y3RCZWdpbiwgXCIiIDw8IG5hbWUgPDwgIlwiKSwiIDw8IGVuZGw7CiAKIAogICBzdHJpbmcgcHJlZml4ID0gc3RyaW5nKCJTdHIjIikgKyB1bmNhcGl0YWxpemUodHlwZV9uYW1lKHRzdHJ1Y3QpKSArICIuIjsKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgImlmICIgPDwgcHJlZml4IDw8ICgqZl9pdGVyKS0+Z2V0X25hbWUoKSA8PCAiIC89IHVuZGVmaW5lZCAtPiIgPDwgZW5kbDsKICAgICBpbmRlbnRfdXAoKTsKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMyhPcHJvdCwgd3JpdGVGaWVsZEJlZ2luLCAiIDw8CisgICAgICAiP1IzKE9wcm90LCB3cml0ZUZpZWxkQmVnaW4sICIgPDwKICAgICAgICJcIiIgPDwgKCpmX2l0ZXIpLT5nZXRfbmFtZSgpIDw8ICJcIiwgIiA8PAogICAgICAgdHlwZV90b19lbnVtKCgqZl9pdGVyKS0+Z2V0X3R5cGUoKSkgPDwgIiwgIiA8PAogICAgICAgKCpmX2l0ZXIpLT5nZXRfa2V5KCkgPDwgIiksIiA8PCBlbmRsOwpAQCAtNTQyLDcgKzU0Miw3IEBACiAKICAgICAvLyBXcml0ZSBmaWVsZCBjbG9zZXIKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMChPcHJvdCwgd3JpdGVGaWVsZEVuZCk7IiA8PCBlbmRsIDw8CisgICAgICAiP1IwKE9wcm90LCB3cml0ZUZpZWxkRW5kKTsiIDw8IGVuZGwgPDwKICAgICAgIGluZGVudCgpIDw8ICJ0cnVlIC0+IG9rIiA8PCBlbmRsOwogCiAgICAgaW5kZW50X2Rvd24oKTsKQEAgLTU1MSw4ICs1NTEsOCBAQAogCiAgIC8vIFdyaXRlIHRoZSBzdHJ1Y3QgbWFwCiAgIG91dCA8PAotICAgIGluZGVudCgpIDw8ICI/TTAoT3Byb3QsIHdyaXRlRmllbGRTdG9wKSwiIDw8IGVuZGwgPDwKLSAgICBpbmRlbnQoKSA8PCAiP00wKE9wcm90LCB3cml0ZVN0cnVjdEVuZCksIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIj9SMChPcHJvdCwgd3JpdGVGaWVsZFN0b3ApLCIgPDwgZW5kbCA8PAorICAgIGluZGVudCgpIDw8ICI/UjAoT3Byb3QsIHdyaXRlU3RydWN0RW5kKSwiIDw8IGVuZGwgPDwKICAgICBpbmRlbnQoKSA8PCAib2suIiA8PCBlbmRsOwogCiAgIGluZGVudF9kb3duKCk7CkBAIC01OTgsNyArNTk4LDcgQEAKIAogICBmX3NlcnZpY2VfZmlsZV8gPDwgIi1pbmNsdWRlKFwiIiA8PCB1bmNhcGl0YWxpemUodHNlcnZpY2UtPmdldF9uYW1lKCkpIDw8ICIuaHJsXCIpLiIgPDwgZW5kbCA8PCBlbmRsOwogCi0gIGZfc2VydmljZV9maWxlXyA8PCAiLWV4cG9ydChbIiA8PCBleHBvcnRfbGluZXNfLnN0cigpIDw8ICJdKS4iOworICBmX3NlcnZpY2VfZmlsZV8gPDwgIi1leHBvcnQoWyIgPDwgZXhwb3J0X2xpbmVzXy5zdHIoKSA8PCAiXSkuIiA8PCBlbmRsIDw8IGVuZGw7CiAKICAgZl9zZXJ2aWNlX2ZpbGVfIDw8IGZfc2VydmljZV8uc3RyKCk7CiAKQEAgLTc2Myw4ICs3NjMsOSBAQAogCiAgICAgICAvLyBTZXJpYWxpemUgdGhlIHJlcXVlc3QgaGVhZGVyCiAgICAgICBmX3NlcnZpY2VfIDw8Ci0JaW5kZW50KCkgPDwgIk9wcm90ID0gP0FUVFIob3Byb3QpLCIgPDwgZW5kbCA8PAotCWluZGVudCgpIDw8ICI/TTMoT3Byb3QsIHdyaXRlTWVzc2FnZUJlZ2luLCBcIiIgPDwgKCpmX2l0ZXIpLT5nZXRfbmFtZSgpIDw8ICJcIiwgP3RNZXNzYWdlVHlwZV9DQUxMLCA/QVRUUihzZXFpZCkpLCIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICJPcHJvdCA9IG9vcDpnZXQoVGhpcywgb3Byb3QpLCIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICJTZXFpZCA9IG9vcDpnZXQoVGhpcywgc2VxaWQpLCIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICI/UjMoT3Byb3QsIHdyaXRlTWVzc2FnZUJlZ2luLCBcIiIgPDwgKCpmX2l0ZXIpLT5nZXRfbmFtZSgpIDw8ICJcIiwgP3RNZXNzYWdlVHlwZV9DQUxMLCBTZXFpZCksIiA8PCBlbmRsIDw8CiAJaW5kZW50KCkgPDwgIkFyZ3MgPSAjIiA8PCAoKmZfaXRlciktPmdldF9uYW1lKCkgPDwgIl9hcmdzeyI7CiAKICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwpAQCAtNzc5LDkgKzc4MCw5IEBACiAKICAgICAgIC8vIFdyaXRlIHRvIHRoZSBzdHJlYW0KICAgICAgIGZfc2VydmljZV8gPDwKLSAgICAgICAgaW5kZW50KCkgPDwgIj9NMChPcHJvdCwgd3JpdGVNZXNzYWdlRW5kKSwiIDw8IGVuZGwgPDwKLQlpbmRlbnQoKSA8PCAiJSUgc2lkZS1lZmZlY3Q6IG5vdCBnb25uYSBoYXBwZW4iIDw8IGVuZGwgPDwKLQlpbmRlbnQoKSA8PCAiJSUgP00wKD9NMChPcHJvdCwgdHJhbnMpLCBmbHVzaCksIiA8PCBlbmRsIDw8CisgICAgICAgIGluZGVudCgpIDw8ICI/UjAoT3Byb3QsIHdyaXRlTWVzc2FnZUVuZCksIiA8PCBlbmRsIDw8CisJaW5kZW50KCkgPDwgIlRyYW5zID0gP1IxKE9wcm90LCBnZXQsIHRyYW5zKSwiIDw8IGVuZGwgPDwKKwlpbmRlbnQoKSA8PCAiP1IwKFRyYW5zLCBlZmZlY3RmdWxfZmx1c2gpLCIgPDwgZW5kbCA8PAogICAgICAgICBpbmRlbnQoKSA8PCAib2suIiA8PCBlbmRsOyAgCiAKICAgICBpbmRlbnRfZG93bigpOwpAQCAtODA2LDE4ICs4MDcsMTcgQEAKICAgICAgIC8vIFRPRE8oY3Bpcm8pOiBhY3R1YWxseSByYWlzZSBhbiBFcmxhbmcgZXhjZXB0aW9uPwogCiAgICAgICBmX3NlcnZpY2VfIDw8Ci0JaW5kZW50KCkgPDwgIklwcm90ID0gP0FUVFIoaXByb3QpLCIgPDwgZW5kbCA8PAotCWluZGVudCgpIDw8ICJ7IEZuYW1lLCBNdHlwZSwgUnNlcWlkIH0gPSA/TTAoSXByb3QsIHJlYWRNZXNzYWdlQmVnaW4pLCIgPDwgZW5kbCA8PAotCWluZGVudCgpIDw8ICJGbmFtZSwgUnNlcWlkLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncyIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICJJcHJvdCA9IG9vcDpnZXQoVGhpcywgaXByb3QpLCIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICJ7IF9GbmFtZSwgTXR5cGUsIF9Sc2VxaWQgfSA9ID9SMChJcHJvdCwgcmVhZE1lc3NhZ2VCZWdpbiksIiA8PCBlbmRsIDw8CiAJaW5kZW50KCkgPDwgImlmIiA8PCBlbmRsIDw8CiAJaW5kZW50KCkgPDwgIiAgTXR5cGUgPT0gP3RNZXNzYWdlVHlwZV9FWENFUFRJT04gLT4iIDw8IGVuZGwgPDwKIAlpbmRlbnQoKSA8PCAiICAgIFggPSB0QXBwbGljYXRpb25FeGNlcHRpb246bmV3KCksIiA8PCBlbmRsIDw8Ci0JaW5kZW50KCkgPDwgIiAgICA/TTEoWCwgcmVhZCwgSXByb3QpLCAiIDw8IGVuZGwgPDwKLQlpbmRlbnQoKSA8PCAiICAgID9NMChJcHJvdCwgcmVhZE1lc3NhZ2VFbmQpLCAiIDw8IGVuZGwgPDwKKwlpbmRlbnQoKSA8PCAiICAgIHRBcHBsaWNhdGlvbkV4Y2VwdGlvbjpyZWFkKFgsIElwcm90KSwgJSUgY3Bpcm8gcmx5IHRyZWF0IGV4Y2VwdGlvbnMgZGlmZmVyZW50PyIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICIgICAgP1IwKElwcm90LCByZWFkTWVzc2FnZUVuZCksICIgPDwgZW5kbCA8PAogCWluZGVudCgpIDw8ICIgICAge2Vycm9yLCBYfTsiIDw8IGVuZGwgPDwKIAlpbmRlbnQoKSA8PCAiICB0cnVlIC0+IiA8PCBlbmRsIDw8CiAJaW5kZW50KCkgPDwgIiAgICBSZXN1bHQgPSAiIDw8IHJlc3VsdG5hbWUgPDwgIl9yZWFkKElwcm90KSwiIDw8IGVuZGwgPDwKLQlpbmRlbnQoKSA8PCAiICAgID9NMChJcHJvdCwgcmVhZE1lc3NhZ2VFbmQpLCIgPDwgZW5kbCA8PAorCWluZGVudCgpIDw8ICIgICAgP1IwKElwcm90LCByZWFkTWVzc2FnZUVuZCksIiA8PCBlbmRsIDw8CiAJaW5kZW50KCkgPDwgIiAgICBpZiAlIHRpbWUgdG8gZmlndXJlIG91dCByZXR2YWwiIDw8IGVuZGw7CiAKIAkvLwlpbmRlbnQoKSA8PCAiCSB7b2ssIFN1Y2Nlc3N9ICUgcmVzdWx0LnN1Y2Nlc3MgY2FzaW5nPyBTdWNjZXNzIGV2ZW4gZm9yIHZvaWQ/IiA8PCBlbmRsIDw8CkBAIC04NDUsNyArODQ1LDcgQEAKICAgICAgIC8vIENhcmVmdWwsIG9ubHkgcmV0dXJuIF9yZXN1bHQgaWYgbm90IGEgdm9pZCBmdW5jdGlvbgogICAgICAgaWYgKCgqZl9pdGVyKS0+Z2V0X3JldHVybnR5cGUoKS0+aXNfdm9pZCgpKSB7CiAgICAgICAgIGluZGVudChmX3NlcnZpY2VfKSA8PAotCSAgaW5kZW50KCkgPDwgIiAgICAgIFJlc3VsdCwgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MiIDw8IGVuZGwgPDwKKwkgIGluZGVudCgpIDw8ICIgICAgICBSZXN1bHQsIiA8PCBlbmRsIDw8CiAJICBpbmRlbnQoKSA8PCAiICAgICAgdHJ1ZSAtPiB7b2ssIG5pbH0iIDw8IGVuZGwgPDwKIAkgIGluZGVudCgpIDw8ICIgICAgZW5kIiA8PCBlbmRsOwogICAgICAgfSBlbHNlIHsKQEAgLTkyMyw4ICs5MjMsNyBAQAogICBpbmRlbnRfdXAoKTsKIAogICBmX3NlcnZpY2VfIDw8Ci0gICAgaW5kZW50KCkgPDwgInsgTmFtZSwgVHlwZSwgU2VxaWQgfSA9ID9NMChJcHJvdCwgcmVhZE1lc3NhZ2VCZWdpbiksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIlR5cGUsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzIiA8PCBlbmRsOworICAgIGluZGVudCgpIDw8ICJ7IE5hbWUsIF9UeXBlLCBTZXFpZCB9ID0gP1IwKElwcm90LCByZWFkTWVzc2FnZUJlZ2luKSwiIDw8IGVuZGw7CiAKICAgLy8gVE9ETyhtY3NsZWUpOiB2YWxpZGF0ZSBtZXNzYWdlCiAKQEAgLTk0MCwxNCArOTM5LDE0IEBACiAKICAgICBpbmRlbnQoZl9zZXJ2aWNlXykgPDwgIiAgJSUgVE9ETyhjcGlybyk6IHBhc3MgdG8gc3VwZXIiIDw8IGVuZGw7CiAgICAgaW5kZW50KGZfc2VydmljZV8pIDw8ICIgIF8gLT4gJSB1bmtub3duIGZ1bmN0aW9uIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIiAgICA/TTEoSXByb3QsIHNraXAsID90VHlwZV9TVFJVQ1QpLCIgPDwgZW5kbCA8PAotICAgIGluZGVudCgpIDw8ICIgICAgP00wKElwcm90LCByZWFkTWVzc2FnZUVuZCksIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIiAgICA/UjEoSXByb3QsIHNraXAsID90VHlwZV9TVFJVQ1QpLCIgPDwgZW5kbCA8PAorICAgIGluZGVudCgpIDw8ICIgICAgP1IwKElwcm90LCByZWFkTWVzc2FnZUVuZCksIiA8PCBlbmRsIDw8CiAgICAgaW5kZW50KCkgPDwgIiAgICBYID0gdEFwcGxpY2F0aW9uRXhjZXB0aW9uOm5ldyg/dEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV05fTUVUSE9ELCBcIlVua25vd24gZnVuY3Rpb24gXCIgKysgTmFtZSksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIiAgICA/TTMoT3Byb3QsIHdyaXRlTWVzc2FnZUJlZ2luLCBOYW1lLCA/dE1lc3NhZ2VUeXBlX0VYQ0VQVElPTiwgU2VxaWQpLCIgPDwgZW5kbCA8PAotICAgIGluZGVudCgpIDw8ICIgICAgP00xKFgsIHdyaXRlLCBPcHJvdCksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIiAgICA/TTAoT3Byb3QsIHdyaXRlTWVzc2FnZUVuZCksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIiAgICAlJSBzaWRlLWVmZmVjdDogbm90IGdvbm5hIGhhcHBlbiIgPDwgZW5kbCA8PAotICAgIGluZGVudCgpIDw8ICIgICAgJSUgP00wKD9NMChPcHJvdCwgdHJhbnMpLCBmbHVzaCksIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIiAgICA/UjMoT3Byb3QsIHdyaXRlTWVzc2FnZUJlZ2luLCBOYW1lLCA/dE1lc3NhZ2VUeXBlX0VYQ0VQVElPTiwgU2VxaWQpLCIgPDwgZW5kbCA8PAorICAgIGluZGVudCgpIDw8ICIgICAgdEFwcGxpY2F0aW9uRXhjZXB0aW9uOndyaXRlKFgsIE9wcm90KSwiIDw8IGVuZGwgPDwKKyAgICBpbmRlbnQoKSA8PCAiICAgID9SMChPcHJvdCwgd3JpdGVNZXNzYWdlRW5kKSwiIDw8IGVuZGwgPDwKKyAgICBpbmRlbnQoKSA8PCAiICAgIFRyYW5zID0gP1IxKE9wcm90LCBnZXQsIHRyYW5zKSwiIDw8IGVuZGwgPDwKKyAgICBpbmRlbnQoKSA8PCAiICAgID9SMChUcmFucywgZWZmZWN0ZnVsX2ZsdXNoKSwiIDw8IGVuZGwgPDwKICAgICBpbmRlbnQoKSA8PCAiICAgIHtlcnJvciwgWH0gJSB3aGF0J3MgdGhlIHJldHZhbCBpbiB0aGlzIGNhc2U/IiA8PCBlbmRsIDw8CiAgICAgaW5kZW50KCkgPDwgImVuZC4iIDw8IGVuZGw7CiAgICAgICAvLyAgICBpbmRlbnQoKSA8PCAib2suICUgdGhpcyBvbmU/IiA8PCBlbmRsIDw8IGVuZGw7CkBAIC0xMDAwLDEzICs5OTksMTcgQEAKICAgICAiKEhhbmRsZXJNb2R1bGUsIFNlcWlkLCBJcHJvdCwgT3Byb3QpIC0+IiA8PCBlbmRsOwogICBpbmRlbnRfdXAoKTsKIAorICBmX3NlcnZpY2VfIDw8IAorICAgIGluZGVudCgpIDw8ICJTZXFpZCwgT3Byb3QsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzIiA8PCBlbmRsOworIAogICBzdHJpbmcgYXJnc25hbWUgPSB0ZnVuY3Rpb24tPmdldF9uYW1lKCkgKyAiX2FyZ3MiOwogICBzdHJpbmcgcmVzdWx0bmFtZSA9IHRmdW5jdGlvbi0+Z2V0X25hbWUoKSArICJfcmVzdWx0IjsKIAogICBmX3NlcnZpY2VfIDw8Ci0gICAgaW5kZW50KCkgPDwgIkFyZ3MgPSAiIDw8IGFyZ3NuYW1lIDw8ICJfcmVhZChJcHJvdCksIiA8PCBlbmRsIDw8Ci0gICAgaW5kZW50KCkgPDwgIkFyZ3MsIFNlcWlkLCBPcHJvdCwgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MiIDw8IGVuZGwgPDwKLSAgICBpbmRlbnQoKSA8PCAiP00wKElwcm90LCByZWFkTWVzc2FnZUVuZCksIiA8PCBlbmRsOworICAgIGluZGVudCgpIDw8ICJfQXJncyA9ICIgPDwgYXJnc25hbWUgPDwgIl9yZWFkKElwcm90KSwiIDw8IGVuZGwgPDwKKyAgICAvLyAgICBpbmRlbnQoKSA8PCAiQXJncywgU2VxaWQsIE9wcm90LCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncyIgPDwgZW5kbCA8PAorICAgIC8vICAgIGluZGVudCgpIDw8ICJBcmdzICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzIiA8PCBlbmRsIDw8CisgICAgaW5kZW50KCkgPDwgIj9SMChJcHJvdCwgcmVhZE1lc3NhZ2VFbmQpLCIgPDwgZW5kbDsKIAogICB0X3N0cnVjdCogeHMgPSB0ZnVuY3Rpb24tPmdldF94Y2VwdGlvbnMoKTsKICAgY29uc3Qgc3RkOjp2ZWN0b3I8dF9maWVsZCo+JiB4Y2VwdGlvbnMgPSB4cy0+Z2V0X21lbWJlcnMoKTsKQEAgLTEwNDAsNyArMTA0Myw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgIGZfc2VydmljZV8gPDwgIiwgIjsKICAgICB9Ci0gICAgZl9zZXJ2aWNlXyA8PCAiQXJncyMiIDw8IHRmdW5jdGlvbi0+Z2V0X25hbWUoKSA8PCAiX2FyZ3MuIiA8PCAoKmZfaXRlciktPmdldF9uYW1lKCk7CisgICAgZl9zZXJ2aWNlXyA8PCAiX0FyZ3MjIiA8PCB0ZnVuY3Rpb24tPmdldF9uYW1lKCkgPDwgIl9hcmdzLiIgPDwgKCpmX2l0ZXIpLT5nZXRfbmFtZSgpOwogICB9CiAgIGZfc2VydmljZV8gPDwgIiksIiA8PCBlbmRsOwogCkBAIC0xMDkzLDExICsxMDk2LDExIEBACiAgICAgaW5kZW50KGZfc2VydmljZV8pIDw8ICIlIGFzeW5jIiA8PCBlbmRsOwogICB9IGVsc2UgewogICAgIGZfc2VydmljZV8gPDwKLSAgICAgIGluZGVudCgpIDw8ICI/TTMoT3Byb3QsIHdyaXRlTWVzc2FnZUJlZ2luLCBcIiIgPDwgdGZ1bmN0aW9uLT5nZXRfbmFtZSgpIDw8ICJcIiwgP3RNZXNzYWdlVHlwZV9SRVBMWSwgU2VxaWQpLCIgPDwgZW5kbCA8PAorICAgICAgaW5kZW50KCkgPDwgIj9SMyhPcHJvdCwgd3JpdGVNZXNzYWdlQmVnaW4sIFwiIiA8PCB0ZnVuY3Rpb24tPmdldF9uYW1lKCkgPDwgIlwiLCA/dE1lc3NhZ2VUeXBlX1JFUExZLCBTZXFpZCksIiA8PCBlbmRsIDw8CiAgICAgICBpbmRlbnQoKSA8PCB0ZnVuY3Rpb24tPmdldF9uYW1lKCkgPDwgIl9yZXN1bHRfd3JpdGUoUmVzdWx0LCBPcHJvdCksIiA8PCBlbmRsIDw8Ci0gICAgICBpbmRlbnQoKSA8PCAiP00wKE9wcm90LCB3cml0ZU1lc3NhZ2VFbmQpLCIgPDwgZW5kbCA8PAotICAgICAgaW5kZW50KCkgPDwgIiUlIHNpZGUtZWZmZWN0OiBub3QgZ29ubmEgaGFwcGVuIiA8PCBlbmRsIDw8Ci0gICAgICBpbmRlbnQoKSA8PCAiJSUgP00wKD9NMChPcHJvdCwgdHJhbnMpLCBmbHVzaCksIiA8PCBlbmRsOworICAgICAgaW5kZW50KCkgPDwgIj9SMChPcHJvdCwgd3JpdGVNZXNzYWdlRW5kKSwiIDw8IGVuZGwgPDwKKyAgICAgIGluZGVudCgpIDw8ICJUcmFucyA9ID9SMShPcHJvdCwgZ2V0LCB0cmFucyksIiA8PCBlbmRsIDw8CisgICAgICBpbmRlbnQoKSA8PCAiP1IwKFRyYW5zLCBlZmZlY3RmdWxfZmx1c2gpLCIgPDwgZW5kbDsKICAgfQogICAKICAgaW5kZW50KGZfc2VydmljZV8pIDw8ICJSZXN1bHQuIiA8PCBlbmRsIDw8IGVuZGw7CkBAIC0xMTM1LDcgKzExMzgsNyBAQAogICB9IGVsc2UgaWYgKHR5cGUtPmlzX2Jhc2VfdHlwZSgpIHx8IHR5cGUtPmlzX2VudW0oKSkgewogICAgIGluZGVudChvdXQpIDw8CiAgICAgICAvLyAgICAgIG5hbWUgPDwgIiA9IGlwcm90LiI7Ci0gICAgICBuYW1lIDw8ICIgPSA/TTAoSXByb3QsICI7CisgICAgICBuYW1lIDw8ICIgPSA/UjAoSXByb3QsICI7CiAgICAgCiAgICAgaWYgKHR5cGUtPmlzX2Jhc2VfdHlwZSgpKSB7CiAgICAgICB0X2Jhc2VfdHlwZTo6dF9iYXNlIHRiYXNlID0gKCh0X2Jhc2VfdHlwZSopdHlwZSktPmdldF9iYXNlKCk7CkBAIC0xMzM0LDcgKzEzMzcsNyBAQAogICAgIHN0cmluZyBuYW1lID0gcHJlZml4ICsgdGZpZWxkLT5nZXRfbmFtZSgpOwogCiAgICAgaW5kZW50KG91dCkgPDwKLSAgICAgICI/TTEoT3Byb3QsICI7CisgICAgICAiP1IxKE9wcm90LCAiOwogICAgIAogICAgIGlmICh0eXBlLT5pc19iYXNlX3R5cGUoKSkgewogICAgICAgdF9iYXNlX3R5cGU6OnRfYmFzZSB0YmFzZSA9ICgodF9iYXNlX3R5cGUqKXR5cGUpLT5nZXRfYmFzZSgpOwpAQCAtMTM5MCw3ICsxMzkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHByZWZpeCkgewogICBpbmRlbnQob3V0KSA8PCB0c3RydWN0LT5nZXRfcHJvZ3JhbSgpLT5nZXRfbmFtZSgpIDw8ICJfdHlwZXM6IiA8PCAgdW5jYXBpdGFsaXplKHRzdHJ1Y3QtPmdldF9uYW1lKCkpIDw8ICJfd3JpdGUoIiA8PCBwcmVmaXggPDwgIiwgT3Byb3QpLCAlIGdlbmVyYXRlX3NlcmlhbGl6ZV9zdHJ1Y3QiIDw8IGVuZGw7CiAgIC8vICBpbmRlbnQob3V0KSA8PAotICAvLyAgICAiP00xKCIgPDwgcHJlZml4IDw8ICIsIHdyaXRlLCBPcHJvdCksICUgZ2VuZXJhdGVfc2VyaWFsaXplX3N0cnVjdCIgPDwgZW5kbDsKKyAgLy8gICAgIj9SMSgiIDw8IHByZWZpeCA8PCAiLCB3cml0ZSwgT3Byb3QpLCAlIGdlbmVyYXRlX3NlcmlhbGl6ZV9zdHJ1Y3QiIDw8IGVuZGw7CiB9CiAKIHZvaWQgdF9lcmxfZ2VuZXJhdG9yOjpnZW5lcmF0ZV9zZXJpYWxpemVfY29udGFpbmVyKG9zdHJlYW0gJm91dCwKQEAgLTEzOTgsMTggKzE0MDEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHByZWZpeCkgewogICBpZiAodHR5cGUtPmlzX21hcCgpKSB7CiAgICAgaW5kZW50KG91dCkgPDwKLSAgICAgICI/TTMoT3Byb3QsIHdyaXRlTWFwQmVnaW4sICIgPDwKKyAgICAgICI/UjMoT3Byb3QsIHdyaXRlTWFwQmVnaW4sICIgPDwKICAgICAgIHR5cGVfdG9fZW51bSgoKHRfbWFwKil0dHlwZSktPmdldF9rZXlfdHlwZSgpKSA8PCAiLCAiIDw8CiAgICAgICB0eXBlX3RvX2VudW0oKCh0X21hcCopdHR5cGUpLT5nZXRfdmFsX3R5cGUoKSkgPDwgIiwgbGVuZ3RoKCIgPDwKICAgICAgIHByZWZpeCA8PCAiKSksICUgZ2VuZXJhdGVfc2VyaWFsaXplX2NvbnRhaW5lciIgPDwgZW5kbDsKICAgfSBlbHNlIGlmICh0dHlwZS0+aXNfc2V0KCkpIHsKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMihPcHJvdCwgd3JpdGVTZXRCZWdpbiwgIiA8PAorICAgICAgIj9SMihPcHJvdCwgd3JpdGVTZXRCZWdpbiwgIiA8PAogICAgICAgdHlwZV90b19lbnVtKCgodF9zZXQqKXR0eXBlKS0+Z2V0X2VsZW1fdHlwZSgpKSA8PCAiLCBsZW5ndGgoIiA8PAogICAgICAgcHJlZml4IDw8ICIpKSwgJSBnZW5lcmF0ZV9zZXJpYWxpemVfY29udGFpbmVyIiA8PCBlbmRsOwogICB9IGVsc2UgaWYgKHR0eXBlLT5pc19saXN0KCkpIHsKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMihPcHJvdCwgd3JpdGVMaXN0QmVnaW4sICIgPDwKKyAgICAgICI/UjIoT3Byb3QsIHdyaXRlTGlzdEJlZ2luLCAiIDw8CiAgICAgICB0eXBlX3RvX2VudW0oKCh0X2xpc3QqKXR0eXBlKS0+Z2V0X2VsZW1fdHlwZSgpKSA8PCAiLCBsZW5ndGgoIiA8PAogICAgICAgcHJlZml4IDw8ICIpKSwgJSBnZW5lcmF0ZV9zZXJpYWxpemVfY29udGFpbmVyIiA8PCBlbmRsOwogICB9CkBAIC0xNDQ0LDEzICsxNDQ3LDEzIEBACiAgICAgCiAgIGlmICh0dHlwZS0+aXNfbWFwKCkpIHsKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMChPcHJvdCwgd3JpdGVNYXBFbmQpLCAlIGdlbmVyYXRlX3NlcmlhbGl6ZV9jb250YWluZXIiIDw8IGVuZGw7CisgICAgICAiP1IwKE9wcm90LCB3cml0ZU1hcEVuZCksICUgZ2VuZXJhdGVfc2VyaWFsaXplX2NvbnRhaW5lciIgPDwgZW5kbDsKICAgfSBlbHNlIGlmICh0dHlwZS0+aXNfc2V0KCkpIHsKICAgICBpbmRlbnQob3V0KSA8PAotICAgICAgIj9NMChPcHJvdCwgd3JpdGVTZXRFbmQpLCAlIGdlbmVyYXRlX3NlcmlhbGl6ZV9jb250YWluZXIiIDw8IGVuZGw7CisgICAgICAiP1IwKE9wcm90LCB3cml0ZVNldEVuZCksICUgZ2VuZXJhdGVfc2VyaWFsaXplX2NvbnRhaW5lciIgPDwgZW5kbDsKICAgfSBlbHNlIGlmICh0dHlwZS0+aXNfbGlzdCgpKSB7CiAgICAgaW5kZW50KG91dCkgPDwKLSAgICAgICI/TTAoT3Byb3QsIHdyaXRlTGlzdEVuZCksICUgZ2VuZXJhdGVfc2VyaWFsaXplX2NvbnRhaW5lciIgPDwgZW5kbDsKKyAgICAgICI/UjAoT3Byb3QsIHdyaXRlTGlzdEVuZCksICUgZ2VuZXJhdGVfc2VyaWFsaXplX2NvbnRhaW5lciIgPDwgZW5kbDsKICAgfQogfQogCmRpZmYgLS1naXQgYS9saWIvZXJsL01ha2VmaWxlIGIvbGliL2VybC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJjOGZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitNT0RVTEVTID0gbGliICMgcmVsZWFzZQorCithbGwgY2xlYW46CisJQGZvciBkaXIgaW4gJChNT0RVTEVTKTsgZG8gXAorCQkoY2QgJCRkaXI7ICR7TUFLRX0gJEApOyBcCisJCWlmIFsgIiQkPyIgLW5lICIwIiBdOyB0aGVuIEVSUk9SPSQkPzsgZWNobyAiRXJyb3IgQ29kZSAkJEVSUk9SIjsgZXhpdCAkJEVSUk9SOyBmaTsgXAorCWRvbmUKKworZG9jczoKKwkoY2QgbGliOyAke01BS0V9ICRAKTsgXAorCWlmIFsgIiQkPyIgLW5lICIwIiBdOyB0aGVuIEVSUk9SPSQkPzsgZWNobyAiRXJyb3IgQ29kZSAkJEVSUk9SIjsgZXhpdCAkJEVSUk9SOyBmaTsgCisKK2luc3RhbGw6CisJZWNobyBOTyBPUApkaWZmIC0tZ2l0IGEvbGliL2VybC9SRUFETUUgYi9saWIvZXJsL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDIxMWJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9SRUFETUUKQEAgLTAsMCArMSw2OCBAQAorTXVjaCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHRvcGljcyBjYW4gYmUgZm91bmQgYXQgd3d3LmVybHdhcmUub3JnCisKKworQnVpbGRpbmcgdGhlIHRyZWUKKz09PT09PT09PT09PT09PT09CisKK1RvIGJ1aWxkLCB0eXBlIG1ha2UsIGl0IHNob3VsZCBhbGwgd29yayBmcm9tIHRoZXJlLiAKKworTk9URSoqIGlmIHlvdXIgc3lzdGVtIGhhcyBlcmxhbmcgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gL3Vzci9sb2NhbC9saWIvZXJsYW5nCit0aGVuIHlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRVJMX1JVTl9UT1AgdG8gdGhhdCBkaXJlY3RvcnkuIEZvciBleGFtcGxlCitpZiB5b3UgaGF2ZSBlcmxhbmcgaW5zdGFsbGVkIGluIC9ob21lL2pkb2UvZXJsYW5nIHRoZW4geW91IHNob3VsZCAKK2V4cG9ydCBFUkxfUlVOX1RPUD0vaG9tZS9qZG9lL2VybGFuZworCisKK0NyZWF0aW5nIGEgbmV3IGFwcGxpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIG5ldyBhcHBsaWNhdGlvbiBjYW4gYmUgY3JlYXRlZCBieSB1c2luZyB0aGUgYXBwZ2VuIHV0aWxpdHkgaW4gb3RwL3Rvb2xzL3V0aWxpdGllcy4KK1RoaXMgdXRpbGl0eSB3aWxsIGNyZWF0ZSBhIGJhc2ljIE9UUCBhcHAgZnJhbWV3b3JrIHVuZGVyIHRoZSBvdHAvbGliIGRpcmVjdG9yeSBhbmQKK2FuIE9UUCByZWxlYXNlIHVuZGVyIHRoZSBvdHAvcmVsZWFzZSBkaXJlY3RvcnkuICAKKwordXNhZ2U6IGFwcGdlbiA8YXBwbmFtZT4gPHByZWZpeD4gCisKK0FwcG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gY3JlYXRlLiAgVGhlIHByZWZpeCBpcyAKK3VzdWFsbHkgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIGFwcG5hbWUuICBUaGlzIHByZWZpeCBpcyB0byBhdm9pZCBuYW1lCitjbGFzaGVzIGJldHdlZW4gYXBwbGljYXRpb25zIGluY2x1ZGVkIGluIGEgcmVsZWFzZSAoRXJsYW5nIGRvZXMgbm90IGhhdmUgcGFja2FnZXMpLgorCitleGFtcGxlIHVzYWdlOiBhcHBnZW4gbXlfYXBwIG1hCisKK3doaWNoIHJlc3VsdHMgaW4gCisKK290cC9saWIvbXlfYXBwICYgb3RwL3JlbGVhc2UvbXlfYXBwX3JlbAorCitSdW5uaW5nIGEgcmVsZWFzZQorPT09PT09PT09PT09PT09PT0KKworWW91ciByZWxlYXNlIHNob3VsZCBjb250YWluIGFsbCB0aGF0IHlvdSBuZWVkIHRvIHJ1biB5b3VyIGFwcGxpY2F0aW9uLiAgSWYgeW91ciBhcHBsaWNhdGlvbgorZGVwZW5kcyBvbiBhbnkgYXBwbGljYXRpb25zIHRoYXQgYXJlIHN1cHBsaWVkIG91dHNpZGUgb2YgdGhpcyBidWlsZCB0cmVlIG9yIE9UUCBpdHNlbGYgdGhlbgordGhleSBtYXkgYmUgYWRkZWQgdG8gdGhlIDxhcHBuYW1lPl9yZWwucmVsLnNyYyBmaWxlLiAgSWYgdGhlIGV4dHJhIGFwcGxpY2F0aW9ucyBhcmUgcHJlc2VudAoraW4gdGhpcyBidWlsZCB0cmVlIHRoZW4gdGhleSB3aWxsIGJlIGZvdW5kIGJ5IHRoZSBtYWtlIHByb2Nlc3MgYW5kIGluY2x1ZGVkIGluIHRoZSBmaW5hbCAKK3JlbGVhc2UuCisKK1RvIHJ1biBhIHJlbGVhc2UgdGhlcmUgYXJlIHR3byBvcHRpb25zOiAibG9jYWwiIGFuZCBpbnN0YWxsZWQuIFRoZSBsb2NhbCB2ZXJzaW9uIGNhbiBiZSBmb3VuZAoraW4gdGhlIG90cC9yZWxlYXNlLzxhcHBuYW1lPl9yZWwvbG9jYWwgZGlyZWN0b3J5IHdoaWNoIGlzIGFkZGVkIGJ5IHRoZSBtYWtlIHByb2Nlc3MuICBUaGlzIAorc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50IHRvIHJ1biB5b3VyIHJlbGVhc2UgaW50ZXJhY3RpdmVseSB2aWEgYW4gRXJsYW5nIHNoZWxsLgorVG8gcnVuIGEgcmVsZWFzZSBpbiBsb2NhbCBtb2RlIGNkIGludG8gdGhlICJsb2NhbCIgZGlyZWN0b3J5IGFuZCBydW4gPGFwcG5hbWU+X3JlbC5zaC4KKworVGhlIHNlY29uZCB3YXkgdG8gcnVuIGEgcmVsZWFzZSBpcyB0byBpbnN0YWxsIGl0IGFuZCBydW4gaXQgYXMgYSBkYWVtb24uICBUaGlzIGlzIHVzZWQgZm9yIAorYXBwbGljYXRpb25zIGluIGEgcHJvZHVjdGlvbiBzZXR0aW5nLiAgVG8gZG8gdGhpcyB5b3UgbmVlZCB0byBmaXJzdCBydW4gbWFrZSAmIG1ha2UgaW5zdGFsbAorZnJvbSB0aGUgPGFwcG5hbWU+X3JlbCBkaXJlY3RvcnkuICBUaGlzIHdpbGwgcGxhY2UgYSBjb21wbGV0ZSBwcm9kdWN0aW9uIHJlYWR5IHZlcnNpb25lZCAKK3JlbGVhc2UgaW4gdGhlIC91c3IvbG9jYWwvbGliLyBkaXJlY3RvcnkgdW5kZXIgPGFwcG5hbWU+X3JlbC4gIFRvIHJ1biBhbiBpbnN0YWxsZWQgcmVsZWFzZQorY2QgdG8gL3Vzci9sb2NhbC9saWIvPGFwcG5hbWU+X3JlbC9yZWxlYXNlLzxyZWxfdnNuPiBhbmQgcnVuIDxhcHBuYW1lPl9yZWwuc2guICAKKworSW4gdGhlIGNhc2Ugd2hlcmUgeW91IHdhbnQgdG8gY3JlYXRlIGEgcHJvZHVjdGlvbiByZWFkeSByZWxlYXNlIG9uIG9uZSBtYWNoaW5lIGFuZCB0aGVuIGRlcGxveSBpdAorb24gbXVsdGlwbGUgaWRlbnRpY2FsIG1hY2hpbmVzIHlvdSBtYXkgY3JlYXRlIGEgcHJvZHVjdGlvbiB0YXIgYXJjaGl2ZS4gIFRvIGRvIHRoaXMgcnVuIAorbWFrZSAmIG1ha2UgdGFyIGZyb20gdGhlIG90cC9yZWxlYXNlLzxhcHBuYW1lPl9yZWwvIGRpcmVjdG9yeS4gVGhpcyB3aWxsIGNyZWF0ZSBhIHRhciBmaWxlIGNvbmF0YWluaW5nIAordGhlIHJlbGVhc2UgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIgaW4gdGhlIGZpbGUgbmFtZS4gIFRoaXMgdGFyIGNhbiBiZSBzaGlwcGVkIHRvIGl0cyBkZXN0aW5hdGlvbiBhbmQgCit1bnRhcnJlZC4gIFdpdGhpbiB0aGUgdW50YXJyZWQgZGlyZWN0b3J5IHRoZXJlIGlzIGEgc2hlbGwgc2NyaXB0IGVudGl0bGVkIGluc3RhbGwuc2guICBSdW5uaW5nIHRoaXMKK3NjcmlwdCB3aWxsIGluc3RhbGwgdGhlIHJlbGVhc2UgYnkgZGVmYXVsdCBpbiAvdXNyL2xvY2FsL2xpYi88YXBwbmFtZT5fcmVsLiAgQW4gb3B0aW9uYWwgYXJndW1lbnQKK2NhbiBiZSBwcm92aWRlZCB0aGF0IHdpbGwgZGlyZWN0IHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorCitFeGFtcGxlIGluc3RhbGwuc2ggL29wdC9saWIgCisKK1RoaXMgd2lsbCBpbnN0YWxsIHRoZSByZWxlYXNlIGluIC9vcHQvbGliLzxhcHBuYW1lPl9yZWwKKyAgCisKKyAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9iZWFtdmVyIGIvbGliL2VybC9idWlsZC9iZWFtdmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNDQ4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL2JlYW12ZXIKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKKyMgZXJsd2FyZVN5czogb3RwL2J1aWxkL2JlYW12ZXIsdiAxLjEgMjAwMi8wMi8xNCAxMTo0NToyMCBoYWwgRXhwICQKKworIyB1c2FnZTogYmVhbXZlciA8YmVhbV9maWxlPgorIworIyBpZiB0aGVyZSdzIGEgdXNhYmxlIC12c24oKSBhdHRyaWJ1dGUsIHByaW50IGl0IGFuZCBleGl0IHdpdGggc3RhdHVzIDAKKyMgb3RoZXJ3aXNlLCBwcmludCBub3RoaW5nIGFuZCBleGl0IHdpdGggc3RhdHVzIDEKKworIyBGcm9tIHRoZSBFcmxhbmcgc2hlbGw6CisjCisjIDU+IGNvZGU6d2hpY2goYWNjYV9pbmV0cykuCisjICIvaG9tZS9tYXJ0aW4vd29yay9vdHAvcmVsZWFzZXMvPGFwcD4vLi4vLi4vYWNjYS9lYmluLzxhcHA+LmJlYW0iCisjIAorIyA4PiBiZWFtX2xpYjp2ZXJzaW9uKGNvZGU6d2hpY2goPGFwcD4pKS4KKyMge29rLHs8YXBwPixbJyRJZDogYmVhbXZlcix2IDEuMS4xLjEgMjAwMy8wNi8xMyAyMTo0MzoyMSBtbG9nYW4gRXhwICQgJ119fQorCisjIFRNUEZJTEUgbG9va3MgbGlrZSB0aGlzOgorIworIyBpbzpmb3JtYXQoImhlbGxvIH5wfm4iLAorIyAgIGJlYW1fbGliOnZlcnNpb24oIi9ob21lL2hhbC93b3JrL290cC9hY2NhL2ViaW4vYWNjYV9pbmV0cy5iZWFtIildKS4KKworVE1QRklMRT0vdG1wL2JlYW12ZXIuJCQKKworIyBleGl0IHdpdGggZmFpbHVyZSBpZiB3ZSBjYW4ndCByZWFkIHRoZSBmaWxlCit0ZXN0IC1mICIkMSIgfHwgZXhpdCAxCitCRUFNRklMRT1cIiQxXCIKKworY2F0ID4gJFRNUEZJTEUgPDxfRU9GCitpbzpmb3JtYXQoIn5wfm4iLAorICBbYmVhbV9saWI6dmVyc2lvbigkQkVBTUZJTEUpXSkuCitfRU9GCisKKyMgYmVhbV9yZXN1bHQgaXMge29rLHtNb2R1bGVfbmFtZSwgQmVhbV92ZXJzaW9ufSBvciB7ZXJyb3IsYmVhbV9saWIse1JlYXNvbn19CitiZWFtX3Jlc3VsdD1gZXJsIC1ub3NoZWxsIFwKKyAgLXMgZmlsZSBldmFsICRUTVBGSUxFIFwKKyAgLXMgZXJsYW5nIGhhbHRgCisKK3JtIC1mICRUTVBGSUxFCisKKyMgc2VkIHJlZ2V4ZXM6CisjICAgcmVtb3ZlIGJyYWNrZXRzIGFuZCBhbnl0aGluZyBvdXRzaWRlIHRoZW0KKyMgICByZW1vdmUgcXVvdGVzIGFuZCBhbnl0aGluZyBvdXRzaWRlIHRoZW0KKyMgICByZW1vdmUgYXBvc3Ryb3BoZXMgYW5kIGFueXRoaW5nIG91dHNpZGUgdGhlbQorIyAgIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMKKworY2FzZSAkYmVhbV9yZXN1bHQgaW4KK1x7b2sqKQorICBlY2hvICRiZWFtX3Jlc3VsdCB8IHNlZCAtZSAncy8uKlxbXCguKlwpXS4qL1wxLycgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLipcIlwoLipcKVwiLiovXDEvJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLy4qXCdcKC4qXClcJy4qL1wxLyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8gKiQvLycgLWUgJ3MvXiAqLy8nCisgIGV4aXQgMAorICA7OworKikKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvYnVpbGR0YXJnZXRzLm1rIGIvbGliL2VybC9idWlsZC9idWlsZHRhcmdldHMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkMGJmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvYnVpbGQvYnVpbGR0YXJnZXRzLm1rCkBAIC0wLDAgKzEsMTQgQEAKK0VCSU49Li4vZWJpbgorRU1VTEFUT1I9YmVhbQorCitFUkxDX1dGTEFHUyA9IC1XCitFUkxDID0gZXJsYyAkKEVSTENfV0ZMQUdTKSAkKEVSTENfRkxBR1MpCitFUkwgPSBlcmwgLWJvb3Qgc3RhcnRfY2xlYW4KK0VTUkMgPSAuCisKKyQoRUJJTikvJS5iZWFtOiAkKEVTUkMpLyUuZXJsCisJJChFUkxDKSAkKEVSTF9GTEFHUykgJChFUkxfQ09NUElMRV9GTEFHUykgLW8kKEVCSU4pICQ8CisKKy5lcmwuYmVhbToKKwkkKEVSTEMpICQoRVJMX0ZMQUdTKSAkKEVSTF9DT01QSUxFX0ZMQUdTKSAtbyQoZGlyICRAKSAkPAorCmRpZmYgLS1naXQgYS9saWIvZXJsL2J1aWxkL2NvbG9ycy5tayBiL2xpYi9lcmwvYnVpbGQvY29sb3JzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjljNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL2NvbG9ycy5tawpAQCAtMCwwICsxLDI0IEBACisjIENvbG9ycyB0byBhc3Npc3QgdmlzdWFsIGluc3BlY3Rpb24gb2YgbWFrZSBvdXRwdXQuCisKKyMgQ29sb3JzCitMR1JBWT0kJCdcZVswOzM3bScKK0RHUkFZPSQkJ1xlWzE7MzBtJworTEdSRUVOPSQkJ1xlWzE7MzJtJworTEJMVUU9JCQnXGVbMTszNG0nCitMQ1lBTj0kJCdcZVsxOzM2bScKK0xQVVJQTEU9JCQnXGVbMTszNW0nCitMUkVEPSQkJ1xlWzE7MzFtJworTk9fQ09MT1I9JCQnXGVbMG0nCitERUZBVUxUPSQkJ1xlWzBtJworQkxBQ0s9JCQnXGVbMDszMG0nCitCTFVFPSQkJ1xlWzA7MzRtJworR1JFRU49JCQnXGVbMDszMm0nCitDWUFOPSQkJ1xlWzA7MzZtJworUkVEPSQkJ1xlWzA7MzFtJworUFVSUExFPSQkJ1xlWzA7MzVtJworQlJPV049JCQnXGVbMDszM20nCitZRUxMT1c9JCQnXGVbMTszM20nCitXSElURT0kJCdcZVsxOzM3bScKKworQk9MRD0kJCdcZVsxOzM3bScKK09GRj0kJCdcZVswbScKZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvZG9jcy5tayBiL2xpYi9lcmwvYnVpbGQvZG9jcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI3Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9idWlsZC9kb2NzLm1rCkBAIC0wLDAgKzEsMTIgQEAKK0VET0NfUEFUSD0uLi8uLi8uLi90b29scy91dGlsaXRpZXMKKworI3NpbmdsZSBwbGFjZSB0byBpbmNsdWRlIGRvY3MgZnJvbS4KK2RvY3M6CisJQG1rZGlyIC1wIC4uL2RvYworCUBlY2hvIC1uICQke01ZX0JMVUU6LSQoQkxVRSl9OyBcCisJJChFRE9DX1BBVEgpL2Vkb2MgJChBUFBfTkFNRSk7IFwKKwlpZiBbICQkPyAtZXEgMCBdOyB0aGVuIFwKKwkJZWNobyAkJHtNWV9MUkVEOi0kKExSRUQpfSIkJGQgRG9jIEZhaWxlZCI7IFwKKwlmaTsgXAorCWVjaG8gLW4gJChPRkYpJChOT19DT0xPUikJCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvbWltZS50eXBlcyBiL2xpYi9lcmwvYnVpbGQvbWltZS50eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmUzYzBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9idWlsZC9taW1lLnR5cGVzCkBAIC0wLDAgKzEsOTggQEAKKworYXBwbGljYXRpb24vYWN0aXZlbWVzc2FnZQorYXBwbGljYXRpb24vYW5kcmV3LWluc2V0CithcHBsaWNhdGlvbi9hcHBsZWZpbGUKK2FwcGxpY2F0aW9uL2F0b21pY21haWwKK2FwcGxpY2F0aW9uL2RjYS1yZnQKK2FwcGxpY2F0aW9uL2RlYy1keAorYXBwbGljYXRpb24vbWFjLWJpbmhleDQwCWhxeAorYXBwbGljYXRpb24vbWFjLWNvbXBhY3Rwcm8JY3B0CithcHBsaWNhdGlvbi9tYWN3cml0ZWlpCithcHBsaWNhdGlvbi9tc3dvcmQJCWRvYworYXBwbGljYXRpb24vbmV3cy1tZXNzYWdlLWlkCithcHBsaWNhdGlvbi9uZXdzLXRyYW5zbWlzc2lvbgorYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCWJpbiBkbXMgbGhhIGx6aCBleGUgY2xhc3MKK2FwcGxpY2F0aW9uL29kYQkJCW9kYQorYXBwbGljYXRpb24vcGRmCQkJcGRmCithcHBsaWNhdGlvbi9wb3N0c2NyaXB0CQlhaSBlcHMgcHMKK2FwcGxpY2F0aW9uL3Bvd2VycG9pbnQJCXBwdAorYXBwbGljYXRpb24vcmVtb3RlLXByaW50aW5nCithcHBsaWNhdGlvbi9ydGYJCQlydGYKK2FwcGxpY2F0aW9uL3NsYXRlCithcHBsaWNhdGlvbi93aXRhCithcHBsaWNhdGlvbi93b3JkcGVyZmVjdDUuMQorYXBwbGljYXRpb24veC1iY3BpbwkJYmNwaW8KK2FwcGxpY2F0aW9uL3gtY2RsaW5rCQl2Y2QKK2FwcGxpY2F0aW9uL3gtY29tcHJlc3MJCVoKK2FwcGxpY2F0aW9uL3gtY3BpbwkJY3BpbworYXBwbGljYXRpb24veC1jc2gJCWNzaAorYXBwbGljYXRpb24veC1kaXJlY3RvcgkJZGNyIGRpciBkeHIKK2FwcGxpY2F0aW9uL3gtZHZpCQlkdmkKK2FwcGxpY2F0aW9uL3gtZ3RhcgkJZ3RhcgorYXBwbGljYXRpb24veC1nemlwCQlnegorYXBwbGljYXRpb24veC1oZGYJCWhkZgorYXBwbGljYXRpb24veC1odHRwZC1jZ2kJCWNnaQorYXBwbGljYXRpb24veC1rb2FuCQlza3Agc2tkIHNrdCBza20KK2FwcGxpY2F0aW9uL3gtbGF0ZXgJCWxhdGV4CithcHBsaWNhdGlvbi94LW1pZgkJbWlmCithcHBsaWNhdGlvbi94LW5ldGNkZgkJbmMgY2RmCithcHBsaWNhdGlvbi94LXNoCQlzaAorYXBwbGljYXRpb24veC1zaGFyCQlzaGFyCithcHBsaWNhdGlvbi94LXN0dWZmaXQJCXNpdAorYXBwbGljYXRpb24veC1zdjRjcGlvCQlzdjRjcGlvCithcHBsaWNhdGlvbi94LXN2NGNyYwkJc3Y0Y3JjCithcHBsaWNhdGlvbi94LXRhcgkJdGFyCithcHBsaWNhdGlvbi94LXRjbAkJdGNsCithcHBsaWNhdGlvbi94LXRleAkJdGV4CithcHBsaWNhdGlvbi94LXRleGluZm8JCXRleGluZm8gdGV4aQorYXBwbGljYXRpb24veC10cm9mZgkJdCB0ciByb2ZmCithcHBsaWNhdGlvbi94LXRyb2ZmLW1hbgkJbWFuCithcHBsaWNhdGlvbi94LXRyb2ZmLW1lCQltZQorYXBwbGljYXRpb24veC10cm9mZi1tcwkJbXMKK2FwcGxpY2F0aW9uL3gtdXN0YXIJCXVzdGFyCithcHBsaWNhdGlvbi94LXdhaXMtc291cmNlCXNyYworYXBwbGljYXRpb24vemlwCQkJemlwCithdWRpby9iYXNpYwkJCWF1IHNuZAorYXVkaW8vbXBlZwkJCW1wZ2EgbXAyCithdWRpby94LWFpZmYJCQlhaWYgYWlmZiBhaWZjCithdWRpby94LXBuLXJlYWxhdWRpbwkJcmFtCithdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4JcnBtCithdWRpby94LXJlYWxhdWRpbwkJcmEKK2F1ZGlvL3gtd2F2CQkJd2F2CitjaGVtaWNhbC94LXBkYgkJCXBkYiB4eXoKK2ltYWdlL2dpZgkJCWdpZgoraW1hZ2UvaWVmCQkJaWVmCitpbWFnZS9qcGVnCQkJanBlZyBqcGcganBlCitpbWFnZS9wbmcJCQlwbmcKK2ltYWdlL3RpZmYJCQl0aWZmIHRpZgoraW1hZ2UveC1jbXUtcmFzdGVyCQlyYXMKK2ltYWdlL3gtcG9ydGFibGUtYW55bWFwCQlwbm0KK2ltYWdlL3gtcG9ydGFibGUtYml0bWFwCQlwYm0KK2ltYWdlL3gtcG9ydGFibGUtZ3JheW1hcAlwZ20KK2ltYWdlL3gtcG9ydGFibGUtcGl4bWFwCQlwcG0KK2ltYWdlL3gtcmdiCQkJcmdiCitpbWFnZS94LXhiaXRtYXAJCQl4Ym0KK2ltYWdlL3gteHBpeG1hcAkJCXhwbQoraW1hZ2UveC14d2luZG93ZHVtcAkJeHdkCittZXNzYWdlL2V4dGVybmFsLWJvZHkKK21lc3NhZ2UvbmV3cworbWVzc2FnZS9wYXJ0aWFsCittZXNzYWdlL3JmYzgyMgorbXVsdGlwYXJ0L2FsdGVybmF0aXZlCittdWx0aXBhcnQvYXBwbGVkb3VibGUKK211bHRpcGFydC9kaWdlc3QKK211bHRpcGFydC9taXhlZAorbXVsdGlwYXJ0L3BhcmFsbGVsCit0ZXh0L2h0bWwJCQlodG1sIGh0bQordGV4dC94LXNlcnZlci1wYXJzZWQtaHRtbAlzaHRtbAordGV4dC9wbGFpbgkJCXR4dAordGV4dC9yaWNodGV4dAkJCXJ0eAordGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcwl0c3YKK3RleHQveC1zZXRleHQJCQlldHgKK3RleHQveC1zZ21sCQkJc2dtbCBzZ20KK3ZpZGVvL21wZWcJCQltcGVnIG1wZyBtcGUKK3ZpZGVvL3F1aWNrdGltZQkJCXF0IG1vdgordmlkZW8veC1tc3ZpZGVvCQkJYXZpCit2aWRlby94LXNnaS1tb3ZpZQkJbW92aWUKK3gtY29uZmVyZW5jZS94LWNvb2x0YWxrCQlpY2UKK3gtd29ybGQveC12cm1sCQkJd3JsIHZybWwKZGlmZiAtLWdpdCBhL2xpYi9lcmwvYnVpbGQvb3RwLm1rIGIvbGliL2VybC9idWlsZC9vdHAubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5M2VhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvYnVpbGQvb3RwLm1rCkBAIC0wLDAgKzEsMTQ2IEBACisjICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAkSWQ6IG90cC5tayx2IDEuNCAyMDA0LzA3LzAxIDE0OjU3OjEwIHRmZWUgRXhwICQKKyMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyMgb3RwLm1rCisjIC0gdG8gYmUgaW5jbHVkZWQgaW4gYWxsIE9UUCBNYWtlZmlsZXMKKyMgaW5zdGFsbGVkIHRvIC91c3IvbG9jYWwvaW5jbHVkZS9lcmxhbmcvb3RwLm1rCisKKyMgZ21ha2UgbG9va3MgaW4gL3Vzci9sb2NhbC9pbmNsdWRlIC0gdGhhdCdzIGhhcmQtY29kZWQKKyMgdXNlcnMgb2YgdGhpcyBmaWxlIHdpbGwgdXNlCisjIGluY2x1ZGUgZXJsYW5nL3RvcC5taworCisjIG1vc3QgaW50ZXJmYWNlIGZpbGVzIHdpbGwgYmUgaW5zdGFsbGVkIHRvICRFUkxfUlVOX1RPUC9hcHAtdnNuL2luY2x1ZGUvKi5ocmwKKworIyBncm91cCBvd25lciBmb3IgbGlicmFyeS9pbmNsdWRlIGRpcmVjdG9yaWVzCitFUkxBTkdERVZfR1JPVVA9ZXJsYW5nZGV2CisKKyMgRVJMX1RPUCBpcyByb290IG9mIEVybGFuZyBzb3VyY2UgdHJlZQorIyBFUkxfUlVOX1RPUCBpcyByb290IG9mIEVybGFuZyB0YXJnZXQgdHJlZSAoc29tZSBFcmljc3NvbiBNYWtlZmlsZXMgdXNlICRST09UKQorIyBFUkxBTkdfT1RQIGlzIHRhcmdldCByb290IGZvciBFcmxhbmcgY29kZSAKKyMgLSBzZWUgc2FzbC9zeXN0b29scyByZWZlcmVuY2UgbWFudWFsIHBhZ2U7IGdyZXAgIlRFU1QiCisKKyMgT1NfVFlQRSBpcyBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsIExpbnV4LCBTQ09fU1YsIFN1bk9TLiAKK09TX1RZUEU9JHtzaGVsbCB1bmFtZX0KKworIyBNSE9TVCBpcyB0aGUgaG9zdCB3aGVyZSB0aGlzIE1ha2VmaWxlIHJ1bnMuCitNSE9TVD0ke3NoZWxsIGhvc3RuYW1lIC1zfQorRVJMX0NPTVBJTEVfRkxBR1MrPS1XMAorCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXJsYW5nIHJ1bnRpbWUgc3lzdGVtLgoraWZuZGVmIEVSTF9SVU5fVE9QCitFUkxfUlVOX1RPUD0vdXNyL2xvY2FsL2xpYi9lcmxhbmcKK2VuZGlmCisKKworIyBFZGl0IHRvIHJlZmxlY3QgbG9jYWwgZW52aXJvbm1lbnQuCisjIGlmZXEgKCR7T1NfVFlQRX0sTGludXgpCisjIEVSTF9SVU5fVE9QPS91c3IvbG9jYWwvbGliL2VybGFuZworIyAgTm90ZSogRVJMX1JVTl9UT1AgY2FuIGJlIGRldGVybWluZWQgYnkgc3RhcnRpbmcgYW4gCisjICAgICAgICBlcmxhbmcgc2hlbGwgYW5kIHR5cGluZyBjb2RlOnJvb3RfZGlyKCkuCisjIEVSTF9UT1A9YSBzeW1ib2xpYyBsaW5rIHRvIHRoZSBhY3R1YWwgc291cmNlIHRvcCwgd2hpY2ggY2hhbmdlcyBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbgorIyAgTm90ZSogRVJMX1RPUCBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBlcmxhbmcgCisjICAgICAgICBzb3VyY2UgZmlsZXMgcmVzaWRlLiBNYWtlIHN1cmUgdG8gcnVuIC4vY29uZmlndXJlIHRoZXJlLiAKKyMgVEFSR0VUPWk2ODYtcGMtbGludXgtZ251CisjICBOb3RlKiBUYXJnZXQgY2FuIGJlIGZvdW5kIGluICRFUkxfVE9QL2VydHMKKyMgZW5kaWYKKworIyBTZWUgYWJvdmUgZm9yIGRpcmVjdGlvbnMuCitpZmVxICgke09TX1RZUEV9LExpbnV4KQorRVJMX1RPUD0vb3B0L09UUF9TUkMKK1RBUkdFVD1pNjg2LXBjLWxpbnV4LWdudQorZW5kaWYKKworRVJMQU5HX09UUD0vdXNyL2xvY2FsL2VybGFuZy9vdHAKK1ZBUl9PVFA9L3Zhci9vdHAKKworCisjIEFsaWFzZXMgZm9yIGNvbW1vbiBiaW5hcmllcworIyBOb3RlIC0gQ0ZMQUdTIGlzIG1vZGlmaWVkIGluIGVybGFuZy5jb25mCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3VuT1MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICgke09TX1RZUEV9LFN1bk9TKQorCisgICAgQ0M9Z2NjCisgICAgQ1hYPWcrKworICAgIEFSPS91c3IvY2NzL2Jpbi9hcgorICAgIEFSRkxBR1M9LXJ2CisgICAgQ1hYRkxBR1MrPSR7Q0ZMQUdTfSAtSS91c3IvaW5jbHVkZS9nKysKKyAgICBMRD0vdXNyL2Njcy9iaW4vbGQKKyAgICBSQU5MSUI9L3Vzci9jY3MvYmluL3JhbmxpYgorCitDRkxBR1MrPS1XYWxsIC1wZWRhbnRpYyAtYW5zaSAtTyAKK0NPUkU9Ki5jb3JlCitlbmRpZgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZyZWVCU0QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICgke09TX1RZUEV9LEZyZWVCU0QpCisKKyAgaWZkZWYgTElOVVhCSU4KKyAgICBDT01QQVRfTElOVVg9L2NvbXBhdC9saW51eAorICAgIENDPSR7Q09NUEFUX0xJTlVYfS91c3IvYmluL2djYworICAgIENYWD0ke0NPTVBBVF9MSU5VWH0vdXNyL2Jpbi9nKysKKyAgICBBUj0ke0NPTVBBVF9MSU5VWH0vdXNyL2Jpbi9hcgorICAgIEFSRkxBR1M9LXJ2CisgICAgQ1hYRkxBR1MrPS1maGFuZGxlLWV4Y2VwdGlvbnMgJHtDRkxBR1N9IC1JJHtDT01QQVRfTElOVVh9L3Vzci9pbmNsdWRlL2crKworICAgIExEPSR7Q09NUEFUX0xJTlVYfS91c3IvYmluL2xkCisgICAgUkFOTElCPSR7Q09NUEFUX0xJTlVYfS91c3IvYmluL3JhbmxpYgorCUJSQU5ERUxGPWJyYW5kZWxmIC10IExpbnV4CisgIGVsc2UKKyAgICBDQz1nY2MKKyAgICBDWFg9ZysrCisgICAgQVI9L3Vzci9iaW4vYXIKKyAgICBBUkZMQUdTPS1ydgorICAgIENYWEZMQUdTKz0tZmhhbmRsZS1leGNlcHRpb25zICR7Q0ZMQUdTfSAtSS91c3IvaW5jbHVkZS9nKysKKyAgICBMRD0vdXNyL2Jpbi9sZAorICAgIFJBTkxJQj0vdXNyL2Jpbi9yYW5saWIKKwlCUkFOREVMRj1AdHJ1ZQorCisgICAgaWZkZWYgVVNFU19QVEhSRUFEUworICAgICAgQ0ZMQUdTKz0tRF9USFJFQURfU0FGRQorICAgICAgTERGTEFHUys9LWxjX3IKKworCSAgIyAtcHRocmVhZCBmbGFnIGZvciAzLjArCisJICBpZm5lcSAoJHtzaGVsbCB1bmFtZSAtciB8IGN1dCAtZC4gLWYxfSwyKQorCQlDRkxBR1MrPS1wdGhyZWFkCisJICBlbmRpZgorICAgIGVuZGlmCisgIGVuZGlmCisKK0NGTEFHUys9LVdhbGwgLXBlZGFudGljIC1hbnNpIC1PIC1ERlJFRUJTRAorQ09SRT0qLmNvcmUKK2VuZGlmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wZW5CU0QKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICgke09TX1RZUEV9LE9wZW5CU0QpCisKKyAgICBDQz1nY2MKKyAgICBDWFg9ZysrCisgICAgQVI9L3Vzci9iaW4vYXIKKyAgICBBUkZMQUdTPS1ydgorICAgIENYWEZMQUdTKz0ke0NGTEFHU30gLUkvdXNyL2luY2x1ZGUvZysrCisgICAgTEQ9L3Vzci9iaW4vbGQKKyAgICBSQU5MSUI9L3Vzci9iaW4vcmFubGliCisKKyAgICBpZmRlZiBVU0VTX1BUSFJFQURTCisgICAgICBDRkxBR1MrPS1EX1RIUkVBRF9TQUZFCisgICAgICBMREZMQUdTKz0tbGNfcgorCisJICAjIC1wdGhyZWFkIGZsYWcgZm9yIDMuMCsKKwkgIGlmbmVxICgke3NoZWxsIHVuYW1lIC1yIHwgY3V0IC1kLiAtZjF9LDIpCisJCUNGTEFHUys9LXB0aHJlYWQKKwkgIGVuZGlmCisgICAgZW5kaWYKKworQ0ZMQUdTKz0tV2FsbCAtcGVkYW50aWMgLWFuc2kgLU8gLURPUEVOQlNECitDT1JFPSouY29yZQorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9idWlsZC9vdHBfc3ViZGlyLm1rIGIvbGliL2VybC9idWlsZC9vdHBfc3ViZGlyLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMzM5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2J1aWxkL290cF9zdWJkaXIubWsKQEAgLTAsMCArMSw4NSBAQAorIyBDb21tZW50IGJ5IHRmZWUgMjAwNC0wNy0wMQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUaGlzIGZpbGUgaXMgYSBtb2Qgb2YgdGhlIHN0b2NrIE9UUCBvbmUuCisjIFRoZSBjaGFuZ2UgYWxsb3dzIG1ha2UgdG8gc3RvcCB3aGVuIGEgY29tcGlsZSBlcnJvciBvY2N1cnMuCisjIFRoaXMgZmlsZSBuZWVkcyB0byBnbyBpbnRvIHR3byBwbGFjZXM6CisjICAgICAvdXNyL2xvY2FsL2luY2x1ZGUvZXJsYW5nCisjICAgICAvb3B0L09UUF9TUkMvbWFrZQorIworIyB3aGVyZSBPVFBfU1JDIGlzIGEgc3ltYm9saWMgbGluayB0byBhIHBlZXIgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyMgdGhlIG90cCBzb3VyY2UsIGUuZy4gb3RwX3NyY19SOUMtMi4KKyMKKyMgQWZ0ZXIgaW5zdGFsbGluZyBPVFAsIHJ1bm5pbmcgc3VkbyBtYWtlIGluc3RhbGwgaW4gb3RwL2J1aWxkCisjIHdpbGwgcHVzaCB0aGlzIGZpbGUgb3V0IHRvIHRoZSB0d28gcGxhY2VzIGxpc3RlZCBhYm92ZS4KKyMKKyMgVGhlIG1vZCBpbnZvbHZlcyBzZXR0aW5nIHRoZSBzaGVsbCB2YXJpYWJsZSAkc2hvcnRfY2lyY3VpdCwgd2hpY2ggd2UKKyMgaW50cm9kdWNlIC0gaWUgaXQgaXMgbm90IGluIHRoZSBzdG9jayBmaWxlLiBUaGlzIHZhcmlhYmxlIGlzIHRlc3RlZAorIyB0byBhZmZlY3QgZXhlY3V0aW9uIGZsb3cgYW5kIGlzIGFsc28gcmV0dXJuZWQgdG8gYWZmZWN0IHRoZSBmbG93IGluCisjIHRoZSBjYWxsaW5nIHNjcmlwdCAodGhpcyBvbmUpLiBUaGUgbGF0dGVyIHN0ZXAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyMgb2YgdGhlIHJlY3Vyc2lvbiBpbnZvbHZlZC4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworIyBgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSwKKyMgVmVyc2lvbiAxLjEsICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyMgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZQorIyBFcmxhbmcgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIGl0IGNhbiBiZQorIyByZXRyaWV2ZWQgdmlhIHRoZSB3b3JsZCB3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmVybGFuZy5vcmcvLgorIyAKKyMgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorIyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCisjIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIAorIyBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgRXJpY3Nzb24gVXR2ZWNrbGluZ3MgQUIuCisjIFBvcnRpb25zIGNyZWF0ZWQgYnkgRXJpY3Nzb24gYXJlIENvcHlyaWdodCAxOTk5LCBFcmljc3NvbiBVdHZlY2tsaW5ncworIyBBQi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4nJworIyAKKyMgICAgICRJZDogb3RwX3N1YmRpci5tayx2IDEuNSAyMDA0LzA3LzEyIDE1OjEyOjIzIGplaW5ob3JuIEV4cCAkCisjCisjCisjIE1ha2UgaW5jbHVkZSBmaWxlIGZvciBvdHAKKworLlBIT05ZOiBkZWJ1ZyBvcHQgcmVsZWFzZSBkb2NzIHJlbGVhc2VfZG9jcyB0ZXN0cyByZWxlYXNlX3Rlc3RzIFwKKwljbGVhbiBkZXBlbmQKKworIworIyBUYXJnZXRzIHRoYXQgZG9uJ3QgYWZmZWN0IGRvY3VtZW50YXRpb24gZGlyZWN0b3JpZXMKKyMKK2RlYnVnIG9wdCByZWxlYXNlIGRvY3MgcmVsZWFzZV9kb2NzIHRlc3RzIHJlbGVhc2VfdGVzdHMgY2xlYW4gZGVwZW5kOiBwcmVwYXJlCisJQHNldCAtZSA7CQkJCQkJCVwKKwlhcHBfcHdkPWBwd2RgIDsJCQkJCQkJXAorCWlmIHRlc3QgLWYgdnNuLm1rOyB0aGVuCQkJCQkJXAorCSAgICBlY2hvICI9PT0gRW50ZXJpbmcgYXBwbGljYXRpb24iIGBiYXNlbmFtZSAkJGFwcF9wd2RgIDsJXAorCWZpIDsJCQkJCQkJCVwKKwljYXNlICIkKE1BS0UpIiBpbiAqY2xlYXJtYWtlKikgdGZsYWc9Ii1UIjs7ICopIHRmbGFnPSIiOzsgZXNhYzsJXAorCXNob3J0X2NpcmN1aXQ9MCA7CQkJCQkJXAorCWZvciBkIGluICQoU1VCX0RJUkVDVE9SSUVTKTsgZG8JCQkJCVwKKwkgICAgaWYgW1sgJCRzaG9ydF9jaXJjdWl0ID0gMCBdXTsgdGhlbgkJCQlcCisJCWlmIHRlc3QgLWYgJCRkL1NLSVAgOyB0aGVuCQkJCVwKKwkJICAgIGVjaG8gIj09PSBTa2lwcGluZyBzdWJkaXIgJCRkLCByZWFzb246IiA7CQlcCisJCSAgICBjYXQgJCRkL1NLSVAgOwkJCQkJXAorCQkgICAgZWNobyAiPT09IiA7CQkJCQlcCisJCWVsc2UJCQkJCQkJXAorCQkgICAgaWYgdGVzdCAhIC1kICQkZCA7IHRoZW4JCQkJXAorCQkJZWNobyAiPT09IFNraXBwaW5nIHN1YmRpciAkJGQsIGl0IGlzIG1pc3NpbmciIDsJXAorCQkgICAgZWxzZQkJCQkJCVwKKwkJCXhmbGFnPSIiIDsJCQkJCVwKKwkJCWlmIHRlc3QgLWYgJCRkL2lnbm9yZV9jb25maWdfcmVjb3JkLmluZjsgdGhlbglcCisJCQkgICAgeGZsYWc9JCR0ZmxhZyA7CQkJCVwKKwkJCWZpIDsJCQkJCQlcCisJCQkoY2QgJCRkICYmICQoTUFLRSkgJCR4ZmxhZyAkQCkgOwkJXAorCQkJaWYgW1sgJCQ/ICE9IDAgXV07IHRoZW4JCQkJXAorCQkJICAgIHNob3J0X2NpcmN1aXQ9MSA7CQkJCVwKKwkJCWZpIDsJCQkJCQlcCisJCSAgICBmaSA7CQkJCQkJXAorCQlmaSA7CQkJCQkJCVwKKwkgICAgZmkgOwkJCQkJCQlcCisJZG9uZSA7CQkJCQkJCQlcCisJaWYgdGVzdCAtZiB2c24ubWs7IHRoZW4JCQkJCQlcCisJICAgIGVjaG8gIj09PSBMZWF2aW5nIGFwcGxpY2F0aW9uIiBgYmFzZW5hbWUgJCRhcHBfcHdkYCA7CVwKKwlmaSA7CQkJCQkJCQlcCisJZXhpdCAkJHNob3J0X2NpcmN1aXQKKworcHJlcGFyZToKKwllY2hvCmRpZmYgLS1naXQgYS9saWIvZXJsL2J1aWxkL3Jhd190ZXN0Lm1rIGIvbGliL2VybC9idWlsZC9yYXdfdGVzdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmFjZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9idWlsZC9yYXdfdGVzdC5tawpAQCAtMCwwICsxLDI5IEBACisjIGZvciB0ZXN0aW5nIGVybGFuZyBmaWxlcyBkaXJlY3RseS4gVGhlIHNldCB1cCBmb3IgYQorIyB0aGlzIHR5cGUgb2YgdGVzdCB3b3VsZCBiZSAKKyMgZmlsZXMgdG8gdGVzdCByZXNpZGUgaW4gbGliLzxhcHBfbmFtZT4vc3JjIGFuZCB0aGUgdGVzdCBmaWxlcyB3aGljaCBhcmUgCisjIGp1c3QgcGxhaW4gZXJsYW5nIGNvZGUgcmVzaWRlIGluIGxpYi88YXBwX25hbWU+L3Rlc3QKKyMKKyMgVGhpcyBjb2xvciBjb2RlcyBlbWl0dGVkIHdoaWxlIHRoZSB0ZXN0cyBydW4gYXNzdW1lIHRoYXQgeW91IGFyZSB1c2luZworIyBhIHdoaXRlLW9uLWJsYWNrIGRpc3BsYXkgc2NoZW1hLiBJZiBub3QsIGUuZy4gaWYgeW91IHVzZSBhIHdoaXRlCisjIGJhY2tncm91bmQsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdGhlICJXSElURSIgdGV4dC4KKyMgWW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHN1cHBseWluZyB5b3VyIG93biAid2hpdGUiIGNvbG9yLAorIyB3aGljaCBtYXkgaW4gZmFjdCBiZSBibGFjayEgWW91IGRvIHRoaXMgYnkgZGVmaW5pbmcgYW4gZW52aXJvbm1lbnQKKyMgdmFyaWFibGUgbmFtZWQgIk1ZX1dISVRFIiBhbmQgc2V0dGluZyBpdCB0byAkJ1xlWzA7MzBtJyAod2hpY2ggaXMKKyMgc2ltcGx5IGJhc2gncyB3YXkgb2Ygc3BlY2lmeWluZyAiRXNjYXBlIFsgMCA7IDMgMCBtIikuCisjIFNpbWlsYXJseSwgeW91IGNhbiBzZXQgeW91ciB2ZXJzaW9ucyBvZiB0aGUgc3RhbmRhcmQgY29sb3JzCisjIGZvdW5kIGluIGNvbG9ycy5tay4KKwordGVzdDoKKwlAVEVTVF9NT0RVTEVTPWBscyAqX3Rlc3QuZXJsYDsgXAorCXRyYXAgImVjaG8gJChPRkYpJChOT19DT0xPUik7IGV4aXQgMTsiIDEgMiAzIDY7IFwKKwlmb3IgZCBpbiAkJFRFU1RfTU9EVUxFUzsgZG8gXAorCQllY2hvICQke01ZX0dSRUVOOi0kKEdSRUVOKX0iVGVzdGluZyBGaWxlICQkZCIgJCR7TVlfV0hJVEU6LSQoV0hJVEUpfTsgXAorCQllY2hvIC1uICQke01ZX0JMVUU6LSQoQkxVRSl9OyBcCisJCWVybCAtbmFtZSAkKEFQUF9OQU1FKSAkKFRFU1RfTElCUykgXAorCQktcyBgYmFzZW5hbWUgJCRkIC5lcmxgIGFsbCAtcyBpbml0IHN0b3AgLW5vc2hlbGw7IFwKKwkJaWYgWyAkJD8gLW5lIDAgXTsgdGhlbiBcCisJCQllY2hvICQke01ZX0xSRUQ6LSQoTFJFRCl9IiQkZCBUZXN0IEZhaWxlZCI7IFwKKwkJZmk7IFwKKwkJZWNobyAtbiAkKE9GRikkKE5PX0NPTE9SKTsgXAorICAgICAgICBkb25lICAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvTWFrZWZpbGUgYi9saWIvZXJsL2xpYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNiZmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSAuLi9idWlsZC9jb2xvcnMubWsKKworTU9EVUxFUz0kKHNoZWxsIGxzIC4gfCBncmVwICJbXihNYWtlZmlsZSldIikKKworYWxsIGNsZWFuIGRvY3M6CisJQGZvciBkaXIgaW4gJChNT0RVTEVTKTsgZG8gXAorCQkoY2QgJCRkaXI7IGlmIFsgLWUgIlNLSVAiIF07IHRoZW4gIGVjaG8gJCR7TVlfTFJFRDotJChMUkVEKX0ic2tpcHBpbmcgXCJtYWtlICRAXCIgZm9yICQkZGlyIjsgZWxzZSAke01BS0V9ICRAOyBmaSk7IFwKKwkJaWYgWyAiJCQ/IiAtbmUgIjAiIF07IHRoZW4gRVJST1I9JCQ/OyBlY2hvICJFcnJvciBDb2RlICQkRVJST1IiOyBleGl0ICQkRVJST1I7IGZpOyBcCisJCWVjaG8gLW4gJChPRkYpJChOT19DT0xPUik7IFwKKwlkb25lCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvQ09QWUlORyBiL2xpYi9lcmwvbGliL3RocmlmdC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWYyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvQ09QWUlORwpAQCAtMCwwICsxLDI0IEBACitUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorQ29weXJpZ2h0IChjKSAyMDA2LSBGYWNlYm9vaywgSW5jLiAKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvSEVBREVSIGIvbGliL2VybC9saWIvdGhyaWZ0L0hFQURFUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQzZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L0hFQURFUgpAQCAtMCwwICsxLDYgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9MSUNFTlNFIGIvbGliL2VybC9saWIvdGhyaWZ0L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ZjIxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9MSUNFTlNFCkBAIC0wLDAgKzEsMjQgQEAKK1RocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDIwMDYtIEZhY2Vib29rLCBJbmMuIAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9NYWtlZmlsZSBiL2xpYi9lcmwvbGliL3RocmlmdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJjOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorTU9EVUxFUyA9IFwKKwlzcmMKKworYWxsIGNsZWFuIGRvY3M6CisJZm9yIGRpciBpbiAkKE1PRFVMRVMpOyBkbyBcCisJCShjZCAkJGRpcjsgJHtNQUtFfSAkQCk7IFwKKwlkb25lCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvUkVBRE1FIGIvbGliL2VybC9saWIvdGhyaWZ0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDJmZDZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L1JFQURNRQpAQCAtMCwwICsxLDM5IEBACitZTU1WCitlbWFpbCBjcGlyb0BmYWNlYm9vay5jb20KKy0tCisKK1RPIFNUQVJUIEEgU0VSVkVSOgorCiskIGNkIGxpYi9lcmwvbGliL3RocmlmdC8KKyQgY2QgdHV0b3JpYWwKKyQgdGhyaWZ0IC1jcHAgLWphdmEgLXB5IC1waHAgLXJiIC1wZXJsIC1lcmwgLXhzZCAtciB0dXRvcmlhbC50aHJpZnQKKyQgY2QgLi4KKyQgbWFrZQorJCAuL3NlcnZlci5zaAorPiBQaWQgPSBzZXJ2ZXI6c3RhcnQoKS4KKyAgKiogR0FaRSBJTiBBTUFaRU1FTlQgKioKKz4gc2VydmVyOnN0b3AoUGlkKS4KKworTk9URVM6CisKK2dldC9zZXQgbmV2ZXIgbWVhbnMgcHJvY2VzcyBkaWN0aW9uYXJ5CisKK3RFeGVjcHRpb25zIGFuZCB0KkZhY3RvcnlzIGFyZSBzdHJhaWdodCAibmV3IiAtLSBlLmcuIFRGID0gdFRyYW5zcG9ydEZhY3Rvcnk6bmV3KCkKK2V2ZXJ5dGhpbmcgZWxzZSBpcyBzdGFydF9uZXcgKGkuZS4gZ2VuX3NlcnZlcjpzdGFydF9saW5rKSAtLSB0aGlzIHNwYXducyBhIHByb2Nlc3MgYW5kIHJldHVybnMgYSBwaWQKKworbm90YWJsZSBjaGFuZ2UgZnJvbSB0aGUgUnVieToKK2luIHQqU2VydmVyOm5ldywgdGhlIHBhcmFtZXRlcnMgbm93IGluY2x1ZGUgYSBoYW5kbGVyLCBpLmUuIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIG5hbWUuICBGb3IgZXhhbXBsZSBpZiB5b3VyIGludGVyZmFjZSBpcyBjYWxsZWQgY2FsY3VsYXRvciwgdGhlbiB0byBzcGF3biBhIFRTaW1wbGVTZXJ2ZXIgdHJ5OiBvb3A6c3RhcnRfbmV3KHRTaW1wbGVTZXJ2ZXIsIFtjYWxjdWxhdG9yLCBjYWxjdWxhdG9ySGFuZGxlciwgVHJhbnNwb3J0LCBURl0pCisKK3RFcmxQcm9jZXNzb3IgaXMgYSBzaGltIGFyb3VuZCB0aGUgZ2VuZXJhdGVkIGNvZGUgKHdoaWNoIGlzIG5vdCBhY3R1YWxseSBhIGdlbl9zZXJ2ZXIpLiAgT2YgY291cnNlIHRFcmxQcm9jZXNzb3IgaXNuJ3QgYSBnZW5fc2VydmVyIGVpdGhlciAuLi4gdGhyaWZ0X29vcF9zZXJ2ZXIgaXMgYSBzaGltIHRvIG1ha2Ugb3VyICJUaHJpZnQgb2JqZWN0cyIgZ2VuX3NlcnZlcnMuICBNYXliZSB3ZSBzaG91bGQgcmVtb3ZlIHNvbWUgbGF5ZXJzPworCitVc2UgdEVybFNlcnZlciBhbmQgdEVybEFjY2VwdG9yLiAgdFNpbXBsZVNlcnZlciBhbmQgdFNlcnZlclNvY2tldCBhcmUgaW5jb21wYXRpYmxlIGJ5IGRlc2lnbiAuLi4gdGhlIGNhbGwgdHJhY2UgaXMgc3Bhc3RpYyBhY3Jvc3MgdGhlIHByb2Nlc3MgdHJlZS4gIHRFcmxTZXJ2ZXIgYW5kIHRFcmxBY2NlcHRvciBmb2xsb3cgdGhlIHNhbWUgbW9kZWwgYXMgaXNlcnZlOiAKKyAqIHRoZSB0b3AgbGV2ZWwgY29kZSBzcGF3bnMgYSB0RXJsU2VydmVyLCB3aGljaCBsaXN0ZW5zIG9uIGEgc29ja2V0CisgKiBhIHRFcmxBY2NlcHRvciBpcyBzcGF3bmVkIGFuZCBjYWxscyBhY2NlcHQoKSBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldAorICogd2hlbiBhY2NlcHQoKSBmaW5pc2hlcywgdGhlIHRFcmxBY2NlcHRvciAKKyAgICogdGVsbHMgdGhlIHRFcmxTZXJ2ZXIgdG8gc3Bhd24gYSBuZXcgYWNjZXB0b3IKKyAgICogaGFuZGxlcyB0aGUgcmVxdWVzdHMgYnkgc3Bhd25pbmcgYSBwcm9jZXNzb3IsIGEgdHJhbnNwb3J0LCBhbmQgYSBwcm90b2NvbAorICogKHRoZSB0cmlja3kgcGFydCkgd2hlbiB0aGUgc29ja2V0IGNsb3NlcywgdGhlIHByb3RvY29sIGV4aXRzLCBzbzoKKyAgICogdGhlIHRyYW5zcG9ydCBleGl0cyBiZWNhdXNlIGl0J3MgdGhlIG9uZSBjYWxsZXIgb2YgdGhlIHByb3RvY29sCisgICAqIGxpa2V3aXNlLCB0aGUgcHJvY2Vzc29yIGV4aXRzIGJlY2F1c2UgaXQncyB0aGUgY2FsbGVyIG9mIHRoZSB0cmFuc3BvcnQKKyAgICogdGhlIHRFcmxBY2NlcHRvciB0cmFwcyB0aGUgcHJvdG9jb2wncyBleGl0IGFuZCBleGl0cyB3aXRoIGFuIGFjY2VwdG9yX2RvbmUKKyAgICogdGhlIHRFcmxTZXJ2ZXIgc2VlcyB0aGF0IHRoZSBhY2NlcHRvciBleGl0ZWQgYW5kIGRvZXMgbm90aGluZyBzaW5jZSB0aGVyZSBpcyBhbHJlYWR5IGFub3RoZXIgYWNjZXB0b3IgYWNjZXB0KClpbmcgb24gdGhlIGxpc3RlbiBzb2NrZXQKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9UT0RPIGIvbGliL2VybC9saWIvdGhyaWZ0L1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhODcwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9UT0RPCkBAIC0wLDAgKzEsMTAgQEAKK3R1dG9yaWFsIGNsaWVudAorCitmaW5kIFRPRE8oY3Bpcm8pcworbWFrZSBhbGwgbWV0aG9kcyBlZmZlY3RmdWwsIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNpbmcgKG9wdGlvbmFsbHksIGltcGxlbWVudCBtb25hZHMgZm9yIEVybGFuZykKKworaW5oZXJpdGFuY2UKKwordGVzdCBzdWl0ZXMKKwordW5kaXNndXN0aWZ5IGNvZGVnZW4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL29vcC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9vb3AuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OGUxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9vb3AuaHJsCkBAIC0wLDAgKzEsMjYgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1kZWZpbmUoQ0xBU1MoT2JqKSwgZWxlbWVudCgxLCBPYmopKS4KKworLWRlZmluZShERUZJTkVfQVRUUihBdHRyKSwgYXR0cihUaGlzLCBnZXQsIEF0dHIsIF9WYWx1ZSkgLT4gVGhpcyM/TU9EVUxFLkF0dHI7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cihUaGlzLCBzZXQsIEF0dHIsIFZhbHVlKSAgLT4gVGhpcyM/TU9EVUxFe0F0dHI9VmFsdWV9CispLgorCSAgICAgICAKKyUlJSBzdGF0aWM6IHVzZSBvbmx5IGlmIHlvdSdyZSBzdXJlIFRoaXMgaXMgY2xhc3MgP01PRFVMRSBhbmQgbm90IGEgc3VwZXIvc3ViY2xhc3MKKy1kZWZpbmUoQVRUUihBdHRyKSwgVGhpcyM/TU9EVUxFLkF0dHIpLgorCislJSUgY29udmVuaWVuY2UgZm9yIGltcGxlbWVudGluZyBpbnNwZWN0LzEKKyUlJSBlLmcuIC0+ICJmb289NSIKKy1kZWZpbmUoRk9STUFUX0FUVFIoQXR0ciksICAgICAKKwlpb19saWI6d3JpdGVfYXRvbShBdHRyKSArKyAiPSIgKysgaW9fbGliOnByaW50KD9BVFRSKEF0dHIpKQorKS4KKworCistZGVmaW5lKEFUVFJfRFVNTVksIAorCWF0dHIoZHVtbXksIGR1bW15LCBkdW1teSwgZHVtbXkpIC0+CisJICAgICAgIHRocm93KGR1bW15X2F0dHJfdXNlZCkKKykuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc2ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmhybApAQCAtMCwwICsxLDEwIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistZGVmaW5lKFZFUlNJT05fTUFTSywgMTYjRkZGRjAwMDApLgorLWRlZmluZShWRVJTSU9OXzEsIDE2IzgwMDEwMDAwKS4KKworLXJlY29yZCh0QmluYXJ5UHJvdG9jb2wsIHtzdXBlcn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2xGYWN0b3J5LmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjY5MzJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRCaW5hcnlQcm90b2NvbEZhY3RvcnksIHtzdXBlcn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RQcm90b2NvbC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0MmQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3Byb3RvY29sL3RQcm90b2NvbC5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRQcm90b2NvbCwge3RyYW5zfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU3MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybApAQCAtMCwwICsxLDE1IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9VTktOT1dOLCAwKS4KKy1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX0lOVkFMSURfREFUQSwgMSkuCistZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9ORUdBVElWRV9TSVpFLCAyKS4KKy1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX1NJWkVfTElNSVQsIDMpLgorLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fQkFEX1ZFUlNJT04sIDQpLgorCistcmVjb3JkKHRQcm90b2NvbEV4Y2VwdGlvbiwge3N1cGVyLCB0eXBlfSkuCisKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sRmFjdG9yeS5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9wcm90b2NvbC90UHJvdG9jb2xGYWN0b3J5LmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmM3ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvcHJvdG9jb2wvdFByb3RvY29sRmFjdG9yeS5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRQcm90b2NvbEZhY3RvcnksIHt9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3NlcnZlci90RXJsU2VydmVyLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3NlcnZlci90RXJsU2VydmVyLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY2OTkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RFcmxTZXJ2ZXIuaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0RXJsU2VydmVyLCB7c3VwZXIsIGFjY2VwdG9yLCBsaXN0ZW5Tb2NrZXQsIHBvcnR9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3NlcnZlci90U2VydmVyLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3NlcnZlci90U2VydmVyLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJhMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RTZXJ2ZXIuaHJsCkBAIC0wLDAgKzEsNyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0U2VydmVyLCB7aGFuZGxlciwgcHJvY2Vzc29yLCBzZXJ2ZXJUcmFuc3BvcnQsIHRyYW5zcG9ydEZhY3RvcnksIHByb3RvY29sRmFjdG9yeX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RTaW1wbGVTZXJ2ZXIuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvc2VydmVyL3RTaW1wbGVTZXJ2ZXIuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTVkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS9zZXJ2ZXIvdFNpbXBsZVNlcnZlci5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRTaW1wbGVTZXJ2ZXIsIHtzdXBlcn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMTUzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwKQEAgLTAsMCArMSwxNSBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworJSBUQXBwbGljYXRpb25FeGNlcHRpb24KKy1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV04sIDApLgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTl9NRVRIT0QsIDEpLgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fSU5WQUxJRF9NRVNTQUdFX1RZUEUsIDIpLgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fV1JPTkdfTUVUSE9EX05BTUUsIDMpLgorLWRlZmluZSh0QXBwbGljYXRpb25FeGNlcHRpb25fQkFEX1NFUVVFTkNFX0lELCA0KS4KKy1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX01JU1NJTkdfUkVTVUxULCA1KS4KKworLXJlY29yZCh0QXBwbGljYXRpb25FeGNlcHRpb24sIHtzdXBlciwgdHlwZX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEVybFByb2Nlc3Nvci5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90RXJsUHJvY2Vzc29yLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGI5MWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdEVybFByb2Nlc3Nvci5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRFcmxQcm9jZXNzb3IsIHtzdXBlciwgZ2VuZXJhdGVkUHJvY2Vzc29yLCBoYW5kbGVyfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90RXhjZXB0aW9uLmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RFeGNlcHRpb24uaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGE0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90RXhjZXB0aW9uLmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEV4Y2VwdGlvbiwge21lc3NhZ2V9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RQcm9jZXNzb3IuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdFByb2Nlc3Nvci5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxMzhjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RQcm9jZXNzb3IuaHJsCkBAIC0wLDAgKzEsOCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLXJlY29yZCh0UHJvY2Vzc29yLCB7fSkuCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RocmlmdC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90aHJpZnQuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2ZkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90aHJpZnQuaHJsCkBAIC0wLDAgKzEsMTAwIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCislIGxvY2FsIChzYW1lIHByb2Nlc3MpCistZGVmaW5lKEwwKE1ldGhvZCksIG9vcDpjYWxsKFRoaXMsIE1ldGhvZCwgW10pKS4KKy1kZWZpbmUoTDEoTWV0aG9kLCBBcmcxKSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMV0pKS4KKy1kZWZpbmUoTDIoTWV0aG9kLCBBcmcxLCBBcmcyKSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMSwgQXJnMl0pKS4KKy1kZWZpbmUoTDMoTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczKSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnM10pKS4KKy1kZWZpbmUoTDQoTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNF0pKS4KKy1kZWZpbmUoTDUoTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNV0pKS4KKy1kZWZpbmUoTDYoTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgb29wOmNhbGwoVGhpcywgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNl0pKS4KKworJSBsb2NhbCAoc2FtZSBwcm9jZXNzKSwgYnV0IG5vdCBUaGlzIChlLmcuIHQqRmFjdG9yeSkKKy1kZWZpbmUoRjAoT2JqLCBNZXRob2QpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW10pKS4KKy1kZWZpbmUoRjEoT2JqLCBNZXRob2QsIEFyZzEpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzFdKSkuCistZGVmaW5lKEYyKE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyKSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyXSkpLgorLWRlZmluZShGMyhPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMyksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnM10pKS4KKy1kZWZpbmUoRjQoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzRdKSkuCistZGVmaW5lKEY1KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1XSkpLgorLWRlZmluZShGNihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNl0pKS4KKworJSByZW1vdGUgKGRpZmZlcmVudCBwcm9jZXNzKQorLWRlZmluZShSVDAoU2VydmVyUmVmLCBNZXRob2QsIFRpbWVvdXQpLCBnZW5fc2VydmVyOmNhbGwoU2VydmVyUmVmLCB7TWV0aG9kLCBbXX0sIFRpbWVvdXQpKS4KKy1kZWZpbmUoUlQxKFNlcnZlclJlZiwgTWV0aG9kLCBUaW1lb3V0LCBBcmcxKSwgZ2VuX3NlcnZlcjpjYWxsKFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzFdfSwgVGltZW91dCkpLgorLWRlZmluZShSVDIoU2VydmVyUmVmLCBNZXRob2QsIFRpbWVvdXQsIEFyZzEsIEFyZzIpLCBnZW5fc2VydmVyOmNhbGwoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMl19LCBUaW1lb3V0KSkuCistZGVmaW5lKFJUMyhTZXJ2ZXJSZWYsIE1ldGhvZCwgVGltZW91dCwgQXJnMSwgQXJnMiwgQXJnMyksIGdlbl9zZXJ2ZXI6Y2FsbChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczXX0sIFRpbWVvdXQpKS4KKy1kZWZpbmUoUlQ0KFNlcnZlclJlZiwgTWV0aG9kLCBUaW1lb3V0LCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgZ2VuX3NlcnZlcjpjYWxsKFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzRdfSwgVGltZW91dCkpLgorLWRlZmluZShSVDUoU2VydmVyUmVmLCBNZXRob2QsIFRpbWVvdXQsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCBnZW5fc2VydmVyOmNhbGwoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNV19LCBUaW1lb3V0KSkuCistZGVmaW5lKFJUNihTZXJ2ZXJSZWYsIE1ldGhvZCwgVGltZW91dCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksIGdlbl9zZXJ2ZXI6Y2FsbChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2XX0sIFRpbWVvdXQpKS4KKworJSByZW1vdGUgKGRpZmZlcmVudCBwcm9jZXNzKSwgZGVmYXVsdCB0aW1lb3V0CistZGVmaW5lKERFRkFVTFRfVElNRU9VVCwgNTAwMCkuCistZGVmaW5lKFIwKFNlcnZlclJlZiwgTWV0aG9kKSwgP1JUMChTZXJ2ZXJSZWYsIE1ldGhvZCwgP0RFRkFVTFRfVElNRU9VVCkpLgorLWRlZmluZShSMShTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSksID9SVDEoU2VydmVyUmVmLCBNZXRob2QsID9ERUZBVUxUX1RJTUVPVVQsIEFyZzEpKS4KKy1kZWZpbmUoUjIoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIpLCA/UlQyKFNlcnZlclJlZiwgTWV0aG9kLCA/REVGQVVMVF9USU1FT1VULCBBcmcxLCBBcmcyKSkuCistZGVmaW5lKFIzKFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczKSwgP1JUMyhTZXJ2ZXJSZWYsIE1ldGhvZCwgP0RFRkFVTFRfVElNRU9VVCwgQXJnMSwgQXJnMiwgQXJnMykpLgorLWRlZmluZShSNChTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCksID9SVDQoU2VydmVyUmVmLCBNZXRob2QsID9ERUZBVUxUX1RJTUVPVVQsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpKS4KKy1kZWZpbmUoUjUoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCA/UlQ1KFNlcnZlclJlZiwgTWV0aG9kLCA/REVGQVVMVF9USU1FT1VULCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSkuCistZGVmaW5lKFI2KFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSwgP1JUNihTZXJ2ZXJSZWYsIE1ldGhvZCwgP0RFRkFVTFRfVElNRU9VVCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNikpLgorCislIHJlbW90ZSAoZGlmZmVyZW50IHByb2Nlc3MpLCBjYXN0CistZGVmaW5lKEMwKFNlcnZlclJlZiwgTWV0aG9kKSwgZ2VuX3NlcnZlcjpjYXN0KFNlcnZlclJlZiwge01ldGhvZCwgW119KSkuCistZGVmaW5lKEMxKFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxKSwgZ2VuX3NlcnZlcjpjYXN0KFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzFdfSkpLgorLWRlZmluZShDMihTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiksIGdlbl9zZXJ2ZXI6Y2FzdChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyXX0pKS4KKy1kZWZpbmUoQzMoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMpLCBnZW5fc2VydmVyOmNhc3QoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnM119KSkuCistZGVmaW5lKEM0KFNlcnZlclJlZiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgZ2VuX3NlcnZlcjpjYXN0KFNlcnZlclJlZiwge01ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzMsIEFyZzRdfSkpLgorLWRlZmluZShDNShTZXJ2ZXJSZWYsIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSksIGdlbl9zZXJ2ZXI6Y2FzdChTZXJ2ZXJSZWYsIHtNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1XX0pKS4KKy1kZWZpbmUoQzYoU2VydmVyUmVmLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpLCBnZW5fc2VydmVyOmNhc3QoU2VydmVyUmVmLCB7TWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNl19KSkuCisKKyUgc3Bhd24gbmV3IHNlcnZlcgorJSUgLWRlZmluZShORVcoQ2xhc3MsIEFyZ3MpLCAJCQkJCQkgICAgICAgICUlCislJSAJZ2VuX3NlcnZlcjpzdGFydF9saW5rKHRocmlmdF9vb3Bfc2VydmVyLCB7Q2xhc3MsIEFyZ3N9LCBbXSkpLgkgICAgICAgICUlCislJSBtb3ZlZCB0byBvb3A6c3RhcnRfbmV3LzIKKworJSBvbGQKKyUlIC1kZWZpbmUoTTAoT2JqLCBNZXRob2QpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW10pKS4JCQkJCQkJCQkJICAgICAlJQorJSUgLWRlZmluZShNMShPYmosIE1ldGhvZCwgQXJnMSksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMV0pKS4JCQkJCQkJCSAgICAgJSUKKyUlIC1kZWZpbmUoTTIoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzJdKSkuCQkJCQkJCSAgICAgJSUKKyUlIC1kZWZpbmUoTTMoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMpLCBvb3A6Y2FsbChPYmosIE1ldGhvZCwgW0FyZzEsIEFyZzIsIEFyZzNdKSkuCQkJCQkgICAgICUlCislJSAtZGVmaW5lKE00KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0XSkpLgkJCQkgICAgICUlCislJSAtZGVmaW5lKE01KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSwgb29wOmNhbGwoT2JqLCBNZXRob2QsIFtBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1XSkpLgkJICAgICAlJQorJSUgLWRlZmluZShNNihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksIG9vcDpjYWxsKE9iaiwgTWV0aG9kLCBbQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNl0pKS4JICAgICAlJQorCislJSUgaW1wbGljaXQgY2FsbDogb2xkCisKKyUlIC1kZWZpbmUoTTAoT2JqLCBNZXRob2QpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqKSkpLgkJCQkJCQkJCQkgJSUKKyUlIC1kZWZpbmUoTTEoT2JqLCBNZXRob2QsIEFyZzEpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxKSkpLgkJCQkJCQkJCSAlJQorJSUgLWRlZmluZShNMihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIpKSkuCQkJCQkJCSAlJQorJSUgLWRlZmluZShNMyhPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMyksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIsIEFyZzMpKSkuCQkJCQkJICUlCislJSAtZGVmaW5lKE00KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCkpKS4JCQkJICUlCislJSAtZGVmaW5lKE01KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSkpKS4JCQkgJSUKKyUlIC1kZWZpbmUoTTYoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSkpLgkgJSUKKworJSUgVFR5cGUKKy1kZWZpbmUodFR5cGVfU1RPUCwgMCkuCistZGVmaW5lKHRUeXBlX1ZPSUQsIDEpLgorLWRlZmluZSh0VHlwZV9CT09MLCAyKS4KKy1kZWZpbmUodFR5cGVfQllURSwgMykuCistZGVmaW5lKHRUeXBlX0RPVUJMRSwgNCkuCistZGVmaW5lKHRUeXBlX0kxNiwgNikuCistZGVmaW5lKHRUeXBlX0kzMiwgOCkuCistZGVmaW5lKHRUeXBlX0k2NCwgMTApLgorLWRlZmluZSh0VHlwZV9TVFJJTkcsIDExKS4KKy1kZWZpbmUodFR5cGVfU1RSVUNULCAxMikuCistZGVmaW5lKHRUeXBlX01BUCwgMTMpLgorLWRlZmluZSh0VHlwZV9TRVQsIDE0KS4KKy1kZWZpbmUodFR5cGVfTElTVCwgMTUpLgorCislIHRtZXNzYWdldHlwZQorLWRlZmluZSh0TWVzc2FnZVR5cGVfQ0FMTCwgMSkuCistZGVmaW5lKHRNZXNzYWdlVHlwZV9SRVBMWSwgMikuCistZGVmaW5lKHRNZXNzYWdlVHlwZV9FWENFUFRJT04sIDMpLgorCislIFRQcm9jZXNzb3IKKyUgPworCislIC1pbmNsdWRlKCJ0QXBwbGljYXRpb25FeGNlcHRpb24uaHJsIikuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzczOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodEJ1ZmZlcmVkVHJhbnNwb3J0LCB7c3VwZXIsIHRyYW5zcG9ydCwgd2J1Zn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnkuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnkuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNGNkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeS5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRCdWZmZXJlZFRyYW5zcG9ydEZhY3RvcnksIHtzdXBlcn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RFcmxBY2NlcHRvci5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmhybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzNmZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RFcmxBY2NlcHRvci5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRFcmxBY2NlcHRvciwge3N1cGVyLCBzZXJ2ZXJQaWQsIHRyYW5zcG9ydEZhY3RvcnksIHByb3RvY29sRmFjdG9yeX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzI1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRTZXJ2ZXJTb2NrZXQsIHtzdXBlciwgcG9ydCwgaGFuZGxlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNlcnZlclRyYW5zcG9ydC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNlcnZlclRyYW5zcG9ydC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3YmJmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFNlcnZlclRyYW5zcG9ydCwge30pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RTb2NrZXQuaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RTb2NrZXQuaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTdkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFNvY2tldC5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRTb2NrZXQsIHtzdXBlciwgaG9zdCwgcG9ydCwgaGFuZGxlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydC5ocmwgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4OTQxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0LmhybApAQCAtMCwwICsxLDcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1yZWNvcmQodFRyYW5zcG9ydCwge30pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIGIvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjBhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvaW5jbHVkZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwKQEAgLTAsMCArMSwxMyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sIDApLgorLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAxKS4KKy1kZWZpbmUodFRyYW5zcG9ydEV4Y2VwdGlvbl9BTFJFQURZX09QRU4sIDIpLgorLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX1RJTUVEX09VVCwgMykuCistZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fRU5EX09GX0ZJTEUsIDQpLgorCistcmVjb3JkKHRUcmFuc3BvcnRFeGNlcHRpb24sIHtzdXBlciwgdHlwZX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L2luY2x1ZGUvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmhybCBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0RmFjdG9yeS5ocmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4ODE0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9pbmNsdWRlL3RyYW5zcG9ydC90VHJhbnNwb3J0RmFjdG9yeS5ocmwKQEAgLTAsMCArMSw3IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistcmVjb3JkKHRUcmFuc3BvcnRGYWN0b3J5LCB7fSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc2VydmVyLnNoIGIvbGliL2VybC9saWIvdGhyaWZ0L3NlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDJjMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NlcnZlci5zaApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorZWNobyAiQ29tcGlsaW5nIHVzZXIvIGFuZCB0dXRvcmlhbC9nZW4tZXJsLy4uLiIKK21rZGlyIGViaW4tdXNlcgorZXJsYyAtSSBpbmNsdWRlIC1JIHR1dG9yaWFsL2dlbi1lcmwgLW8gZWJpbi11c2VyIHVzZXIvKi5lcmwgdHV0b3JpYWwvZ2VuLWVybC8qLmVybCAmJgorZXJsIC1wYSBlYmluIC1wYSBlYmluLXVzZXIgLXMgYXBwbGljYXRpb24gc3RhcnQgdGhyaWZ0ICMgLXMgbmggc3RhcnQKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvTWFrZWZpbGUgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzUyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEyIEBACisjICRJZDogTWFrZWZpbGUsdiAxLjMgMjAwNC8wOC8xMyAxNjozNTo1OSBtbG9nYW4gRXhwICQKKyMKK2luY2x1ZGUgLi4vLi4vLi4vYnVpbGQvb3RwLm1rCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL2NvbG9ycy5taworaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9idWlsZHRhcmdldHMubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGxpY2F0aW9uIHZlcnNpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlIC4uL3Zzbi5taworQVBQX05BTUU9dGhyaWZ0CitQRlg9dGhyaWZ0CitWU049JChUSFJJRlRfVlNOKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW5zdGFsbCBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbgorIyBXQVJOSU5HOiBJTlNUQUxMX0RJUiB0aGUgY29tbWFuZCB0byBpbnN0YWxsIGEgZGlyZWN0b3J5LgorIyAgICAgICAgICBJTlNUQUxMX0RTVCBpcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlNUQUxMX0RTVCA9ICQoRVJMQU5HX09UUCkvbGliLyQoQVBQX05BTUUpLSQoVlNOKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGFyZ2V0IFNwZWNzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitNT0RVTEVTID0gJChzaGVsbCBmaW5kIC1uYW1lIFwqLmVybCB8IHNlZCBzOl5cXC4vOjogfCBzZWQgcy9cXC5lcmwvLykKK01PRFVMRVNfU1RSSU5HX0xJU1QgPSAkKHNoZWxsIGZpbmQgLW5hbWUgXCouZXJsIHwgc2VkIHM6XlxcLi86XCI6IHwgc2VkIHMvXFwuZXJsL1wiLC8pCisKK0hSTF9GSUxFUz0KK0lOVEVSTkFMX0hSTF9GSUxFUz0gJChBUFBfTkFNRSkuaHJsCitFUkxfRklMRVM9ICQoTU9EVUxFUzolPSUuZXJsKQorRE9DX0ZJTEVTPSQoRVJMX0ZJTEVTKQorCitBUFBfRklMRT0gJChBUFBfTkFNRSkuYXBwCitBUFBVUF9GSUxFPSAkKEFQUF9OQU1FKS5hcHB1cAorCitBUFBfU1JDPSAkKEFQUF9GSUxFKS5zcmMKK0FQUFVQX1NSQz0gJChBUFBVUF9GSUxFKS5zcmMKKworQVBQX1RBUkdFVD0gJChFQklOKS8kKEFQUF9GSUxFKQorQVBQVVBfVEFSR0VUPSAkKEVCSU4pLyQoQVBQVVBfRklMRSkKKworQkVBTVM9ICQoTU9EVUxFUzolPSQoRUJJTikvJS4kKEVNVUxBVE9SKSkKK1RBUkdFVF9GSUxFUz0gJChCRUFNUykgJChBUFBfVEFSR0VUKSAkKEFQUFVQX1RBUkdFVCkKKworV0VCX1RBUkdFVD0vdmFyL3lhd3Mvd3d3LyQoQVBQX05BTUUpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGTEFHUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VSTF9GTEFHUyArPQorRVJMX0NPTVBJTEVfRkxBR1MgKz0gLUkuLi9pbmNsdWRlIC1JLi4vLi4vZnNsaWIvaW5jbHVkZSAtSS4uLy4uL3N5c3RlbV9zdGF0dXMvaW5jbHVkZSAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRhcmdldHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbGwgZGVidWcgb3B0OiAkKEVCSU4pICQoVEFSR0VUX0ZJTEVTKSAKKworIyQoRUJJTikvcm1fbG9nZ2VyLmJlYW06ICQoQVBQX05BTUUpLmhybAoraW5jbHVkZSAuLi8uLi8uLi9idWlsZC9kb2NzLm1rCisKKyMgTm90ZTogSW4gdGhlIG9wZW4tc291cmNlIGJ1aWxkIGNsZWFuIG11c3Qgbm90IGRlc3Ryb3kgdGhlIHByZWxvYWRlZAorIyBiZWFtIGZpbGVzLgorY2xlYW46CisJcm0gLWYgJChUQVJHRVRfRklMRVMpCisJcm0gLWYgY29yZQorCXJtIC1yZiAkKEVCSU4pCisJcm0gLXJmICpodG1sCisKKyQoRUJJTik6CisJbWtkaXIgJChFQklOKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3BlY2lhbCBCdWlsZCBUYXJnZXRzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJChBUFBfVEFSR0VUKTogJChBUFBfU1JDKSAuLi92c24ubWsgJChCRUFNUykKKwlzZWQgLWUgJ3M7JVZTTiU7JChWU04pOycgXAorCQktZSAnczslUEZYJTskKFBGWCk7JyBcCisJCS1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisJCS1lICdzOyVNT0RVTEVTJTslTU9EVUxFUyUkKE1PRFVMRVNfU1RSSU5HX0xJU1QpOycgXAorCQkkPCA+ICQ8Ii50bXAiIAorCXNlZCAtZSAncy8lTU9EVUxFUyVcKC4qXCksL1wxLycgXAorCQkkPCIudG1wIiA+ICRAIAorCXJtICQ8Ii50bXAiCisKKworJChBUFBVUF9UQVJHRVQpOiAkKEFQUFVQX1NSQykgLi4vdnNuLm1rCisJc2VkIC1lICdzOyVWU04lOyQoVlNOKTsnICQ8ID4gJEAKKworJChXRUJfVEFSR0VUKTogLi4vbWFya3VwLyogCisJcm0gLXJmICQoV0VCX1RBUkdFVCkgCisJbWtkaXIgJChXRUJfVEFSR0VUKSAKKwljcCAtciAuLi9tYXJrdXAvICQoV0VCX1RBUkdFVCkKKwljcCAtciAuLi9za2lucy8gJChXRUJfVEFSR0VUKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW5zdGFsbCBUYXJnZXQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworaW5zdGFsbDogYWxsICQoV0VCX1RBUkdFVCkKKyMJJChJTlNUQUxMX0RJUikgJChJTlNUQUxMX0RTVCkvc3JjCisjCSQoSU5TVEFMTF9EQVRBKSAkKEVSTF9GSUxFUykgJChJTlNUQUxMX0RTVCkvc3JjCisjCSQoSU5TVEFMTF9EQVRBKSAkKElOVEVSTkFMX0hSTF9GSUxFUykgJChJTlNUQUxMX0RTVCkvc3JjCisjCSQoSU5TVEFMTF9ESVIpICQoSU5TVEFMTF9EU1QpL2luY2x1ZGUKKyMJJChJTlNUQUxMX0RBVEEpICQoSFJMX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9pbmNsdWRlCisjCSQoSU5TVEFMTF9ESVIpICQoSU5TVEFMTF9EU1QpL2ViaW4KKyMJJChJTlNUQUxMX0RBVEEpICQoVEFSR0VUX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9lYmluCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL29vcC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL29vcC5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvb29wLmVybApAQCAtMCwwICsxLDE0NiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZShvb3ApLgorCistZXhwb3J0KFtnZXQvMiwgc2V0LzMsIGNhbGwvMiwgY2FsbC8zLCBpbnNwZWN0LzEsIHN0YXJ0X25ldy8yXSkuCistZXhwb3J0KFtiZWhhdmlvdXJfaW5mby8xXSkuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKyUlJQorJSUlIGJlaGF2aW9yIGRlZmluaXRpb24KKyUlJQorCitiZWhhdmlvdXJfaW5mbyhjYWxsYmFja3MpIC0+IAorICAgIFsgCisgICAgICB7YXR0ciwgNH0sIAorICAgICAge3N1cGVyLCAwfSAKKyAgICBdOworYmVoYXZpb3VyX2luZm8oXykgLT4gCisgICAgdW5kZWZpbmVkLgorCislJQorCistZGVmaW5lKFRSSUVELCBsaXN0czpyZXZlcnNlKFtUcnlNb2R1bGV8VHJpZWRSZXZdKSkuCisKKyUlIG5vIHN1cGVyIGF0dHIgZGVmaW5lZAorLWRlZmluZShOT1NVUEVST0JKLCBleGl0KHttaXNzaW5nX2F0dHJfc3VwZXIsIHtpbnNwZWN0KE9iaiksID9UUklFRH19KSkuCisKKy1kZWZpbmUoTk9NRVRIT0QsIGV4aXQoe21pc3NpbmdfbWV0aG9kLCB7TWV0aG9kLCBpbnNwZWN0KE9iaiksIHRsKEFyZ3MpLCA/VFJJRUR9fSkpLgorCistZGVmaW5lKE5PQVRUUiwgZXhpdCh7bWlzc2luZ19hdHRyLCB7aGQodGwoQXJncykpLCBpbnNwZWN0KEZpcnN0T2JqKSwgP1RSSUVEfX0pKS4KKworLWRlZmluZShOT0FUVFJfU0VULCBleGl0KHttaXNzaW5nX2F0dHIsIHtGaWVsZCwgaW5zcGVjdChPYmopLCAiLi4iICUlIFRPRE86IGdpdmUgYSBiYWNrdHJhY2UKKwkJCX19KSkuCisKKworJSUlIGdldChPYmosIEZpZWxkKSAtPiB0ZXJtKCkKKyUlJSBsb29rcyB1cCBGaWVsZCBpbiBPYmogb3IgaXRzIGFuY2VzdG9yIG9iamVjdHMKKworZ2V0KE9iaiwgRmllbGQpIC0+CisgICAgY2FsbChPYmosIGF0dHIsIFtnZXQsIEZpZWxkLCBnZXRdKS4KKworc2V0KE9iaiwgRmllbGQsIFZhbHVlKSAtPiAlJSBUT0RPOiBjb3VsZCBiZSB0YWlsLXJlY3Vyc2l2ZQorICAgIE1vZHVsZSA9ID9DTEFTUyhPYmopLAorICAgIHRyeQorCU1vZHVsZTphdHRyKE9iaiwgc2V0LCBGaWVsZCwgVmFsdWUpCisgICAgY2F0Y2gKKwllcnJvcjpLaW5kIHdoZW4gS2luZCA9PSB1bmRlZjsgS2luZCA9PSBmdW5jdGlvbl9jbGF1c2UgLT4KKwkgICAgY2FzZSBnZXRfc3VwZXJvYmplY3QoT2JqKSBvZgorCQl7IG9rLCBTdXBlcm9iaiB9IC0+CisJCSAgICBTdXBlcjEgPSBzZXQoU3VwZXJvYmosIEZpZWxkLCBWYWx1ZSksCisJCSAgICB0cnkKKwkJCU1vZHVsZTphdHRyKE9iaiwgc2V0LCBzdXBlciwgU3VwZXIxKQorCQkgICAgY2F0Y2ggJSUgVE9ETyhjcGlybyk6IHJlbW92ZSBjaGVjaworCQkJWCAtPiBleGl0KHtidXJuc2F1Y2UsIFh9KQorCQkgICAgZW5kOworCQlub25lIC0+CisJCSAgICA/Tk9BVFRSX1NFVAorCSAgICBlbmQKKyAgICBlbmQuCisgICAgCisKKyUlJSBDKysgICAgICAgICAgICAgICAgICAgPC0+IEVybGFuZworJSUlIGNsYXNzZXMgICAgICAgICAgICAgICAgICAgbW9kdWxlcworJSUlICAgY2xhc3MgYiA6IHB1YmxpYyBhICAgICAgICBhOnN1cGVyKCkgLT4gYi4KKyUlJSAgIAorCitnZXRfc3VwZXJvYmplY3QoT2JqKSAtPgorICAgIHRyeQorCXtvaywgKD9DTEFTUyhPYmopKTphdHRyKE9iaiwgZ2V0LCBzdXBlciwgZ2V0KX0KKyAgICBjYXRjaAorCWVycm9yOktpbmQgd2hlbiBLaW5kID09IHVuZGVmOyBLaW5kID09IGZ1bmN0aW9uX2NsYXVzZSAtPgorCSAgICBub25lCisgICAgZW5kLgorCitjYWxsKE9iaiwgTWV0aG9kLCBBcmdzUHJvcGVyKSAtPgorICAgICUlIGlvOmZvcm1hdCgiY2FsbCBjYWxsZWQ6IE9iaj1+cCBNZXRob2Q9fnAgQXJnc1Byb3Blcj1+cH5uIiwgW29vcDppbnNwZWN0KE9iaiksIE1ldGhvZCwgQXJnc1Byb3Blcl0pLAorICAgIEFyZ3MgPSBbT2JqfEFyZ3NQcm9wZXJdLCAlJSBwcmVwZW5kIFRoaXMgdG8gYXJncworICAgIFRyeU1vZHVsZSA9ID9DTEFTUyhPYmopLAorICAgIGNhbGxfbG9vcChPYmosIE1ldGhvZCwgQXJncywgVHJ5TW9kdWxlLCBbXSwgT2JqKS4KKworY2FsbChPYmosIE1ldGhvZCkgLT4gCisgICAgY2FsbChPYmosIE1ldGhvZCwgW10pLgorCitjYWxsX2xvb3AoT2JqLCBNZXRob2QsIEFyZ3MsIFRyeU1vZHVsZSwgVHJpZWRSZXYsIEZpcnN0T2JqKSAtPgorICAgIHRyeQorCSUlIGlvOmZvcm1hdCgiY2FsbF9sb29wfm4gfnB+biB+cH5uIH5wfm4gfnB+biB+biIsIFtPYmosIE1ldGhvZCwgQXJncywgVHJ5TW9kdWxlXSksCisJYXBwbHkoVHJ5TW9kdWxlLCBNZXRob2QsIEFyZ3MpCisgICAgY2F0Y2gKKwllcnJvcjpLaW5kIHdoZW4gS2luZCA9PSB1bmRlZjsgS2luZCA9PSBmdW5jdGlvbl9jbGF1c2UgLT4KKwkgICAgY2FzZSB7IFRyeU1vZHVsZTpzdXBlcigpLCBNZXRob2QgfSBvZiAKKwkJeyBub25lLCBhdHRyIH0gLT4KKwkJICAgID9OT0FUVFI7CisJCQorCQl7IG5vbmUsIF8gfSAtPiAKKwkJICAgID9OT01FVEhPRDsKKwkJCisJCXsgU3VwZXJjbGFzcywgYXR0ciB9IC0+IAorCQkgICAgJSUgbG9vayBmb3IgYXR0cnMgaW4gdGhlICJzdXBlciBvYmplY3QiCisJCSAgICAKKwkJICAgIGNhc2UgZ2V0X3N1cGVyb2JqZWN0KE9iaikgb2YKKwkJCXtvaywgU3VwZXJvYmp9IHdoZW4gKFRyeU1vZHVsZSA9PSA/Q0xBU1MoT2JqKSkgLT4gCisJCQkgICAgJSUgcmVwbGFjZSBUaGlzIHdpdGggU3VwZXJvYmoKKwkJCSAgICBOZXdBcmdzID0gW1N1cGVyb2JqfHRsKEFyZ3MpXSwgCisJCQkgICAgY2FsbF9sb29wKFN1cGVyb2JqLCBNZXRob2QsIE5ld0FyZ3MsIAorCQkJCSAgICAgIFN1cGVyY2xhc3MsIFtUcnlNb2R1bGV8VHJpZWRSZXZdLCBGaXJzdE9iaik7CisJCQkKKwkJCXtvaywgX1N1cGVyb2JqfSAtPiAlIGZhaWxlZCBndWFyZCBUT0RPKGNwaXJvKTogcmVtb3ZlbWUKKwkJCSAgICBleGl0KG9oX25vZXMpOworCQkJCisJCQlub25lICAgIC0+ID9OT1NVUEVST0JKCisJCSAgICBlbmQ7CisJCQorCQl7IFN1cGVyQ2xhc3MsIF8gfSAtPgorCQkgICAgY2FsbF9sb29wKE9iaiwgTWV0aG9kLCBBcmdzLCAKKwkJCSAgICAgIFN1cGVyQ2xhc3MsIFtUcnlNb2R1bGV8VHJpZWRSZXZdLCBGaXJzdE9iaikKKwkgICAgZW5kCisgICAgZW5kLgorICAgIAoraW5zcGVjdChPYmopIC0+CisgICAgRGVlcExpc3QgPSBpbnNwZWN0X2xvb3AoT2JqLCAiIzwiKSwKKyAgICBsaXN0czpmbGF0dGVuKERlZXBMaXN0KS4KKworaW5zcGVjdF9sb29wKE9iaiwgU3RyKSAtPgorICAgIE5ldyA9IAorCWF0b21fdG9fbGlzdCg/Q0xBU1MoT2JqKSkgKysKKwkiOiAiICsrCisJKD9DTEFTUyhPYmopKTppbnNwZWN0KE9iaiksCisgICAgCisgICAgY2FzZSBnZXRfc3VwZXJvYmplY3QoT2JqKSBvZgorCXsgb2ssIFN1cGVyb2JqIH0gLT4KKwkgICAgaW5zcGVjdF9sb29wKFN1cGVyb2JqLCBTdHIgKysgTmV3ICsrICIgfCAiKTsKKwlub25lIC0+CisJICAgIFN0ciArKyBOZXcgKysgIj4iCisgICAgZW5kLgorICAgIAorJSUgVE9ETzogdm9pZHMgdGFrZSBvbmx5IG9rIGFzIHJldHVybj8gCitzdGFydF9uZXcoQ2xhc3MsIEFyZ3MpIC0+CisgICAgY2FzZSBnZW5fc2VydmVyOnN0YXJ0X2xpbmsodGhyaWZ0X29vcF9zZXJ2ZXIsIHtDbGFzcywgQXJnc30sIFtdKSBvZgorCXtvaywgUGlkfSAtPgorCSAgICBQaWQKKyAgICBlbmQuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0NTI5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmVybApAQCAtMCwwICsxLDIxNCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0QmluYXJ5UHJvdG9jb2wpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5ocmwiKS4KKy1pbmNsdWRlKCJwcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFsKKyAgbmV3LzEsCisKKyAgd3JpdGVNZXNzYWdlQmVnaW4vNCwKKyAgd3JpdGVGaWVsZEJlZ2luLzQsIHdyaXRlRmllbGRTdG9wLzEsCisgIHdyaXRlTWFwQmVnaW4vNCwKKyAgd3JpdGVMaXN0QmVnaW4vMywKKyAgd3JpdGVTZXRCZWdpbi8zLAorCisgIHdyaXRlQm9vbC8yLCB3cml0ZUJ5dGUvMiwgd3JpdGVJMTYvMiwgd3JpdGVJMzIvMiwgCisgIHdyaXRlSTY0LzIsIHdyaXRlRG91YmxlLzIsIHdyaXRlU3RyaW5nLzIsIAorCisgIHJlYWRNZXNzYWdlQmVnaW4vMSwgCisgIHJlYWRGaWVsZEJlZ2luLzEsIAorICByZWFkTWFwQmVnaW4vMSwgCisgIHJlYWRMaXN0QmVnaW4vMSwgCisgIHJlYWRTZXRCZWdpbi8xLCAKKworICByZWFkQm9vbC8xLCByZWFkQnl0ZS8xLCByZWFkSTE2LzEsIHJlYWRJMzIvMSwgCisgIHJlYWRJNjQvMSwgcmVhZERvdWJsZS8xLCByZWFkU3RyaW5nLzEKK10pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFByb3RvY29sLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KFRyYW5zKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldyhUcmFucyksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXJ9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKword3JpdGVNZXNzYWdlQmVnaW4oVGhpcywgTmFtZSwgVHlwZSwgU2VxaWQpIC0+CisgICAgP0wxKHdyaXRlSTMyLCA/VkVSU0lPTl8xIGJvciBUeXBlKSwKKyAgICA/TDEod3JpdGVTdHJpbmcsIE5hbWUpLAorICAgID9MMSh3cml0ZUkzMiwgU2VxaWQpLAorICAgIG9rLgorCit3cml0ZUZpZWxkQmVnaW4oVGhpcywgX05hbWUsIFR5cGUsIElkKSAtPgorICAgID9MMSh3cml0ZUJ5dGUsIFR5cGUpLAorICAgID9MMSh3cml0ZUkxNiwgSWQpLAorICAgIG9rLgorCit3cml0ZUZpZWxkU3RvcChUaGlzKSAtPgorICAgID9MMSh3cml0ZUJ5dGUsID90VHlwZV9TVE9QKSwKKyAgICBvay4KKword3JpdGVNYXBCZWdpbihUaGlzLCBLdHlwZSwgVnR5cGUsIFNpemUpIC0+CisgICAgP0wxKHdyaXRlQnl0ZSwgS3R5cGUpLAorICAgID9MMSh3cml0ZUJ5dGUsIFZ0eXBlKSwKKyAgICA/TDEod3JpdGVJMzIsIFNpemUpLAorICAgIG9rLgorCit3cml0ZUxpc3RCZWdpbihUaGlzLCBFdHlwZSwgU2l6ZSkgLT4KKyAgICA/TDEod3JpdGVCeXRlLCBFdHlwZSksCisgICAgP0wxKHdyaXRlSTMyLCBTaXplKSwKKyAgICBvay4KKword3JpdGVTZXRCZWdpbihUaGlzLCBFdHlwZSwgU2l6ZSkgLT4KKyAgICA/TDEod3JpdGVCeXRlLCBFdHlwZSksCisgICAgP0wxKHdyaXRlSTMyLCBTaXplKSwKKyAgICBvay4KKworJQorCit3cml0ZUJvb2woVGhpcywgQm9vbCkgLT4KKyAgICBjYXNlIEJvb2wgb2YgCisJdHJ1ZSAgLT4gP0wxKHdyaXRlQnl0ZSwgMSk7CisJZmFsc2UgLT4gP0wxKHdyaXRlQnl0ZSwgMCkKKyAgICBlbmQuCisKK3dyaXRlQnl0ZShUaGlzLCBCeXRlKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxCeXRlOjgvYmlnPj4pKS4KKword3JpdGVJMTYoVGhpcywgSTE2KSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJMTY6MTYvYmlnPj4pKS4KKword3JpdGVJMzIoVGhpcywgSTMyKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJMzI6MzIvYmlnPj4pKS4KKword3JpdGVJNjQoVGhpcywgSTY0KSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxJNjQ6NjQvYmlnPj4pKS4KKword3JpdGVEb3VibGUoVGhpcywgRG91YmxlKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgYmluYXJ5X3RvX2xpc3QoPDxEb3VibGU6NjQvYmlnPj4pKS4KKword3JpdGVTdHJpbmcoVGhpcywgU3RyKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgP0wxKHdyaXRlSTMyLCBsZW5ndGgoU3RyKSksCisgICAgP1IxKFRyYW5zLCB3cml0ZSwgU3RyKS4KKworJQorCityZWFkTWVzc2FnZUJlZ2luKFRoaXMpIC0+CisgICAgVmVyc2lvbiA9ID9MMChyZWFkSTMyKSwKKyAgICBpZiAKKwkoVmVyc2lvbiBiYW5kID9WRVJTSU9OX01BU0spIC89ID9WRVJTSU9OXzEgLT4KKwkgICAgdGhyb3codFByb3RvY29sRXhjZXB0aW9uOm5ldyg/dFByb3RvY29sRXhjZXB0aW9uX0JBRF9WRVJTSU9OLAorCQkJCQkgIk1pc3NpbmcgdmVyc2lvbiBpZGVudGlmaWVyIikpOworCXRydWUgLT4gb2sKKyAgICBlbmQsCisgICAgVHlwZSA9IFZlcnNpb24gYmFuZCAxNiMwMDAwMDBmZiwKKyAgICBOYW1lICA9ID9MMChyZWFkU3RyaW5nKSwKKyAgICBTZXFpZCA9ID9MMChyZWFkSTMyKSwKKyAgICB7IE5hbWUsIFR5cGUsIFNlcWlkIH0uCisKK3JlYWRGaWVsZEJlZ2luKFRoaXMpIC0+CisgICAgVHlwZSA9ID9MMChyZWFkQnl0ZSksCisgICAgY2FzZSBUeXBlIG9mIAorCT90VHlwZV9TVE9QIC0+CisJICAgIHsgbmlsLCBUeXBlLCAwIH07ICUgV0FUQ0gKKwlfIC0+CisJICAgIElkID0gP0wwKHJlYWRJMTYpLAorCSAgICB7IG5pbCwgVHlwZSwgSWQgfQorICAgIGVuZC4KKworcmVhZE1hcEJlZ2luKFRoaXMpIC0+CisgICAgS3R5cGUgPSA/TDAocmVhZEJ5dGUpLAorICAgIFZ0eXBlID0gP0wwKHJlYWRCeXRlKSwKKyAgICBTaXplICA9ID9MMChyZWFkSTMyKSwKKyAgICB7IEt0eXBlLCBWdHlwZSwgU2l6ZSB9LgorCityZWFkTGlzdEJlZ2luKFRoaXMpIC0+CisgICAgRXR5cGUgPSA/TDAocmVhZEJ5dGUpLAorICAgIFNpemUgID0gP0wwKHJlYWRJMzIpLAorICAgIHsgRXR5cGUsIFNpemUgfS4KKworcmVhZFNldEJlZ2luKFRoaXMpIC0+CisgICAgRXR5cGUgPSA/TDAocmVhZEJ5dGUpLAorICAgIFNpemUgID0gP0wwKHJlYWRJMzIpLAorICAgIHsgRXR5cGUsIFNpemUgfS4KKworJQorCityZWFkQm9vbChUaGlzKSAtPgorICAgIEJ5dGUgPSA/TDAocmVhZEJ5dGUpLAorICAgIChCeXRlIC89IDApLgorCityZWFkQnl0ZShUaGlzKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgPDxWYWw6OC9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP1IxKFRyYW5zLCByZWFkQWxsLCAxKSwKKyAgICBWYWwuCisKK3JlYWRJMTYoVGhpcykgLT4KKyAgICBUcmFucyA9IG9vcDpnZXQoVGhpcywgdHJhbnMpLAorICAgIDw8VmFsOjE2L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/UjEoVHJhbnMsIHJlYWRBbGwsIDIpLAorICAgIFZhbC4KKworcmVhZEkzMihUaGlzKSAtPgorICAgIFRyYW5zID0gb29wOmdldChUaGlzLCB0cmFucyksCisgICAgPDxWYWw6MzIvaW50ZWdlci1zaWduZWQtYmlnLCBfL2JpbmFyeT4+ICA9ID9SMShUcmFucywgcmVhZEFsbCwgNCksCisgICAgVmFsLgorCityZWFkSTY0KFRoaXMpIC0+CisgICAgVHJhbnMgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zKSwKKyAgICA8PFZhbDo2NC9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP1IxKFRyYW5zLCByZWFkQWxsLCA4KSwKKyAgICBWYWwuCisKK3JlYWREb3VibGUoVGhpcykgLT4KKyAgICBUcmFucyA9IG9vcDpnZXQoVGhpcywgdHJhbnMpLAorICAgIDw8VmFsOjY0L2Zsb2F0LXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP1IxKFRyYW5zLCByZWFkQWxsLCA4KSwKKyAgICBWYWwuCisKK3JlYWRTdHJpbmcoVGhpcykgLT4KKyAgICBUcmFucyA9IG9vcDpnZXQoVGhpcywgdHJhbnMpLAorICAgIFN6ICAgID0gP0wwKHJlYWRJMzIpLAorICAgIGJpbmFyeV90b19saXN0KD9SMShUcmFucywgcmVhZEFsbCwgU3opKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sRmFjdG9yeS5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbEZhY3RvcnkuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2ZhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbEZhY3RvcnkuZXJsCkBAIC0wLDAgKzEsNTcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEJpbmFyeVByb3RvY29sRmFjdG9yeSkuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgicHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RCaW5hcnlQcm90b2NvbEZhY3RvcnkuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgZ2V0UHJvdG9jb2wvMl0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFByb3RvY29sRmFjdG9yeS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldygpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KCksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXJ9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworZ2V0UHJvdG9jb2woX1RoaXMsIFRyYW5zKSAtPgorICAgIG9vcDpzdGFydF9uZXcodEJpbmFyeVByb3RvY29sLCBbVHJhbnNdKS4KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2wuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2wuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDBjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbC5lcmwKQEAgLTAsMCArMSwyMTcgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodFByb3RvY29sKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJwcm90b2NvbC90UHJvdG9jb2wuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCislJSAtZXhwb3J0KFtpbnRlcmZhY2UvMV0pLgkgIAkgICAgICAgICAgICAgJSUKKworLWV4cG9ydChbCisgIG5ldy8xLAorICBza2lwLzIsCisKKyAgd3JpdGVNZXNzYWdlQmVnaW4vNCwgd3JpdGVNZXNzYWdlRW5kLzEsCisgIHdyaXRlU3RydWN0QmVnaW4vMiwgd3JpdGVTdHJ1Y3RFbmQvMSwKKyAgd3JpdGVGaWVsZEJlZ2luLzQsIHdyaXRlRmllbGRFbmQvMSwgd3JpdGVGaWVsZFN0b3AvMSwKKyAgd3JpdGVNYXBCZWdpbi80LCB3cml0ZU1hcEVuZC8xLAorICB3cml0ZUxpc3RCZWdpbi8zLCB3cml0ZUxpc3RFbmQvMSwKKyAgd3JpdGVTZXRCZWdpbi8zLCB3cml0ZVNldEVuZC8xLAorCisgIHdyaXRlQm9vbC8yLCB3cml0ZUJ5dGUvMiwgd3JpdGVJMTYvMiwgd3JpdGVJMzIvMiwgCisgIHdyaXRlSTY0LzIsIHdyaXRlRG91YmxlLzIsIHdyaXRlU3RyaW5nLzIsIAorCisgIHJlYWRNZXNzYWdlQmVnaW4vMSwgcmVhZE1lc3NhZ2VFbmQvMSwgCisgIHJlYWRTdHJ1Y3RCZWdpbi8xLCByZWFkU3RydWN0RW5kLzEsIAorICByZWFkRmllbGRCZWdpbi8xLCByZWFkRmllbGRFbmQvMSwKKyAgcmVhZE1hcEJlZ2luLzEsIHJlYWRNYXBFbmQvMSwKKyAgcmVhZExpc3RCZWdpbi8xLCByZWFkTGlzdEVuZC8xLAorICByZWFkU2V0QmVnaW4vMSwgcmVhZFNldEVuZC8xLAorCisgIHJlYWRCb29sLzEsIHJlYWRCeXRlLzEsIHJlYWRJMTYvMSwgcmVhZEkzMi8xLCAKKyAgcmVhZEk2NC8xLCByZWFkRG91YmxlLzEsIHJlYWRTdHJpbmcvMQorXSkuCisKKyUlJQorJSUlIHNlcnZlciBpbnRlcmZhY2UKKyUlJQorCislJSAlJSUgbW9kdWxlcyB3ZSBjYW4gaW5zdGFudGlhdGUgZnJvbSB0aGUgc2VydmVyCSAgICAgICAlJQorJSUgaW50ZXJmYWNlKHN1YmNsYXNzZXMpIC0+IAkJCQkgICAgICAgJSUKKyUlICAgICBbCQkJCQkJICAgICAgICUlCislJSAgICAgIHRCaW5hcnlQcm90b2NvbAkJCQkJICAgICAgICUlCislJSAgICAgXTsJCQkJCQkgICAgICAgJSUKKyUlIAkJCQkJCQkgICAgICAgJSUKKyUlICUlJSBzeW5jaHJvbm91cyBjYWxscyB0byBwYXNzCQkJICAgICAgICUlCislJSBpbnRlcmZhY2UoY2FsbCkgLT4gCQkJCQkgICAgICAgJSUKKyUlICAgICBbCQkJCQkJICAgICAgICUlCislJSAgICAgIHNraXAsCQkJCQkJICAgICAgICUlCislJSAgICAgIAkJCQkJCSAgICAgICAlJQorJSUgICAgICB3cml0ZU1lc3NhZ2VCZWdpbiwgd3JpdGVNZXNzYWdlRW5kLAkJICAgICAgICUlCislJSAgICAgIHdyaXRlU3RydWN0QmVnaW4sIHdyaXRlU3RydWN0RW5kLAkJICAgICAgICUlCislJSAgICAgIHdyaXRlRmllbGRCZWdpbiwgd3JpdGVGaWVsZEVuZCwgd3JpdGVGaWVsZFN0b3AsCSAgICAgICAlJQorJSUgICAgICB3cml0ZU1hcEJlZ2luLCB3cml0ZU1hcEVuZCwJCQkgICAgICAgJSUKKyUlICAgICAgd3JpdGVMaXN0QmVnaW4sIHdyaXRlTGlzdEVuZCwJCQkgICAgICAgJSUKKyUlICAgICAgd3JpdGVTZXRCZWdpbiwgd3JpdGVTZXRFbmQsCQkJICAgICAgICUlCislJSAgICAgIAkJCQkJCSAgICAgICAlJQorJSUgICAgICB3cml0ZUJvb2wsIHdyaXRlQnl0ZSwgd3JpdGVJMTYsIHdyaXRlSTMyLCAJICAgICAgICUlCislJSAgICAgIHdyaXRlSTY0LCB3cml0ZURvdWJsZSwgd3JpdGVTdHJpbmcsIAkJICAgICAgICUlCislJSAgICAgIAkJCQkJCSAgICAgICAlJQorJSUgICAgICByZWFkTWVzc2FnZUJlZ2luLCByZWFkTWVzc2FnZUVuZCwgCQkgICAgICAgJSUKKyUlICAgICAgcmVhZFN0cnVjdEJlZ2luLCByZWFkU3RydWN0RW5kLCAJCSAgICAgICAlJQorJSUgICAgICByZWFkRmllbGRCZWdpbiwgcmVhZEZpZWxkRW5kLAkJCSAgICAgICAlJQorJSUgICAgICByZWFkTWFwQmVnaW4sIHJlYWRNYXBFbmQsCQkJICAgICAgICUlCislJSAgICAgIHJlYWRMaXN0QmVnaW4sIHJlYWRMaXN0RW5kLAkJCSAgICAgICAlJQorJSUgICAgICByZWFkU2V0QmVnaW4sIHJlYWRTZXRFbmQsCQkJICAgICAgICUlCislJSAgICAgIAkJCQkJCSAgICAgICAlJQorJSUgICAgICByZWFkQm9vbCwgcmVhZEJ5dGUsIHJlYWRJMTYsIHJlYWRJMzIsIAkJICAgICAgICUlCislJSAgICAgIHJlYWRJNjQsIHJlYWREb3VibGUsIHJlYWRTdHJpbmcJCQkgICAgICAgJSUKKyUlICAgICBdOwkJCQkJCSAgICAgICAlJQorJSUgCQkJCQkJCSAgICAgICAlJQorJSUgJSUlIGFzeW5jaHJvbm91cyBjYXN0cyB0byBwYXNzCQkJICAgICAgICUlCislJSBpbnRlcmZhY2UoY2FzdCkgLT4JCQkJCSAgICAgICAlJQorJSUgICAgIFtdLgkJCQkJCSAgICAgICAlJQorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHRyYW5zKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUih0cmFucykuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoVHJhbnMpIC0+CisgICAgIz9NT0RVTEV7dHJhbnM9VHJhbnN9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKword3JpdGVNZXNzYWdlQmVnaW4oX1RoaXMsIF9OYW1lLCBfVHlwZSwgX1NlcWlkKSAtPiBvay4KK3dyaXRlTWVzc2FnZUVuZChfVGhpcykgLT4gb2suCit3cml0ZVN0cnVjdEJlZ2luKF9UaGlzLCBfTmFtZSkgLT4gb2suCit3cml0ZVN0cnVjdEVuZChfVGhpcykgLT4gb2suCit3cml0ZUZpZWxkQmVnaW4oX1RoaXMsIF9OYW1lLCBfVHlwZSwgX0lkKSAtPiBvay4KK3dyaXRlRmllbGRFbmQoX1RoaXMpIC0+IG9rLgord3JpdGVGaWVsZFN0b3AoX1RoaXMpIC0+IG9rLgord3JpdGVNYXBCZWdpbihfVGhpcywgX0t0eXBlLCBfVnR5cGUsIF9TaXplKSAtPiBvay4KK3dyaXRlTWFwRW5kKF9UaGlzKSAtPiBvay4KK3dyaXRlTGlzdEJlZ2luKF9UaGlzLCBfRXR5cGUsIF9TaXplKSAtPiBvay4KK3dyaXRlTGlzdEVuZChfVGhpcykgLT4gb2suCit3cml0ZVNldEJlZ2luKF9UaGlzLCBfRXR5cGUsIF9TaXplKSAtPiBvay4KK3dyaXRlU2V0RW5kKF9UaGlzKSAtPiBvay4KKword3JpdGVCb29sKF9UaGlzLCBfVmFsdWUpIC0+IG9rLgord3JpdGVCeXRlKF9UaGlzLCBfVmFsdWUpIC0+IG9rLgord3JpdGVJMTYoX1RoaXMsIF9WYWx1ZSkgLT4gb2suCit3cml0ZUkzMihfVGhpcywgX1ZhbHVlKSAtPiBvay4KK3dyaXRlSTY0KF9UaGlzLCBfVmFsdWUpIC0+IG9rLgord3JpdGVEb3VibGUoX1RoaXMsIF9WYWx1ZSkgLT4gb2suCit3cml0ZVN0cmluZyhfVGhpcywgX1ZhbHVlKSAtPiBvay4KKworcmVhZE1lc3NhZ2VCZWdpbihfVGhpcykgLT4gb2suCityZWFkTWVzc2FnZUVuZChfVGhpcykgLT4gb2suCityZWFkU3RydWN0QmVnaW4oX1RoaXMpIC0+IG9rLgorcmVhZFN0cnVjdEVuZChfVGhpcykgLT4gb2suCityZWFkRmllbGRCZWdpbihfVGhpcykgLT4gb2suCityZWFkRmllbGRFbmQoX1RoaXMpIC0+IG9rLgorcmVhZE1hcEJlZ2luKF9UaGlzKSAtPiBvay4KK3JlYWRNYXBFbmQoX1RoaXMpIC0+IG9rLgorcmVhZExpc3RCZWdpbihfVGhpcykgLT4gb2suCityZWFkTGlzdEVuZChfVGhpcykgLT4gb2suCityZWFkU2V0QmVnaW4oX1RoaXMpIC0+IG9rLgorcmVhZFNldEVuZChfVGhpcykgLT4gb2suCisKK3JlYWRCb29sKF9UaGlzKSAtPiBvay4KK3JlYWRCeXRlKF9UaGlzKSAtPiBvay4KK3JlYWRJMTYoX1RoaXMpIC0+IG9rLgorcmVhZEkzMihfVGhpcykgLT4gb2suCityZWFkSTY0KF9UaGlzKSAtPiBvay4KK3JlYWREb3VibGUoX1RoaXMpIC0+IG9rLgorcmVhZFN0cmluZyhfVGhpcykgLT4gb2suCisKK3NraXAoVGhpcywgVHlwZSkgLT4KKyAgICBjYXNlIFR5cGUgb2YgCisJP3RUeXBlX1NUT1AgICAtPiBuaWw7ICUgV0FUQ0gKKwk/dFR5cGVfQk9PTCAgIC0+ID9MMChyZWFkQm9vbCk7CisJP3RUeXBlX0JZVEUgICAtPiA/TDAocmVhZEJ5dGUpOworCT90VHlwZV9JMTYgICAgLT4gP0wwKHJlYWRJMTYpOworCT90VHlwZV9JMzIgICAgLT4gP0wwKHJlYWRJMzIpOworCT90VHlwZV9JNjQgICAgLT4gP0wwKHJlYWRJNjQpOworCT90VHlwZV9ET1VCTEUgLT4gP0wwKHJlYWREb3VibGUpOworCT90VHlwZV9TVFJJTkcgLT4gP0wwKHJlYWRTdHJpbmcpOworCisJP3RUeXBlX1NUUlVDVCAtPiAKKwkgICAgP0wwKHJlYWRTdHJ1Y3RCZWdpbiksCisJICAgIHNraXBfc3RydWN0X2xvb3AoVGhpcyksCisKKwkgICAgJSUgY3Bpcm86IHRoaXMgaXNuJ3QgaGVyZSBpbiB0aGUgb3JpZ2luYWwgdHByb3RvY29sLnJiLCBidXQgaSB0aGluayBpdCdzIGEgYnVnCisJICAgID9MMChyZWFkU3RydWN0RW5kKTsKKworCT90VHlwZV9NQVAgLT4KKwkgICAge0t0eXBlLCBWdHlwZSwgU2l6ZX0gPSA/TDAocmVhZE1hcEJlZ2luKSwKKwkgICAgc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgU2l6ZSksCisJICAgID9MMChyZWFkTWFwRW5kKTsKKworCT90VHlwZV9TRVQgLT4gCisJICAgIHtFdHlwZSwgU2l6ZX0gPSA/TDAocmVhZFNldEJlZ2luKSwKKwkgICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBTaXplKSwKKwkgICAgP0wwKHJlYWRTZXRFbmQpOworCisJP3RUeXBlX0xJU1QgLT4KKwkgICAge0V0eXBlLCBTaXplfSA9ID9MMChyZWFkTGlzdEJlZ2luKSwKKwkgICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBTaXplKSwgJSBbc2ljXSBza2lwcGluZyBzYW1lIGFzIGZvciBTRVQKKwkgICAgP0wwKHJlYWRMaXN0RW5kKQorICAgIGVuZC4KKworc2tpcF9zdHJ1Y3RfbG9vcChUaGlzKSAtPgorICAgIHsgX05hbWUsIFR5cGUsIF9JZCB9ID0gP0wwKHJlYWRGaWVsZEJlZ2luKSwKKyAgICBpZgorCVR5cGUgPT0gP3RUeXBlX1NUT1AgLT4KKwkgICAgb2s7CisJCisJdHJ1ZSAtPgorCSAgICA/TDEoc2tpcCwgVHlwZSksCisJICAgID9MMChyZWFkRmllbGRFbmQpLAorCisJICAgICUlIGNwaXJvOiB0aGlzIGlzIGhlcmUgaW4gb3JpZ2luYWwgdHByb3RvY29sLnJiLCBidXQgaSB0aGluayBpdCdzIGEgYnVnCisJICAgICUgP0wwKHJlYWRTdHJ1Y3RFbmQpLAorCSAgICBza2lwX3N0cnVjdF9sb29wKFRoaXMpCisgICAgZW5kLgorICAgICAgIAorc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgVGltZXMpIC0+CisgICAgP0wxKHNraXAsIEt0eXBlKSwKKyAgICA/TDEoc2tpcCwgVnR5cGUpLAorICAgIHNraXBfbWFwX3JlcGVhdChUaGlzLCBLdHlwZSwgVnR5cGUsIFRpbWVzLTEpLgorCitza2lwX3NldF9yZXBlYXQoVGhpcywgRXR5cGUsIFRpbWVzKSAtPgorICAgID9MMShza2lwLCBFdHlwZSksCisgICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBUaW1lcy0xKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI2YWZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uZXJsCkBAIC0wLDAgKzEsNTggQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodFByb3RvY29sRXhjZXB0aW9uKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJwcm90b2NvbC90UHJvdG9jb2xFeGNlcHRpb24uaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKHR5cGUpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0RXhjZXB0aW9uLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKHR5cGUpLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KFR5cGUsIE1lc3NhZ2UpIC0+CisgICAgU3VwZXIgPSAoc3VwZXIoKSk6bmV3KE1lc3NhZ2UpLAorICAgICM/TU9EVUxFe3N1cGVyPVN1cGVyLCB0eXBlPVR5cGV9LgorCituZXcoKSAtPgorICAgIG5ldyg/dFByb3RvY29sRXhjZXB0aW9uX1VOS05PV04sIHVuZGVmaW5lZCkuCituZXcoVHlwZSkgLT4KKyAgICBuZXcoVHlwZSwgdW5kZWZpbmVkKS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3Byb3RvY29sL3RQcm90b2NvbEZhY3RvcnkuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2xGYWN0b3J5LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjk3MjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9wcm90b2NvbC90UHJvdG9jb2xGYWN0b3J5LmVybApAQCAtMCwwICsxLDU0IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRQcm90b2NvbEZhY3RvcnkpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RQcm90b2NvbEZhY3RvcnkuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgZ2V0UHJvdG9jb2wvMl0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0FUVFJfRFVNTVkuCisKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIG5vbmUuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoKSAtPgorICAgICM/TU9EVUxFe30uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCitnZXRQcm90b2NvbChUaGlzLCBUcmFucykgLT4KKyAgICBuaWwuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3NlcnZlci90RXJsU2VydmVyLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RFcmxTZXJ2ZXIuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTQ3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3NlcnZlci90RXJsU2VydmVyLmVybApAQCAtMCwwICsxLDExMiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0RXJsU2VydmVyKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KKy1pbmNsdWRlKCJzZXJ2ZXIvdEVybFNlcnZlci5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy82LCBuZXcvNSwgbmV3LzQsIGVmZmVjdGZ1bF9zZXJ2ZS8xLCBlZmZlY3RmdWxfbmV3X2FjY2VwdG9yLzEsIGNhdGNoZXMvM10pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUihhY2NlcHRvcik7Cis/REVGSU5FX0FUVFIobGlzdGVuU29ja2V0KTsKKz9ERUZJTkVfQVRUUihwb3J0KS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFNlcnZlci4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihhY2NlcHRvcikgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihsaXN0ZW5Tb2NrZXQpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIocG9ydCkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoUG9ydCwgSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIFByb3RvY29sRmFjdG9yeSkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIFByb3RvY29sRmFjdG9yeSksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXIsIHBvcnQ9UG9ydCwgbGlzdGVuU29ja2V0PW5pbCwgYWNjZXB0b3I9bmlsfS4KKworbmV3KFBvcnQsIEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0KSAtPgorICAgIG5ldyhQb3J0LCBIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgbmlsLCBuaWwpLgorCituZXcoUG9ydCwgSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnkpIC0+CisgICAgbmV3KFBvcnQsIEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBUcmFuc3BvcnRGYWN0b3J5LCBuaWwpLgorCislIGxpc3RlblNvY2tldCwgYWNjZXB0b3IsIHBvcnQKKworZWZmZWN0ZnVsX3NlcnZlKFRoaXMpIC0+CisgICAgUG9ydCA9IG9vcDpnZXQoVGhpcywgcG9ydCksCisKKyAgICBPcHRpb25zID0gW2JpbmFyeSwge3BhY2tldCwgMH0sIHthY3RpdmUsIGZhbHNlfV0sCisKKyAgICAlJSBsaXN0ZW4KKyAgICBjYXNlIGdlbl90Y3A6bGlzdGVuKFBvcnQsIE9wdGlvbnMpIG9mIAorCXtvaywgTGlzdGVuU29ja2V0fSAtPgorCisJICAgIFRoaXMxID0gb29wOnNldChUaGlzLCBsaXN0ZW5Tb2NrZXQsIExpc3RlblNvY2tldCksCisKKwkgICAgJSUgc3Bhd24gYWNjZXB0b3IKKwkgICAge19BY2NlcHRvciwgVGhpczJ9ID0gZWZmZWN0ZnVsX25ld19hY2NlcHRvcihUaGlzMSksCisKKwkgICAge29rLCBUaGlzMn0KKyAgICBlbmQuCisKK2VmZmVjdGZ1bF9uZXdfYWNjZXB0b3IoVGhpcykgLT4KKyAgICBMaXN0ZW5Tb2NrZXQgPSBvb3A6Z2V0KFRoaXMsIGxpc3RlblNvY2tldCksCisgICAgUHJvY2Vzc29yICAgID0gb29wOmdldChUaGlzLCBwcm9jZXNzb3IpLCAlJSBjcGlybzogZ2VuZXJhdGVkIHByb2Nlc3Nvciwgbm90IHRoZSAiYWN0dWFsIiBwcm9jZXNzb3IKKyAgICBIYW5kbGVyICAgICAgPSBvb3A6Z2V0KFRoaXMsIGhhbmRsZXIpLAorCisgICAgVEYgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zcG9ydEZhY3RvcnkpLAorICAgIFBGID0gb29wOmdldChUaGlzLCBwcm90b2NvbEZhY3RvcnkpLAorCisgICAgdEVybEFjY2VwdG9yID0gb29wOmdldChUaGlzLCBzZXJ2ZXJUcmFuc3BvcnQpLCAlJSBjcGlybzogb25seSBzdXBwb3J0ZWQgU2VydmVyVHJhbnNwb3J0CisKKyAgICBTZXJ2ZXJQaWQgPSBzZWxmKCksCisgICAgQWNjZXB0b3IgID0gb29wOnN0YXJ0X25ldyh0RXJsQWNjZXB0b3IsIFtTZXJ2ZXJQaWQsIFRGLCBQRl0pLAorICAgID9DMyhBY2NlcHRvciwgYWNjZXB0LCBMaXN0ZW5Tb2NrZXQsIFByb2Nlc3NvciwgSGFuZGxlciksCisKKyAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgYWNjZXB0b3IsIEFjY2VwdG9yKSwKKworICAgIHtBY2NlcHRvciwgVGhpczF9LgorCitjYXRjaGVzKFRoaXMsIFBpZCwgYWNjZXB0b3JfZG9uZSkgLT4KKyAgICBvay4KKworJSUgJSUgVGhlIGN1cnJlbnQgYWNjZXB0b3IgaGFzIGRpZWQsIHdhaXQgYSBsaXR0bGUgYW5kIHRyeSBhZ2FpbgkJCQkJCSAgICAgICAlJQorJSUgaGFuZGxlX2luZm8oeydFWElUJywgUGlkLCBfQWJub3JtYWx9LCAjc3RhdGV7YWNjZXB0b3I9UGlkfSA9IFN0YXRlKSAtPgkJCQkJICAgICAgICUlCislJSAgICAgdGltZXI6c2xlZXAoMjAwMCksCQkJCQkJCQkJCQkgICAgICAgJSUKKyUlICAgICBpc2VydmVfc29ja2V0OnN0YXJ0X2xpbmsoc2VsZigpLCBTdGF0ZSNzdGF0ZS5saXN0ZW5fc29ja2V0LCBTdGF0ZSNzdGF0ZS5wb3J0KSwJCQkJICAgICAgICUlCislJSAgICAge25vcmVwbHksU3RhdGV9OwkJCQkJCQkJCQkJCSAgICAgICAlJQorCislJSB0ZXJtaW5hdGUoUmVhc29uLCBTdGF0ZSkgLT4JCQkJCQkJCQkJCSAgICAgICAlJQorJSUgICAgIGVycm9yX2xvZ2dlcjppbmZvX21zZyggIlRlcm1pbmF0aW5nIGVycm9yOiB+cH5uIiwgW1JlYXNvbl0pLCAlIGFkZGVkCQkJCQkgICAgICAgJSUKKyUlICAgICBnZW5fdGNwOmNsb3NlKFN0YXRlI3N0YXRlLmxpc3Rlbl9zb2NrZXQpLAkJCQkJCQkJICAgICAgICUlCislJSAgICAgb2suCQkJCQkJCQkJCQkJCSAgICAgICAlJQorJSUgCQkJCQkJCQkJCQkJCQkgICAgICAgJSUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RTZXJ2ZXIuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy9zZXJ2ZXIvdFNlcnZlci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhZWYyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RTZXJ2ZXIuZXJsCkBAIC0wLDAgKzEsODEgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodFNlcnZlcikuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgic2VydmVyL3RTZXJ2ZXIuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RCaW5hcnlQcm90b2NvbEZhY3RvcnkuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvNSwgbmV3LzQsIG5ldy8zLCBzZXJ2ZS8xXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoaGFuZGxlcik7Cis/REVGSU5FX0FUVFIocHJvY2Vzc29yKTsKKz9ERUZJTkVfQVRUUihzZXJ2ZXJUcmFuc3BvcnQpOworP0RFRklORV9BVFRSKHRyYW5zcG9ydEZhY3RvcnkpOworP0RFRklORV9BVFRSKHByb3RvY29sRmFjdG9yeSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIG5vbmUuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIoaGFuZGxlcikgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihwcm9jZXNzb3IpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIoc2VydmVyVHJhbnNwb3J0KSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKHRyYW5zcG9ydEZhY3RvcnkpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIocHJvdG9jb2xGYWN0b3J5KS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgUHJvdG9jb2xGYWN0b3J5KSAtPgorICAgICM/TU9EVUxFe2hhbmRsZXI9SGFuZGxlciwgcHJvY2Vzc29yPVByb2Nlc3Nvciwgc2VydmVyVHJhbnNwb3J0PVNlcnZlclRyYW5zcG9ydCwKKworCSAgICAgJSUgbXVjaCBhZG8gYWJvdXQgbm90aGluZyBidXQKKwkgICAgICUlIHN1YmNsYXNzZXMgcGFzcyBuaWwgdG9vCisJICAgICB0cmFuc3BvcnRGYWN0b3J5ID0gCisJICAgICBjYXNlIFRyYW5zcG9ydEZhY3Rvcnkgb2YKKwkJIG5pbCAtPiB0VHJhbnNwb3J0RmFjdG9yeTpuZXcoKTsKKwkJIF8gICAtPiBUcmFuc3BvcnRGYWN0b3J5CisJICAgICBlbmQsCisJICAgICAKKwkgICAgIHByb3RvY29sRmFjdG9yeSA9IAorCSAgICAgY2FzZSBQcm90b2NvbEZhY3Rvcnkgb2YKKwkJIG5pbCAtPiB0QmluYXJ5UHJvdG9jb2xGYWN0b3J5Om5ldygpOworCQkgXyAgIC0+IFByb3RvY29sRmFjdG9yeQorCSAgICAgZW5kICAgICAKK30uCisKK25ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCkgLT4KKyAgICBuZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIG5pbCwgbmlsKS4KKworbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBUcmFuc3BvcnRGYWN0b3J5KSAtPgorICAgIG5ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSwgbmlsKS4KKworc2VydmUoX1RoaXMpIC0+CisgICAgb2suCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3NlcnZlci90U2ltcGxlU2VydmVyLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvc2VydmVyL3RTaW1wbGVTZXJ2ZXIuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNDU3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3NlcnZlci90U2ltcGxlU2VydmVyLmVybApAQCAtMCwwICsxLDEwNiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0U2ltcGxlU2VydmVyKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KKy1pbmNsdWRlKCJzZXJ2ZXIvdFNpbXBsZVNlcnZlci5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy81LCBuZXcvNCwgbmV3LzMsIHNlcnZlLzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcikuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRTZXJ2ZXIuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIFByb3RvY29sRmFjdG9yeSkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIFByb3RvY29sRmFjdG9yeSksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXJ9LgorCituZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQpIC0+CisgICAgbmV3KEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBuaWwsIG5pbCkuCisKK25ldyhIYW5kbGVyLCBQcm9jZXNzb3IsIFNlcnZlclRyYW5zcG9ydCwgVHJhbnNwb3J0RmFjdG9yeSkgLT4KKyAgICBuZXcoSGFuZGxlciwgUHJvY2Vzc29yLCBTZXJ2ZXJUcmFuc3BvcnQsIFRyYW5zcG9ydEZhY3RvcnksIG5pbCkuCisKKyUKKworc2VydmUoVGhpcykgLT4KKyAgICBTVCA9IG9vcDpnZXQoVGhpcywgc2VydmVyVHJhbnNwb3J0KSwKKyAgICA/UjAoU1QsIGVmZmVjdGZ1bF9saXN0ZW4pLAorCisgICAgc2VydmVfbG9vcChUaGlzKS4KKworc2VydmVfbG9vcChUaGlzKSAtPgorICAgIGlvOmZvcm1hdCgifm5yZWFkeS5+biIsIFtdKSwKKworICAgIFNUICAgICA9IG9vcDpnZXQoVGhpcywgc2VydmVyVHJhbnNwb3J0KSwKKyAgICBDbGllbnQgPSA/UlQwKFNULCBhY2NlcHQsIGluZmluaXR5KSwKKworICAgIFRGICAgICA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0RmFjdG9yeSksCisgICAgVHJhbnMgID0gP0YxKFRGLCBnZXRUcmFuc3BvcnQsIENsaWVudCksICUlIGNwaXJvOiBPUEFRVUUhISBUcmFucyA9IENsaWVudAorCisgICAgUEYgICAgID0gb29wOmdldChUaGlzLCBwcm90b2NvbEZhY3RvcnkpLAorICAgIFByb3QgICA9ID9GMShQRiwgZ2V0UHJvdG9jb2wsIFRyYW5zKSwgJSUgY3Bpcm86IE9QQVFVRSEhIFByb3QgPSBzdGFydF9uZXcodEJpbmFyeVByb3RvY29sLCBbVHJhbnNdKQorCisgICAgaW86Zm9ybWF0KCJjbGllbnQgYWNjZXB0KCllZH5uIiwgW10pLAorCisgICAgc2VydmVfbG9vcF9sb29wKFRoaXMsIFByb3QpLCAlIGdpZ2dsZSBsb29wPworCisgICAgP1IwKFRyYW5zLCBlZmZlY3RmdWxfY2xvc2UpLAorCisgICAgc2VydmVfbG9vcChUaGlzKS4KKyAgICAKK3NlcnZlX2xvb3BfbG9vcChUaGlzLCBQcm90KSAtPgorICAgIE5leHQgPSAKKwl0cnkKKwkgICAgSGFuZGxlciAgID0gb29wOmdldChUaGlzLCBoYW5kbGVyKSwKKwkgICAgUHJvY2Vzc29yID0gb29wOmdldChUaGlzLCBwcm9jZXNzb3IpLAorCSAgICBWYWwgPSBhcHBseShQcm9jZXNzb3IsIHByb2Nlc3MsIFtIYW5kbGVyLCBQcm90LCBQcm90XSksICUlIFRPRE8oY3Bpcm8pOiBtYWtlIHByb2Nlc3NvciBhIGdlbl9zZXJ2ZXIgaW5zdGFuY2UKKwkgICAgaW86Zm9ybWF0KCJyZXF1ZXN0IHByb2Nlc3NlZDogcnY9fnB+biIsIFtWYWxdKSwKKwkgICAgbG9vcAorCWNhdGNoIAorCSAgICAlJSBUT0RPKGNwaXJvKSBjYXNlIHdoZW4gaXNfcmVjb3JkKC4uLikgdG8gcGljayBvdXQgb3VyIGV4Y2VwdGlvbgorCSAgICAlJSByZWNvcmRzIHZzLiBub3JtYWwgZXJsYW5nIHRocm93cworCSAgICBFIHdoZW4gaXNfcmVjb3JkKEUsIHRUcmFuc3BvcnRFeGNlcHRpb24pIC0+CisJCWlvOmZvcm1hdCgidFRyYW5zcG9ydEV4Y2VwdGlvbiAobm9ybWFsLWlzaD8pfm4iLCBbXSksCisJCWNsb3NlOworCSAgICBGIC0+CisJCWlvOmZvcm1hdCgiRVhDRVBUSU9OOiB+cH5uIiwgW0ZdKSwKKwkJY2xvc2UKKwllbmQsCisgICAgY2FzZSBOZXh0IG9mIAorCWxvb3AgLT4gc2VydmVfbG9vcF9sb29wKFRoaXMsIFByb3QpOworCWNsb3NlIC0+IG9rCisgICAgZW5kLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90QXBwbGljYXRpb25FeGNlcHRpb24uZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90QXBwbGljYXRpb25FeGNlcHRpb24uZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGI5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5lcmwKQEAgLTAsMCArMSwxMTUgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEFwcGxpY2F0aW9uRXhjZXB0aW9uKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0QXBwbGljYXRpb25FeGNlcHRpb24uaHJsIikuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yLCByZWFkLzIsIHdyaXRlLzJdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIodHlwZSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdEV4Y2VwdGlvbi4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUih0eXBlKS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhUeXBlLCBNZXNzYWdlKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldyhNZXNzYWdlKSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlciwgdHlwZT1UeXBlfS4KKworbmV3KCkgICAgIC0+IG5ldyg/dEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV04sIHVuZGVmaW5lZCkuCituZXcoVHlwZSkgLT4gbmV3KFR5cGUsIHVuZGVmaW5lZCkuCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCityZWFkKFRoaXMsIElwcm90KSAtPgorICAgID9SMChJcHJvdCwgcmVhZFN0cnVjdEJlZ2luKSwKKyAgICByZWFkX3doaWxlX2xvb3AoVGhpcywgSXByb3QpLAorICAgID9SMChJcHJvdCwgcmVhZFN0cnVjdEVuZCksCisgICAgb2suCisKK3JlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCkgLT4KKyAgICB7X0ZuYW1lLCBGdHlwZSwgRmlkfSA9ID9SMChJcHJvdCwgcmVhZEZpZWxkQmVnaW4pLAorCisgICAgaWYgCisJRnR5cGUgPT0gP3RUeXBlX1NUT1AgLT4KKwkgICAgb2s7CisKKwkoRmlkID09IDEpIGFuZCAoRnR5cGUgPT0gP3RUeXBlX1NUUklORykgLT4KKwkgICAgTWVzc2FnZTEgPSA/UjAoSXByb3QsIHJlYWRTdHJpbmcpLAorCSAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgbWVzc2FnZSwgTWVzc2FnZTEpLAorCSAgICA/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksCisJICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzMSwgSXByb3QpOworCisJRmlkID09IDEgLT4KKwkgICAgP1IwKElwcm90LCBza2lwKSwKKwkgICAgP1IwKElwcm90LCByZWFkRmllbGRFbmQpLAorCSAgICByZWFkX3doaWxlX2xvb3AoVGhpcywgSXByb3QpOworCisJKEZpZCA9PSAyKSBhbmQgKEZ0eXBlID09ID90VHlwZV9JMzIpIC0+CisJICAgIFR5cGUxID0gP1IwKElwcm90LCByZWFkSTMyKSwKKwkgICAgVGhpczEgPSBvb3A6c2V0KFRoaXMsIHR5cGUsIFR5cGUxKSwKKwkgICAgP1IwKElwcm90LCByZWFkRmllbGRFbmQpLAorCSAgICByZWFkX3doaWxlX2xvb3AoVGhpczEsIElwcm90KTsKKworICAgICAgICB0cnVlIC0+IAorCSAgICA/UjAoSXByb3QsIHNraXApLAorCSAgICA/UjAoSXByb3QsIHJlYWRGaWVsZEVuZCksCisJICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCkKKyAgICBlbmQuCisKK3dyaXRlKFRoaXMsIE9wcm90KSAtPgkKKyAgICA/UjEoT3Byb3QsIHdyaXRlU3RydWN0QmVnaW4sICJ0QXBwbGljYXRpb25FeGNlcHRpb24iKSwKKyAgICBNZXNzYWdlID0gb29wOmdldChUaGlzLCBtZXNzYWdlKSwKKyAgICBUeXBlICAgID0gb29wOmdldChUaGlzLCB0eXBlKSwKKworICAgIGlmCU1lc3NhZ2UgLz0gdW5kZWZpbmVkIC0+CisJICAgID9SMyhPcHJvdCwgd3JpdGVGaWVsZEJlZ2luLCAibWVzc2FnZSIsID90VHlwZV9TVFJJTkcsIDEpLAorCSAgICA/UjEoT3Byb3QsIHdyaXRlU3RyaW5nLCBNZXNzYWdlKSwKKwkgICAgP1IwKE9wcm90LCB3cml0ZUZpZWxkRW5kKTsKKyAgICAgICAgdHJ1ZSAtPiBvaworICAgIGVuZCwKKworICAgIGlmICBUeXBlIC89IHVuZGVmaW5lZCAtPiAKKwkgICAgP1IzKE9wcm90LCB3cml0ZUZpZWxkQmVnaW4sICJ0eXBlIiwgP3RUeXBlX0kzMiwgMiksCisJICAgID9SMShPcHJvdCwgd3JpdGVJMzIsIFR5cGUpLAorCSAgICA/UjAoT3Byb3QsIHdyaXRlRmllbGRFbmQpOworICAgICAgICB0cnVlIC0+IG9rCisgICAgZW5kLAorCisgICAgP1IwKE9wcm90LCB3cml0ZUZpZWxkU3RvcCksCisgICAgP1IwKE9wcm90LCB3cml0ZVN0cnVjdEVuZCksCisgICAgb2suCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RFcmxQcm9jZXNzb3IuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90RXJsUHJvY2Vzc29yLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTVlZjUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90RXJsUHJvY2Vzc29yLmVybApAQCAtMCwwICsxLDYyIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRFcmxQcm9jZXNzb3IpLgorCistaW5jbHVkZSgib29wLmhybCIpLgorLWluY2x1ZGUoInRFcmxQcm9jZXNzb3IuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMiwgcHJvY2Vzcy8zXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKGdlbmVyYXRlZFByb2Nlc3Nvcik7Cis/REVGSU5FX0FUVFIoaGFuZGxlcikuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRQcm9jZXNzb3IuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIoZ2VuZXJhdGVkUHJvY2Vzc29yKSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKGhhbmRsZXIpLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KEdQLCBIYW5kbGVyKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyID0gU3VwZXIsIGdlbmVyYXRlZFByb2Nlc3NvciA9IEdQLCBoYW5kbGVyID0gSGFuZGxlcn0uCisKKyUlIHByb2Nlc3NvciBpcyBnZW5lcmF0ZWQgY29kZQorJSUgaGFuZGxlciBpcyB1c2VyIGNvZGUKKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK3Byb2Nlc3MoVGhpcywgSXByb3QsIE9wcm90KSAtPgorICAgIEdQICAgICAgPSBvb3A6Z2V0KFRoaXMsIGdlbmVyYXRlZFByb2Nlc3NvciksCisgICAgSGFuZGxlciA9IG9vcDpnZXQoVGhpcywgaGFuZGxlciksCisgICAgCisgICAgYXBwbHkoR1AsIHByb2Nlc3MsIFtIYW5kbGVyLCBJcHJvdCwgT3Byb3RdKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdEV4Y2VwdGlvbi5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RFeGNlcHRpb24uZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzRjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RFeGNlcHRpb24uZXJsCkBAIC0wLDAgKzEsNTAgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEV4Y2VwdGlvbikuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCistaW5jbHVkZSgidEV4Y2VwdGlvbi5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8xXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIobWVzc2FnZSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIG5vbmUuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIobWVzc2FnZSkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoTWVzc2FnZSkgLT4KKyAgICAjP01PRFVMRXttZXNzYWdlPU1lc3NhZ2V9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90UHJvY2Vzc29yLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdFByb2Nlc3Nvci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzNzQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdFByb2Nlc3Nvci5lcmwKQEAgLTAsMCArMSw1MCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0UHJvY2Vzc29yKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0UHJvY2Vzc29yLmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzBdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9BVFRSX0RVTU1ZLgorCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICBub25lLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KCkgLT4KKyAgICAjP01PRFVMRXt9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90aHJpZnQuYXBwLnNyYyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0LmFwcC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGMyOTI2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0LmFwcC5zcmMKQEAgLTAsMCArMSw0MSBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KK3thcHBsaWNhdGlvbiwgJUFQUF9OQU1FJSwKKyBbCisgICUgQSBxdWljayBkZXNjcmlwdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uCisgIHtkZXNjcmlwdGlvbiwgIlRocmlmdCBiaW5kaW5ncyJ9LAorCisgICUgVGhlIHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0b24KKyAge3ZzbiwgIiVWU04lIn0sCisKKyAgJSBBbGwgbW9kdWxlcyB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gCisgIHttb2R1bGVzLAorICAgWworCSVNT0RVTEVTJQorICAgXX0sCisKKyAgJSBBbGwgb2YgdGhlIHJlZ2lzdGVyZWQgbmFtZXMgdGhlIGFwcGxpY2F0aW9uIHVzZXMuIFRoaXMgY2FuIGJlIGlnbm9yZWQuCisgIHtyZWdpc3RlcmVkLCBbXX0sCisKKyAgJSBBcHBsaWNhdGlvbnMgdGhhdCBhcmUgdG8gYmUgc3RhcnRlZCBwcmlvciB0byB0aGlzIG9uZS4gVGhpcyBjYW4gYmUgaWdub3JlZAorICAlIGxlYXZlIGl0IGFsb25lIHVubGVzcyB5b3UgdW5kZXJzdGFuZCBpdCB3ZWxsIGFuZCBsZXQgdGhlIC5yZWwgZmlsZXMgaW4gCisgICUgeW91ciByZWxlYXNlIGhhbmRsZSB0aGlzLiAKKyAge2FwcGxpY2F0aW9ucywKKyAgIFsKKyAgICBrZXJuZWwsIAorICAgIHN0ZGxpYgorICAgXX0sCisKKyAgJSBPVFAgYXBwbGljYXRpb24gbG9hZGVyIHdpbGwgbG9hZCwgYnV0IG5vdCBzdGFydCwgaW5jbHVkZWQgYXBwcy4gQWdhaW4KKyAgJSB0aGlzIGNhbiBiZSBpZ25vcmVkIGFzIHdlbGwuICBUbyBsb2FkIGJ1dCBub3Qgc3RhcnQgYW4gYXBwbGljYXRpb24gaXQKKyAgJSBpcyBlYXNpZXIgdG8gaW5jbHVkZSBpdCBpbiB0aGUgLnJlbCBmaWxlIGZvbGxvd2VkIGJ5IHRoZSBhdG9tICdub25lJworICB7aW5jbHVkZWRfYXBwbGljYXRpb25zLCBbXX0sCisKKyAgJSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgc2ltaWxhciB0byB0aG9zZSBpbiB0aGUgY29uZmlnIGZpbGUgc3BlY2lmaWVkCisgICUgb24gdGhlIGNvbW1hbmQgbGluZS4gY2FuIGJlIGZldGNoZWQgd2l0aCBnYXM6Z2V0X2VudgorICB7ZW52LCBbXX0sCisKKyAgJSBUaGUgTW9kdWxlIGFuZCBBcmdzIHVzZWQgdG8gc3RhcnQgdGhpcyBhcHBsaWNhdGlvbi4KKyAge21vZCwgeyVBUFBfTkFNRSUsIFtdfX0KKyBdCit9LgorCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RocmlmdC5hcHB1cC5zcmMgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RocmlmdC5hcHB1cC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTRhNjM4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0LmFwcHVwLnNyYwpAQCAtMCwwICsxIEBACit7IiVWU04lIixbXSxbXX0uCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RocmlmdF9vb3Bfc2VydmVyLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdGhyaWZ0X29vcF9zZXJ2ZXIuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzkxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RocmlmdF9vb3Bfc2VydmVyLmVybApAQCAtMCwwICsxLDIxMyBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworJSUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUlIEBkb2MgIAorJSUlIEBlbmQKKyUlJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tb2R1bGUodGhyaWZ0X29vcF9zZXJ2ZXIpLgorCistYmVoYXZpb3VyKGdlbl9zZXJ2ZXIpLgorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgSW5jbHVkZSBmaWxlcworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRXh0ZXJuYWwgZXhwb3J0cworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWV4cG9ydChbCisJIHN0YXJ0X2xpbmsvMCwKKwkgc3RvcC8wCisJIF0pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBnZW5fc2VydmVyIGNhbGxiYWNrcworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWV4cG9ydChbaW5pdC8xLCBoYW5kbGVfY2FsbC8zLCBoYW5kbGVfY2FzdC8yLCBoYW5kbGVfaW5mby8yLCB0ZXJtaW5hdGUvMiwgY29kZV9jaGFuZ2UvM10pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSByZWNvcmQgZGVmaW5pdGlvbnMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgbWFjcm8gZGVmaW5pdGlvbnMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgRXh0ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIFN0YXJ0cyB0aGUgc2VydmVyLgorJSUgQHNwZWMgc3RhcnRfbGluaygpIC0+IHtvaywgcGlkKCl9IHwge2Vycm9yLCBSZWFzb259CislJSBAZW5kCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGFydF9saW5rKCkgLT4KKyAgICBnZW5fc2VydmVyOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10sIFtdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgQGRvYyBTdG9wcyB0aGUgc2VydmVyLgorJSUgQHNwZWMgc3RvcCgpIC0+IG9rCislJSBAZW5kCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdG9wKCkgLT4KKyAgICBnZW5fc2VydmVyOmNhc3QoP1NFUlZFUiwgc3RvcCkuCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlIFNlcnZlciBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuY3Rpb246IGluaXQvMQorJSUgRGVzY3JpcHRpb246IEluaXRpYXRlcyB0aGUgc2VydmVyCislJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSAgICAgICAgICB8CislJSAgICAgICAgICB7b2ssIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICBpZ25vcmUgICAgICAgICAgICAgICB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29ufQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1bnBhcmVudGgoQXJncykgLT4KKyAgICBBcmdzLgorCitpbml0KHtDbGFzcywgQXJnc30pIC0+CisgICAgcHJvY2Vzc19mbGFnKHRyYXBfZXhpdCwgdHJ1ZSksCisgICAgaWYgCisJdHJ1ZSAtPiAlIGxpc3RzOm1lbWJlcihDbGFzcywgQ2xhc3M6aW50ZXJmYWNlKHN1YmNsYXNzZXMpKSAtPgorCSAgICBpbzpmb3JtYXQoIm9vcF9zZXJ2ZXIgaW5pdDogfnAgOj0gfnA6bmV3KH5wKX5uIiwgW3NlbGYoKSwgQ2xhc3MsIHVucGFyZW50aChBcmdzKV0pLAorCSAgICBTdGF0ZSA9IGFwcGx5KENsYXNzLCBuZXcsIEFyZ3MpLCAlIFRPRE8oY3Bpcm8pOiB0cnkgY2F0Y2g/CisJICAgIGlvOmZvcm1hdCgiICAgICAgICAgICAgICA9Pn5wfm4iLCBbb29wOmluc3BlY3QoU3RhdGUpXSksCisJICAgIHtvaywgU3RhdGV9CisKKwklJSB0cnVlIC0+CQkJICAgICAgICUlCisJJSUgICAgIHtzdG9wLCBpbnZhbGlkX3N1YmNsYXNzfQkgICAgICAgJSUKKyAgICBlbmQ7Citpbml0KF8pIC0+CisgICAge3N0b3AsIGludmFsaWRfcGFyYW1zfS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuY3Rpb246IGhhbmRsZV9jYWxsLzMKKyUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBjYWxsIG1lc3NhZ2VzCislJSBSZXR1cm5zOiB7cmVwbHksIFJlcGx5LCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge3JlcGx5LCBSZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwKKyUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgICAgICB8CislJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9ICAgICAgfAorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgUmVwbHksIFN0YXRlfSAgIHwgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hhbmRsZV9jYWxsKFJlcXVlc3QsIEZyb20sIFN0YXRlKSAtPgorICAgIGhhbmRsZV9laXRoZXIoY2FsbCwgUmVxdWVzdCwgRnJvbSwgU3RhdGUpLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2Nhc3QvMgorJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhc3QgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitoYW5kbGVfY2FzdChzdG9wLCBTdGF0ZSkgLT4KKyAgICB7c3RvcCwgbm9ybWFsLCBTdGF0ZX07CisKK2hhbmRsZV9jYXN0KHtNZXRob2QsIEFyZ3N9LCBTdGF0ZSkgLT4KKyAgICBoYW5kbGVfZWl0aGVyKGNhc3QsIHtNZXRob2QsIEFyZ3N9LCB1bmRlZmluZWQsIFN0YXRlKS4KKworLWRlZmluZShSRVBMWShWYWx1ZSwgU3RhdGUpLAorCWNhc2UgVHlwZSBvZiAKKwkgICAgY2FsbCAtPiB7cmVwbHksIFZhbHVlLCBTdGF0ZX07CisJICAgIGNhc3QgLT4ge25vcmVwbHksIFN0YXRlfSAKKwllbmQKKykuIAorCitoYW5kbGVfZWl0aGVyKFR5cGUsIFJlcXVlc3QsIEZyb20sIFN0YXRlKSAtPgorICAgICUlIGlvOmZvcm1hdCgifnA6IH5wfm4iLCBbP1NFUlZFUiwgb29wOmluc3BlY3QoU3RhdGUpXSksICAgIAorICAgICUlIGlvOmZvcm1hdCgiICAgIGhhbmRsZV9jYWxsKFJlcXVlc3Q9fnAsIEZyb209fnAsIFN0YXRlKX5uIiwgW1JlcXVlc3QsIEZyb21dKSwKKworICAgIGNhc2UgUmVxdWVzdCBvZiAKKwl7Z2V0LCBbRmllbGRdfSAtPgorCSAgICBWYWx1ZSA9IG9vcDpnZXQoU3RhdGUsIEZpZWxkKSwKKwkgICAgP1JFUExZKFZhbHVlLCBTdGF0ZSk7CisKKwl7c2V0LCBbRmllbGQsIFZhbHVlXX0gLT4KKwkgICAgU3RhdGUxID0gb29wOnNldChTdGF0ZSwgRmllbGQsIFZhbHVlKSwKKwkgICAgP1JFUExZKFZhbHVlLCBTdGF0ZTEpOworCisJe01ldGhvZCwgQXJnc30gLT4KKwkgICAgaGFuZGxlX21ldGhvZChUeXBlLCBTdGF0ZSwgTWV0aG9kLCBBcmdzKTsKKworCV8gLT4KKwkgICAgaW86Zm9ybWF0KCIgICAgRVJST1I6IFJlcXVlc3QgPSB+cCBub21hdGNoIHtNZXRob2QsIEFyZ3N9fm4iLCBbUmVxdWVzdF0pLAorCSAgICAlJSB7c3RvcCwgc2VydmVyX2Vycm9yLCBTdGF0ZX0gCisJICAgIHtyZXBseSwgc2VydmVyX2Vycm9yLCBTdGF0ZX0KKyAgICBlbmQuCisKK2hhbmRsZV9tZXRob2QoVHlwZSwgU3RhdGUsIE1ldGhvZCwgQXJncykgLT4KKyAgICAlJSBpcyBhbiBlZmZlY3RmdWwgY2FsbD8KKyAgICBJc19lZmZlY3RmdWwgPSBsaXN0czpwcmVmaXgoImVmZmVjdGZ1bF8iLCBhdG9tX3RvX2xpc3QoTWV0aG9kKSksCisgICAgQ2FsbCAgICAgICAgID0gb29wOmNhbGwoU3RhdGUsIE1ldGhvZCwgQXJncyksCisgICAgCisgICAgJSUgVE9ETyhjcGlybyk6IG1heWJlIGFkZCBlcnJvciBoYW5kbGluZyBoZXJlPyA9IGNhdGNoIG9vcDpjYWxsPworICAgIAorICAgIGNhc2Uge0lzX2VmZmVjdGZ1bCwgQ2FsbH0gb2YgCisJe3RydWUsIHtSZXR2YWwsIFN0YXRlMX19IC0+CisJICAgID9SRVBMWShSZXR2YWwsIFN0YXRlMSk7CisJCisJe3RydWUsIF9NYWxmb3JtZWRSZXR1cm59IC0+CisJICAgICUlIFRPRE8oY3Bpcm8pOiBiYWQgbWF0Y2ggLS0gcmVtb3ZlIHdoZW4gd2UncmUgZG9uZSBjb252ZXJ0aW5nCisJICAgIGlvOmZvcm1hdCgiICAgIEVSUk9SOiBvb3A6Y2FsbChlZmZlY3RmdWxfKiwuLiwuLikgbWFsZm9ybWVkIHJldHVybiB2YWx1ZSB+cH5uIiwgCisJCSAgICAgIFtfTWFsZm9ybWVkUmV0dXJuXSksCisJICAgICUlIHtzdG9wLCBzZXJ2ZXJfZXJyb3IsIFN0YXRlfSAKKwkgICAge25vcmVwbHksIFN0YXRlfTsKKwkKKwl7ZmFsc2UsIFJldHZhbH0gLT4KKwkgICAgP1JFUExZKFJldHZhbCwgU3RhdGUpCisgICAgZW5kLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2luZm8vMgorJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGFsbCBub24gY2FsbC9jYXN0IG1lc3NhZ2VzCislJSBSZXR1cm5zOiB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgIHwKKyUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfAorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2hhbmRsZV9pbmZvKHsnRVhJVCcsIFBpZCwgRXhjZXB0fSA9IEFsbCwgU3RhdGUpIC0+CisgICAgY2FzZSBjYXRjaCBvb3A6Y2FsbChTdGF0ZSwgY2F0Y2hlcywgW1BpZCwgRXhjZXB0XSkgb2YKKwl7J0VYSVQnLCBNTX0gd2hlbiBlbGVtZW50KDEsTU0pID09IG1pc3NpbmdfbWV0aG9kIC0+CisJICAgIGlvOmZvcm1hdCgiVU5IQU5ETEVEIH5wIGJ5IH5wIX5uIiwgW0FsbCwgc2VsZigpXSksCisJICAgICUlIG5vdCBjYXVnaHQKKwkgICAge3N0b3AsIEFsbCwgU3RhdGV9OworCV9Jc0NhdWdodCAtPgorCSAgICAlJSBjYXVnaHQgYW5kIGhhbmRsZWQKKwkgICAge25vcmVwbHksIFN0YXRlfQorICAgIGVuZDsKKwkKK2hhbmRsZV9pbmZvKEluZm8sIFN0YXRlKSAtPgorICAgIGlvOmZvcm1hdCgifnAgaW5mb0VEITogfnB+biIsIFtzZWxmKCksIEluZm9dKSwKKyAgICB7bm9yZXBseSwgU3RhdGV9LgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogdGVybWluYXRlLzIKKyUlIERlc2NyaXB0aW9uOiBTaHV0ZG93biB0aGUgc2VydmVyCislJSBSZXR1cm5zOiBhbnkgKGlnbm9yZWQgYnkgZ2VuX3NlcnZlcikKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rlcm1pbmF0ZShSZWFzb24sIFN0YXRlKSAtPgorICAgIGlvOmZvcm1hdCgifnAgdGVybWluYXRlZCE6IH5wfm4iLCBbc2VsZigpLCBSZWFzb25dKSwKKyAgICBvay4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuYzogY29kZV9jaGFuZ2UvMworJSUgUHVycG9zZTogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkCislJSBSZXR1cm5zOiB7b2ssIE5ld1N0YXRlfQorICUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGUsIEV4dHJhKSAtPgorICAgIHtvaywgU3RhdGV9LgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSUgSW50ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuZXJsIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGQ5ZmJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmVybApAQCAtMCwwICsxLDg0IEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRCdWZmZXJlZFRyYW5zcG9ydCkuCisKKy1pbmNsdWRlKCJvb3AuaHJsIikuCisKKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8xLCBpc09wZW4vMSwgb3Blbi8xLCBjbG9zZS8xLCByZWFkLzIsIGVmZmVjdGZ1bF93cml0ZS8yLCBlZmZlY3RmdWxfZmx1c2gvMV0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUih0cmFuc3BvcnQpOworP0RFRklORV9BVFRSKHdidWYpLgorICAgCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICB0VHJhbnNwb3J0LgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KFRoaXMpIC0+CisgICAgP0ZPUk1BVF9BVFRSKHRyYW5zcG9ydCkgKysKKyAgICA/Rk9STUFUX0FUVFIod2J1ZikuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoVHJhbnNwb3J0KSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyPVN1cGVyLCB0cmFuc3BvcnQ9VHJhbnNwb3J0LCB3YnVmPSIifS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2lzT3BlbihUaGlzKSAtPgorICAgIFRyYW5zcG9ydCA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0KSwKKyAgICA/UjAoVHJhbnNwb3J0LCBpc09wZW4pLgorCitvcGVuKFRoaXMpIC0+CisgICAgVHJhbnNwb3J0ID0gb29wOmdldChUaGlzLCB0cmFuc3BvcnQpLAorICAgID9SMChUcmFuc3BvcnQsIG9wZW4pLgorCitjbG9zZShUaGlzKSAtPgorICAgIFRyYW5zcG9ydCA9IG9vcDpnZXQoVGhpcywgdHJhbnNwb3J0KSwKKyAgICA/UjAoVHJhbnNwb3J0LCBjbG9zZSkuCisKK3JlYWQoVGhpcywgU3opIC0+CisgICAgVHJhbnNwb3J0ID0gb29wOmdldChUaGlzLCB0cmFuc3BvcnQpLAorICAgID9SMShUcmFuc3BvcnQsIHJlYWQsIFN6KS4KKworZWZmZWN0ZnVsX3dyaXRlKFRoaXMsIEJ1ZikgLT4gJSBiZSBzdXJlIHRvIHJlYmluZCBUaGlzIHRvIHRoZSByZXR2YWwKKyAgICBXYnVmID0gb29wOmdldChUaGlzLCB3YnVmKSwKKyAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgd2J1ZiwgV2J1ZisrQnVmKSwgJSBUT0RPOiArKyBlZmZpY2llbmN5PworICAgIHtvaywgVGhpczF9LgorCitlZmZlY3RmdWxfZmx1c2goVGhpcykgLT4KKyAgICBXYnVmID0gb29wOmdldChUaGlzLCB3YnVmKSwKKyAgICBUcmFuc3BvcnQgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zcG9ydCksICAgIAorICAgID9SMShUcmFuc3BvcnQsIGVmZmVjdGZ1bF93cml0ZSwgV2J1ZiksCisgICAgP1IwKFRyYW5zcG9ydCwgZWZmZWN0ZnVsX2ZsdXNoKSwKKyAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgd2J1ZiwgIiIpLAorICAgIHtvaywgVGhpczF9LgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeS5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ2YWJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0RmFjdG9yeS5lcmwKQEAgLTAsMCArMSw1NCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5LmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzAsIGdldFRyYW5zcG9ydC8yXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/QVRUUl9EVU1NWS4KKworJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFRyYW5zcG9ydEZhY3RvcnkuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoX1RoaXMpIC0+CisgICAgIiIuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoKSAtPgorICAgIFN1cGVyID0gKHN1cGVyKCkpOm5ldygpLAorICAgICM/TU9EVUxFe3N1cGVyPVN1cGVyfS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2dldFRyYW5zcG9ydChfVGhpcywgVHJhbnMpIC0+CisgICAgZ2VuX3NlcnZlcjpzdGFydF9saW5rKHRCdWZmZXJlZFRyYW5zcG9ydCwge25ldywgW1RyYW5zXX0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdEVybEFjY2VwdG9yLmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RFcmxBY2NlcHRvci5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwNjI2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RFcmxBY2NlcHRvci5lcmwKQEAgLTAsMCArMSwyMjYgQEAKKyUlJSBDb3B5cmlnaHQgKGMpIDIwMDctIEZhY2Vib29rCislJSUgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFRocmlmdCBTb2Z0d2FyZSBMaWNlbnNlCislJSUgCislJSUgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Ugb3IgdmlzaXQgdGhlIFRocmlmdCBzaXRlIGF0OgorJSUlIGh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS90aHJpZnQvCisKKy1tb2R1bGUodEVybEFjY2VwdG9yKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RFcmxBY2NlcHRvci5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8zLCBhY2NlcHQvNF0pLgorCislJSUKKyUlJSBkZWZpbmUgYXR0cmlidXRlcworJSUlICdzdXBlcicgaXMgcmVxdWlyZWQgdW5sZXNzID9NT0RVTEUgaXMgYSBiYXNlIGNsYXNzCislJSUKKworP0RFRklORV9BVFRSKHN1cGVyKTsKKz9ERUZJTkVfQVRUUihzZXJ2ZXJQaWQpOworP0RFRklORV9BVFRSKHRyYW5zcG9ydEZhY3RvcnkpOworP0RFRklORV9BVFRSKHByb3RvY29sRmFjdG9yeSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRTZXJ2ZXJUcmFuc3BvcnQuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIoc2VydmVyUGlkKSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKHRyYW5zcG9ydEZhY3RvcnkpICsrICIsICIgKysKKyAgICA/Rk9STUFUX0FUVFIocHJvdG9jb2xGYWN0b3J5KS4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldyhTZXJ2ZXJQaWQsIFRGLCBQRikgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoKSwKKyAgICAjP01PRFVMRXtzdXBlciA9IFN1cGVyLCAKKwkgICAgIHNlcnZlclBpZCA9IFNlcnZlclBpZCwKKwkgICAgIHRyYW5zcG9ydEZhY3RvcnkgPSBURiwKKwkgICAgIHByb3RvY29sRmFjdG9yeSA9IFBGCisJICAgIH0uCisKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCithY2NlcHQoVGhpcywgTGlzdGVuU29ja2V0LCBHUCwgSGFuZGxlcikgLT4KKyAgICBpbzpmb3JtYXQoImFjY2VwdG9yIHN0YXJ0ZWR+biIsW10pLAorICAgIAorICAgIFNlcnZlclBpZCA9IG9vcDpnZXQoVGhpcywgc2VydmVyUGlkKSwKKyAgICAKKyAgICBjYXNlIGNhdGNoIGdlbl90Y3A6YWNjZXB0KExpc3RlblNvY2tldCkgb2YKKwl7b2ssIFNvY2tldH0gLT4KKwkgICAgCisJICAgID9DMChTZXJ2ZXJQaWQsIGVmZmVjdGZ1bF9uZXdfYWNjZXB0b3IpLCAlJSBjYXN0IHRvIGNyZWF0ZSBuZXcgYWNjZXB0b3IKKworCSAgICAlJSBzdGFydF9uZXcodFNvY2tldCwgW10pCisJICAgIENsaWVudCA9IG9vcDpzdGFydF9uZXcodFNvY2tldCwgW10pLAorCSAgICA/UjEoQ2xpZW50LCBlZmZlY3RmdWxfc2V0SGFuZGxlLCBTb2NrZXQpLCAlJSBUT0RPKGNwaXJvKTogc2hvdWxkIHdlIGp1c3QgbGV0IHRoaXMgYmUgYSBwYXJhbSB0byB0aGUgY29uc3RydWN0b3I/CisKKwkgICAgJSUgY3Bpcm86IE9QQVFVRSEhIFRyYW5zID0gQ2xpZW50CisJICAgIFRGICAgICAgPSBvb3A6Z2V0KFRoaXMsIHRyYW5zcG9ydEZhY3RvcnkpLAorCSAgICBUcmFucyAgID0gP0YxKFRGLCBnZXRUcmFuc3BvcnQsIENsaWVudCksIAorCisJICAgICUlIGNwaXJvOiBPUEFRVUUhISBQcm90ID0gc3RhcnRfbmV3KHRCaW5hcnlQcm90b2NvbCwgW1RyYW5zXSkKKwkgICAgUEYgICAgICA9IG9vcDpnZXQoVGhpcywgcHJvdG9jb2xGYWN0b3J5KSwKKwkgICAgUHJvdCAgICA9ID9GMShQRiwgZ2V0UHJvdG9jb2wsIFRyYW5zKSwgCisKKwkgICAgJSUgc3RhcnRfbmV3KCwgLi4uKQorCSAgICBQcm9jZXNzb3IgPSBvb3A6c3RhcnRfbmV3KHRFcmxQcm9jZXNzb3IsIFtHUCwgSGFuZGxlcl0pLCAlJSBUT0RPCisKKwkgICAgcmVjZWl2ZV9sb29wKFRoaXMsIFByb2Nlc3NvciwgUHJvdCwgUHJvdCksCisJICAgIAorCSAgICBleGl0KGFjY2VwdG9yX2RvbmUpOyAlJSBUT0RPKGNwaXJvKTogZ3JhY2U/CisKKwlFbHNlIC0+CisJICAgIFIgPSBsaXN0czpmbGF0dGVuKAorCSAgICAgIGlvX2xpYjpmb3JtYXQoImFjY2VwdCgpIGZhaWxlZDogfnAiLCBbRWxzZV0pKSwKKyAgICAKKwkgICAgZXhpdCh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldyhSKSkKKyAgICBlbmQuCisKK3JlY2VpdmVfbG9vcChUaGlzLCBQcm9jZXNzb3IsIElwcm90LCBPcHJvdCkgLT4KKyAgICBjYXNlIGNhdGNoID9SMihQcm9jZXNzb3IsIHByb2Nlc3MsIElwcm90LCBPcHJvdCkgb2YgCisJeydFWElUJywgWH0gLT4gCisJICAgIGlvOmZvcm1hdCgiQWNjZXB0b3I6IHdlIGdvdHRhIH5wfm4iLCBbWF0pOworCisJVmFsdWUgLT4KKwkgICAgaW86Zm9ybWF0KCJyZXF1ZXN0IHByb2Nlc3NlZDogcnY9fnB+biIsIFtWYWx1ZV0pLAorCSAgICByZWNlaXZlX2xvb3AoVGhpcywgUHJvY2Vzc29yLCBJcHJvdCwgT3Byb3QpCisgICAgZW5kLgorCislJSUKKyUlJSBlcnJvciBoYW5kbGVycworJSUlCisKKyUlIGVuZAorCislJSUgb2xkIGNvZGV6CisKKyUlIGVmZmVjdGZ1bF9saXN0ZW4oVGhpcykgLT4JCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICBQb3J0ID0gb29wOmdldChUaGlzLCBwb3J0KSwJCQkJCQkJICAgICAgICAlJQorJSUgICAgIE9wdGlvbnMgPSBbYmluYXJ5LCB7cGFja2V0LCAwfSwge2FjdGl2ZSwgZmFsc2V9XSwgJSB3YXMgW10JCQkgICAgICAgICUlCislJSAJCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICBjYXNlIGdlbl90Y3A6bGlzdGVuKFBvcnQsIE9wdGlvbnMpIG9mIAkJCQkJCSAgICAgICAgJSUKKyUlIAl7b2ssIExpc3RlblNvY2tldH0gLT4JCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAgVGhpczEgPSBvb3A6c2V0KFRoaXMsIGhhbmRsZSwgTGlzdGVuU29ja2V0KSwJCQkJICAgICAgICAlJQorJSUgCSAgICB7b2ssIFRoaXMxfQkJCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICAJCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAklIHtlcnJvciwgX30gLT4gCQkJCQkJCQkgICAgICAgICUlCislJSAJJSBUT0RPOiBubyBlcnJvciBoYW5kbGluZyBpbiBSdWJ5IHZlcnNpb24/CQkJCQkgICAgICAgICUlCislJSAgICAgZW5kLgkJCQkJCQkJCQkgICAgICAgICUlCislJSAJCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIGFjY2VwdChUaGlzKSAtPgkJCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICBjYXNlIG9vcDpnZXQoVGhpcywgaGFuZGxlKSBvZiAJCQkJCQkJICAgICAgICAlJQorJSUgCW5pbCAtPgkJCQkJCQkJCQkgICAgICAgICUlCislJSAJICAgIG5pbDsgJSBjcGlybzogc2ljIHRoZSBSdWJ5IGNvZGUJCQkJCQkgICAgICAgICUlCislJSAJCQkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAlIYW5kbGUgLT4JCQkJCQkJCQkgICAgICAgICUlCislJSAJICAgIGNhc2UgZ2VuX3RjcDphY2NlcHQoSGFuZGxlKSBvZgkJCQkJCSAgICAgICAgJSUKKyUlIAkJe29rLCBTb2NrfSAtPgkJCQkJCQkJICAgICAgICAlJQorJSUgCQkgICAgVHJhbnMgPSBvb3A6c3RhcnRfbmV3KHRTb2NrZXQsIFtdKSwJCQkJCSAgICAgICAgJSUKKyUlIAkJICAgID9SMShUcmFucywgZWZmZWN0ZnVsX3NldEhhbmRsZSwgU29jayksCQkJCSAgICAgICAgJSUKKyUlIAkJICAgIFRyYW5zCQkJCQkJCQkgICAgICAgICUlCislJSAJICAgICAgICAlIHtlcnJvciwgX30gLT4gCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICAgICAgICAgICAgICAlIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8JCQkJICAgICAgICAlJQorJSUgCSAgICBlbmQJCQkJCQkJCQkJICAgICAgICAlJQorJSUgICAgIGVuZC4JCQkJCQkJCQkJICAgICAgICAlJQorJSUgCQkJCQkJCQkJCQkgICAgICAgICUlCislJSBlZmZlY3RmdWxfY2xvc2UoVGhpcykgLT4JCQkJCQkJCSAgICAgICAgJSUKKyUlICAgICBjYXNlIG9vcDpnZXQoVGhpcywgaGFuZGxlKSBvZiAJCQkJCQkJICAgICAgICAlJQorJSUgCW5pbCAtPgkJCQkJCQkJCQkgICAgICAgICUlCislJSAJICAgIHtuaWwsIFRoaXN9OwkJCQkJCQkJICAgICAgICAlJQorJSUgCUhhbmRsZSAtPgkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkgICAgY2FzZSBnZW5fdGNwOmNsb3NlKEhhbmRsZSkgb2YgCQkJCQkJICAgICAgICAlJQorJSUgCQlvayAtPgkJCQkJCQkJCSAgICAgICAgJSUKKyUlIAkJICAgIHtvaywgVGhpc30gJSBjcGlybzogc2ljIHRoZSBSdWJ5IHZlcnNpb246IGRvbid0IHNldCBoYW5kbGUgdG8gbmlsCSAgICAgICAgJSUKKyUlIAkgICAgICAgICUge2Vycm9yLCBffSAtPiAJCQkJCQkJICAgICAgICAlJQorJSUgICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPwkJCQkgICAgICAgICUlCislJSAJICAgIGVuZAkJCQkJCQkJCQkgICAgICAgICUlCislJSAgICAgZW5kLgkJCQkJCQkJCQkgICAgICAgICUlCisKKworJSUlIHRlaCBpc2VydmV6CisKKyUlIC1tb2R1bGUoaXNlcnZlX3NvY2tldCkuCQkJCQkJCQkJCQkgJSUKKyUlIAkJCQkJCQkJCQkJCQkJICUlCislJSAtZXhwb3J0KFtzdGFydF9saW5rLzNdKS4JCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlIC1leHBvcnQoW2luaXQvMV0pLgkJCQkJCQkJCQkJCSAlJQorJSUgLWluY2x1ZGUoImlzZXJ2ZS5ocmwiKS4JCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlICVURVNUCQkJCQkJCQkJCQkJCSAlJQorJSUgLWV4cG9ydChbaGFuZGxlX2dldC8yXSkuCQkJCQkJCQkJCQkgJSUKKyUlIAkJCQkJCQkJCQkJCQkJICUlCislJSAtZGVmaW5lKG5vdF9pbXBsZW1lbnRlZF81MDEsICJIVFRQLzEuMSA1MDEgTm90IEltcGxlbWVudGVkXHJcblxyXG4iKS4JCQkJCSAlJQorJSUgLWRlZmluZShmb3JiaWRkZW5fNDAzLCAiSFRUUC8xLjEgNDAzIEZvcmJpZGRlblxyXG5cclxuIikuCQkJCQkJCSAlJQorJSUgLWRlZmluZShub3RfZm91bmRfNDA0LCAiSFRUUC8xLjEgNDA0IE5vdCBGb3VuZFxyXG5cclxuIikuCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlIC1yZWNvcmQoYywgIHtzb2NrLAkJCQkJCQkJCQkJCSAlJQorJSUgICAgICAgICAgICAgIHBvcnQsCQkJCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgcGVlcl9hZGRyLAkJCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgcGVlcl9wb3J0CQkJCQkJCQkJCQkgJSUKKyUlIAkgICAgIH0pLgkJCQkJCQkJCQkJCSAlJQorJSUgCQkJCQkJCQkJCQkJCQkgJSUKKyUlIC1kZWZpbmUoc2VydmVyX2lkbGVfdGltZW91dCwgMzAqMTAwMCkuCQkJCQkJCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorJSUgc3RhcnRfbGluayhMaXN0ZW5QaWQsIExpc3RlblNvY2tldCwgTGlzdGVuUG9ydCkgLT4JCQkJCQkJCSAlJQorJSUgICAgIHByb2NfbGliOnNwYXduX2xpbmsoP01PRFVMRSwgaW5pdCwgW3tMaXN0ZW5QaWQsIExpc3RlblNvY2tldCwgTGlzdGVuUG9ydH1dKS4JCQkJICUlCislJSAJCQkJCQkJCQkJCQkJCSAlJQorCisgIAorJSUgaW5pdCh7TGlzdGVuX3BpZCwgTGlzdGVuX3NvY2tldCwgTGlzdGVuUG9ydH0pIC0+CQkJCQkJCQkgJSUKKyUlICAgICAlIGVycm9yX2xvZ2dlcjppbmZvX21zZygiU29ja2V0IFN0YXJ0ZWR+biIpLAkJCQkJCQkJICUlCislJSAgICAgY2FzZSBjYXRjaCBnZW5fdGNwOmFjY2VwdChMaXN0ZW5fc29ja2V0KSBvZgkJCQkJCQkJICUlCislJSAJe29rLCBTb2NrZXR9IC0+CQkJCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAlJSBTZW5kIHRoZSBjYXN0IG1lc3NhZ2UgdG8gdGhlIGxpc3RlbmVyIHByb2Nlc3MgdG8gY3JlYXRlIGEgbmV3IGFjY2VwdG9yCQkJICUlCislJSAJICAgIGlzZXJ2ZV9zZXJ2ZXI6Y3JlYXRlKExpc3Rlbl9waWQsIHNlbGYoKSksCQkJCQkJCQkgJSUKKyUlIAkgICAge29rLCB7QWRkciwgUG9ydH19ID0gaW5ldDpwZWVybmFtZShTb2NrZXQpLAkJCQkJCQkJICUlCislJSAgICAgICAgICAgICBDb25uID0gI2N7c29jayA9IFNvY2tldCwJCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IExpc3RlblBvcnQsCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgICAgICAgICAgcGVlcl9hZGRyID0gQWRkciwJCQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgICAgICAgICAgICBwZWVyX3BvcnQgPSBQb3J0fSwJCQkJCQkJCQkgJSUKKyUlIAkgICAgcmVxdWVzdChDb25uLCAjcmVxe30pOyAlJSBKdW1wIHRvIHN0YXRlICdyZXF1ZXN0JwkJCQkJCQkgJSUKKyUlIAlFbHNlIC0+CQkJCQkJCQkJCQkJCSAlJQorJSUgCSAgICBlcnJvcl9sb2dnZXI6ZXJyb3JfcmVwb3J0KFt7YXBwbGljYXRpb24sIGlzZXJ2ZX0sCQkJCQkJCSAlJQorJSUgCQkJCSAgICAgICAiQWNjZXB0IGZhaWxlZCBlcnJvciIsCQkJCQkJCSAlJQorJSUgCQkJCSAgICAgICBpb19saWI6Zm9ybWF0KCJ+cCIsW0Vsc2VdKV0pLAkJCQkJCSAlJQorJSUgCSAgICBleGl0KHtlcnJvciwgYWNjZXB0X2ZhaWxlZH0pCQkJCQkJCQkJICUlCislJSAgICAgZW5kLgkJCQkJCQkJCQkJCQkgJSUKKyUlIAkJCQkJCQkJCQkJCQkJICUlCisKKyUlIHJlcXVlc3QoQ29ubiwgUmVxKSAtPgkJCQkJCQkJCQkJICUlCislJSAgICAgY2FzZSBnZW5fdGNwOnJlY3YoQ29ubiNjLnNvY2ssIDAsID9zZXJ2ZXJfaWRsZV90aW1lb3V0KSBvZgkJCQkJCSAlJQorJSUgICAgICAgICB7b2ssIHtodHRwX3JlcXVlc3QsTWV0aG9kLFBhdGgsVmVyc2lvbn19IC0+CQkJCQkJCQkgJSUKKyUlICAgICAgICAgICAgIGhlYWRlcnMoQ29ubiwgUmVxI3JlcXt2c24gPSBWZXJzaW9uLAkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gTWV0aG9kLAkJCQkJCQkJICUlCislJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpID0gUGF0aH0sIFtdKTsJCQkJCQkJCSAlJQorJSUgICAgICAgICB7ZXJyb3IsIHtodHRwX2Vycm9yLCAiXHJcbiJ9fSAtPgkJCQkJCQkJCSAlJQorJSUgCSAgICByZXF1ZXN0KENvbm4sIFJlcSk7CQkJCQkJCQkJCQkgJSUKKyUlIAl7ZXJyb3IsIHtodHRwX2Vycm9yLCAiXG4ifX0gLT4JCQkJCQkJCQkJICUlCislJSAgICAgICAgICAgICByZXF1ZXN0KENvbm4sIFJlcSk7CQkJCQkJCQkJCSAlJQorJSUgICAgICAgICB7dGNwX2Nsb3NlZCwgX1BvcnR9IC0+CQkJCQkJCQkJCSAlJQorJSUgICAgICAgICAgICAgZXJyb3JfbG9nZ2VyOmluZm9fbXNnKCJDbG9zZWQgY29ubmVjdGlvbjogfnAgfnB+biIsIFtDb25uI2MucGVlcl9hZGRyLCBDb25uI2MucGVlcl9wb3J0XSksCSAlJQorJSUgICAgICAgICAgICAgZXhpdChub3JtYWwpOwkJCQkJCQkJCQkJICUlCislJSAJX090aGVyIC0+CQkJCQkJCQkJCQkJICUlCislJSAJICAgIGV4aXQobm9ybWFsKQkJCQkJCQkJCQkJICUlCislJSAgICAgZW5kLgkJCQkJCQkJCQkJCQkgJSUKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNiZjkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5lcmwKQEAgLTAsMCArMSw5NiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0U2VydmVyU29ja2V0KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0aHJpZnQuaHJsIikuCistaW5jbHVkZSgidHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMSwgZWZmZWN0ZnVsX2xpc3Rlbi8xLCBhY2NlcHQvMSwgZWZmZWN0ZnVsX2Nsb3NlLzFdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIocG9ydCk7Cis/REVGSU5FX0FUVFIoaGFuZGxlKS4KKyAgIAorJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgdFNlcnZlclRyYW5zcG9ydC4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChUaGlzKSAtPgorICAgID9GT1JNQVRfQVRUUihwb3J0KSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKGhhbmRsZSkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoUG9ydCkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoKSwKKyAgICAjP01PRFVMRXtzdXBlciA9IFN1cGVyLCBwb3J0ID0gUG9ydCwgaGFuZGxlID0gbmlsfS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2VmZmVjdGZ1bF9saXN0ZW4oVGhpcykgLT4KKyAgICBQb3J0ID0gb29wOmdldChUaGlzLCBwb3J0KSwKKyAgICBPcHRpb25zID0gW2JpbmFyeSwge3BhY2tldCwgMH0sIHthY3RpdmUsIGZhbHNlfV0sICUgd2FzIFtdCisKKyAgICBjYXNlIGdlbl90Y3A6bGlzdGVuKFBvcnQsIE9wdGlvbnMpIG9mIAorCXtvaywgTGlzdGVuU29ja2V0fSAtPgorCSAgICBUaGlzMSA9IG9vcDpzZXQoVGhpcywgaGFuZGxlLCBMaXN0ZW5Tb2NrZXQpLAorCSAgICB7b2ssIFRoaXMxfQorICAgIAorCSUge2Vycm9yLCBffSAtPiAKKwklIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8KKyAgICBlbmQuCisKK2FjY2VwdChUaGlzKSAtPgorICAgIGNhc2Ugb29wOmdldChUaGlzLCBoYW5kbGUpIG9mIAorCW5pbCAtPgorCSAgICBuaWw7ICUgY3Bpcm86IHNpYyB0aGUgUnVieSBjb2RlCisKKwlIYW5kbGUgLT4KKwkgICAgY2FzZSBnZW5fdGNwOmFjY2VwdChIYW5kbGUpIG9mCisJCXtvaywgU29ja30gLT4KKwkJICAgIFRyYW5zID0gb29wOnN0YXJ0X25ldyh0U29ja2V0LCBbXSksCisJCSAgICA/UjEoVHJhbnMsIGVmZmVjdGZ1bF9zZXRIYW5kbGUsIFNvY2spLAorCQkgICAgVHJhbnMKKwkgICAgICAgICUge2Vycm9yLCBffSAtPiAKKyAgICAgICAgICAgICAgICAlIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8KKwkgICAgZW5kCisgICAgZW5kLgorCitlZmZlY3RmdWxfY2xvc2UoVGhpcykgLT4KKyAgICBjYXNlIG9vcDpnZXQoVGhpcywgaGFuZGxlKSBvZiAKKwluaWwgLT4KKwkgICAge25pbCwgVGhpc307CisJSGFuZGxlIC0+CisJICAgIGNhc2UgZ2VuX3RjcDpjbG9zZShIYW5kbGUpIG9mIAorCQlvayAtPgorCQkgICAge29rLCBUaGlzfSAlIGNwaXJvOiBzaWMgdGhlIFJ1YnkgdmVyc2lvbjogZG9uJ3Qgc2V0IGhhbmRsZSB0byBuaWwKKwkgICAgICAgICUge2Vycm9yLCBffSAtPiAKKyAgICAgICAgICAgICAgICAlIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8KKwkgICAgZW5kCisgICAgZW5kLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFNlcnZlclRyYW5zcG9ydC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U2VydmVyVHJhbnNwb3J0LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmM5Y2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFNlcnZlclRyYW5zcG9ydC5lcmwKQEAgLTAsMCArMSw1MiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0U2VydmVyVHJhbnNwb3J0KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFNlcnZlclRyYW5zcG9ydC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/QVRUUl9EVU1NWS4KKworJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldygpIC0+CisgICAgIz9NT0RVTEV7fS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKK2dldFRyYW5zcG9ydChfVGhpcywgVHJhbnMpIC0+CisgICAgVHJhbnMuCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U29ja2V0LmVybCBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RTb2NrZXQuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzA2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90U29ja2V0LmVybApAQCAtMCwwICsxLDEyNiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0U29ja2V0KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KKyUgLWluY2x1ZGUoInRyYW5zcG9ydC90VHJhbnNwb3J0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90U29ja2V0LmhybCIpLgorCistYmVoYXZpb3Iob29wKS4KKworLWV4cG9ydChbYXR0ci80LCBzdXBlci8wLCBpbnNwZWN0LzFdKS4KKworLWV4cG9ydChbbmV3LzAsIG5ldy8xLCBuZXcvMiwgCisJIGVmZmVjdGZ1bF9zZXRIYW5kbGUvMiwgZWZmZWN0ZnVsX29wZW4vMSwgCisJIGlzT3Blbi8xLCB3cml0ZS8yLCByZWFkLzIsIGVmZmVjdGZ1bF9jbG9zZS8xXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/REVGSU5FX0FUVFIoc3VwZXIpOworP0RFRklORV9BVFRSKGhvc3QpOworP0RFRklORV9BVFRSKHBvcnQpOworP0RFRklORV9BVFRSKGhhbmRsZSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRUcmFuc3BvcnQuCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIoaG9zdCkgKysgIiwgIiArKworICAgID9GT1JNQVRfQVRUUihwb3J0KSArKyAiLCAiICsrCisgICAgP0ZPUk1BVF9BVFRSKGhhbmRsZSkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoSG9zdCwgUG9ydCkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoKSwKKyAgICAjP01PRFVMRXtzdXBlcj1TdXBlciwgaG9zdD1Ib3N0LCBwb3J0PVBvcnQsIGhhbmRsZT1uaWx9LgorCituZXcoSG9zdCkgLT4KKyAgICBuZXcoSG9zdCwgOTA5MCkuCisKK25ldygpIC0+CisgICAgbmV3KCJsb2NhbGhvc3QiLCA5MDkwKS4KKyAgICAKKyUlJQorJSUlIGluc3RhbmNlIG1ldGhvZHMKKyUlJQorCitlZmZlY3RmdWxfc2V0SGFuZGxlKFRoaXMsIEhhbmRsZSkgLT4KKyAgICB7b2ssIG9vcDpzZXQoVGhpcywgaGFuZGxlLCBIYW5kbGUpfS4KKworZWZmZWN0ZnVsX29wZW4oVGhpcykgLT4gCisgICAgSG9zdCA9IG9vcDpnZXQoVGhpcywgaG9zdCksCisgICAgUG9ydCA9IG9vcDpnZXQoVGhpcywgcG9ydCksCisgICAgT3B0aW9ucyA9IFtdLAorCisgICAgY2FzZSBnZW5fdGNwOmNvbm5lY3QoSG9zdCwgUG9ydCwgT3B0aW9ucykgb2YKKwl7ZXJyb3IsIF99IC0+CisJICAgIGV4aXQodFRyYW5zcG9ydEV4Y2VwdGlvbjpuZXcoCisJCSAgID90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLAorCQkgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gIiArKyBIb3N0ICsrICI6IiArKyBQb3J0KQorCQkgKTsKKwl7b2ssIFNvY2tldH0gLT4KKwkgICAge29rLCBvb3A6c2V0KFRoaXMsIGhhbmRsZSwgU29ja2V0KX0KKyAgICBlbmQuCisKK2lzT3BlbihUaGlzKSAtPgorICAgIG9vcDpnZXQoVGhpcywgaGFuZGxlKSAvPSBuaWwuCisKK3dyaXRlKFRoaXMsIFN0cikgLT4KKyAgICBIYW5kbGUgPSBvb3A6Z2V0KFRoaXMsIGhhbmRsZSksCisgICAgVmFsID0gZ2VuX3RjcDpzZW5kKEhhbmRsZSwgU3RyKSwKKworICAgICUlIGlvOmZvcm1hdCgiV1JJVEUgfH5wfCh+cCl+biIsIFtTdHIsVmFsXSksCisgICAgCisgICAgY2FzZSBWYWwgb2YKKwl7ZXJyb3IsIF99IC0+CisJICAgIHRocm93KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAiaW4gd3JpdGUiKSk7CisJb2sgLT4KKwkgICAgb2sKKyAgICBlbmQuCisKK3JlYWQoVGhpcywgU3opIC0+CisgICAgSGFuZGxlID0gb29wOmdldChUaGlzLCBoYW5kbGUpLAorICAgIGNhc2UgZ2VuX3RjcDpyZWN2KEhhbmRsZSwgU3opIG9mCisJe29rLCBbXX0gLT4KKwkgICAgSG9zdCA9IG9vcDpnZXQoVGhpcywgaG9zdCksCisJICAgIFBvcnQgPSBvb3A6Z2V0KFRoaXMsIHBvcnQpLAorCSAgICB0aHJvdyh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldyg/dFRyYW5zcG9ydEV4Y2VwdGlvbl9VTktOT1dOLCAiVFNvY2tldDogQ291bGQgbm90IHJlYWQgIiArKyBTeiArKyAiYnl0ZXMgZnJvbSAiICsrIEhvc3QgKysgIjoiICsrIFBvcnQpKTsKKwl7b2ssIERhdGF9IC0+CisJICAgIERhdGE7CisJe2Vycm9yLCBFcnJvcn0gLT4KKwkgICAgaW86Zm9ybWF0KCJpbiB0U29ja2V0OnJlYWQvMjogZ2VuX3RjcDpyZWN2KH5wLCB+cCkgPT4ge2Vycm9yLCB+cH1+biIsCisJCSAgICAgIFtIYW5kbGUsIFN6LCBFcnJvcl0pLAorCSAgICBleGl0KHRUcmFuc3BvcnRFeGNlcHRpb246bmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAiaW4gdFNvY2tldDpyZWFkLzI6IGdlbl90Y3A6cmVjdiIpKQorCWVuZC4KKwkgICAgCitlZmZlY3RmdWxfY2xvc2UoVGhpcykgLT4KKyAgICBjYXNlIG9vcDpnZXQoVGhpcywgaGFuZGxlKSBvZgorCW5pbCAtPgorCSAgICB7b2ssIFRoaXN9OworCUhhbmRsZSAtPiAKKwkgICAgZ2VuX3RjcDpjbG9zZShIYW5kbGUpLAorCSAgICB7b2ssIG9vcDpzZXQoVGhpcywgaGFuZGxlLCBuaWwpfQorICAgIGVuZC4KKwpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFRyYW5zcG9ydC5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0LmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhNjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFRyYW5zcG9ydC5lcmwKQEAgLTAsMCArMSw4NiBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0VHJhbnNwb3J0KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydC5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBpc09wZW4vMSwgb3Blbi8xLCBjbG9zZS8xLCByZWFkLzIsIHJlYWRBbGwvMiwgZWZmZWN0ZnVsX3dyaXRlLzIsIGVmZmVjdGZ1bF9mbHVzaC8xXSkuCisKKyUlJQorJSUlIGRlZmluZSBhdHRyaWJ1dGVzCislJSUgJ3N1cGVyJyBpcyByZXF1aXJlZCB1bmxlc3MgP01PRFVMRSBpcyBhIGJhc2UgY2xhc3MKKyUlJQorCis/QVRUUl9EVU1NWS4KKworJSUlCislJSUgYmVoYXZpb3IgY2FsbGJhY2tzCislJSUKKyAKKyUlJSBzdXBlcigpIC0+IFN1cGVyTW9kdWxlID0gYXRvbSgpCislJSUgICAgICAgICAgICAgfCAgbm9uZQorCitzdXBlcigpIC0+CisgICAgbm9uZS4KKworJSUlIGluc3BlY3QoVGhpcykgLT4gc3RyaW5nKCkKKworaW5zcGVjdChfVGhpcykgLT4KKyAgICAiIi4KKworJSUlCislJSUgY2xhc3MgbWV0aG9kcworJSUlCisKK25ldygpIC0+CisgICAgIz9NT0RVTEV7fS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCisKKworCitpc09wZW4oX1RoaXMpIC0+IG5pbC4KK29wZW4oX1RoaXMpIC0+IG5pbC4KK2Nsb3NlKF9UaGlzKSAtPiBuaWwuCityZWFkKF9UaGlzLCBfU3opIC0+IG5pbC4KKworcmVhZEFsbChUaGlzLCBTeikgLT4KKyAgICByZWFkQWxsX2xvb3AoVGhpcywgU3osICIiLCAwKS4KKworcmVhZEFsbF9sb29wKFRoaXMsIFN6LCBCdWZmLCBIYXZlKSAtPgorICAgIGlmIAorCUhhdmUgPCBTeiAtPgorCSAgICBDaHVuayA9ID9MMShyZWFkLCBTeiAtIEhhdmUpLAorCisJICAgICUlIG1hbiBnZW5fdGNwOgorCSAgICAlJSBleGFjdGx5IExlbmd0aCBieXRlcyBhcmUgcmV0dXJuZWQsIG9yIGFuIGVycm9yOyAKKwkgICAgJSUgcG9zc2libHkgZGlzY2FyZGluZyBsZXNzIHRoYW4gTGVuZ3RoIGJ5dGVzIG9mIGRhdGEgd2hlbiAKKwkgICAgJSUgdGhlIHNvY2tldCBnZXRzIGNsb3NlZCBmcm9tIHRoZSBvdGhlciBzaWRlLgorCisJICAgICUlIGlvOmZvcm1hdCgiUkVBRCB8fnB8fm4iLCBbQ2h1bmtdKSwKKworCSAgICBIYXZlMSA9IEhhdmUgKyAoU3otSGF2ZSksICUgbGVuZ3RoKENodW5rKQorCSAgICBCdWZmMSA9IEJ1ZmYgKysgQ2h1bmssICUgVE9ETzogKysgZWZmaWNpZW5jeT8KKwkgICAgcmVhZEFsbF9sb29wKFRoaXMsIFN6LCBCdWZmMSwgSGF2ZTEpOworCXRydWUgLT4KKwkgICAgQnVmZgorICAgIGVuZC4KKworZWZmZWN0ZnVsX3dyaXRlKFRoaXMsIF9CdWYpIC0+CisgICAge25pbCwgVGhpc30uCisKK2VmZmVjdGZ1bF9mbHVzaChUaGlzKSAtPgorICAgIHtuaWwsIFRoaXN9LgpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2E3YWZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3NyYy90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5lcmwKQEAgLTAsMCArMSw1OCBAQAorJSUlIENvcHlyaWdodCAoYykgMjAwNy0gRmFjZWJvb2sKKyUlJSBEaXN0cmlidXRlZCB1bmRlciB0aGUgVGhyaWZ0IFNvZnR3YXJlIExpY2Vuc2UKKyUlJSAKKyUlJSBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSBvciB2aXNpdCB0aGUgVGhyaWZ0IHNpdGUgYXQ6CislJSUgaHR0cDovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL3RocmlmdC8KKworLW1vZHVsZSh0VHJhbnNwb3J0RXhjZXB0aW9uKS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKworLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5ocmwiKS4KKworLWJlaGF2aW9yKG9vcCkuCisKKy1leHBvcnQoW2F0dHIvNCwgc3VwZXIvMCwgaW5zcGVjdC8xXSkuCisKKy1leHBvcnQoW25ldy8wLCBuZXcvMSwgbmV3LzJdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9ERUZJTkVfQVRUUihzdXBlcik7Cis/REVGSU5FX0FUVFIodHlwZSkuCisgICAKKyUlJQorJSUlIGJlaGF2aW9yIGNhbGxiYWNrcworJSUlCisgCislJSUgc3VwZXIoKSAtPiBTdXBlck1vZHVsZSA9IGF0b20oKQorJSUlICAgICAgICAgICAgIHwgIG5vbmUKKworc3VwZXIoKSAtPgorICAgIHRFeGNlcHRpb24uCisKKyUlJSBpbnNwZWN0KFRoaXMpIC0+IHN0cmluZygpCisKK2luc3BlY3QoVGhpcykgLT4KKyAgICA/Rk9STUFUX0FUVFIodHlwZSkuCisKKyUlJQorJSUlIGNsYXNzIG1ldGhvZHMKKyUlJQorCituZXcoVHlwZSwgTWVzc2FnZSkgLT4KKyAgICBTdXBlciA9IChzdXBlcigpKTpuZXcoTWVzc2FnZSksCisgICAgIz9NT0RVTEV7c3VwZXI9U3VwZXIsIHR5cGU9VHlwZX0uCisKK25ldygpIC0+CisgICAgbmV3KD90VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sIHVuZGVmaW5lZCkuCituZXcoVHlwZSkgLT4KKyAgICBuZXcoVHlwZSwgdW5kZWZpbmVkKS4KKworJSUlCislJSUgaW5zdGFuY2UgbWV0aG9kcworJSUlCmRpZmYgLS1naXQgYS9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0RmFjdG9yeS5lcmwgYi9saWIvZXJsL2xpYi90aHJpZnQvc3JjL3RyYW5zcG9ydC90VHJhbnNwb3J0RmFjdG9yeS5lcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4Y2E2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC9zcmMvdHJhbnNwb3J0L3RUcmFuc3BvcnRGYWN0b3J5LmVybApAQCAtMCwwICsxLDUyIEBACislJSUgQ29weXJpZ2h0IChjKSAyMDA3LSBGYWNlYm9vaworJSUlIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUaHJpZnQgU29mdHdhcmUgTGljZW5zZQorJSUlIAorJSUlIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFIG9yIHZpc2l0IHRoZSBUaHJpZnQgc2l0ZSBhdDoKKyUlJSBodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vdGhyaWZ0LworCistbW9kdWxlKHRUcmFuc3BvcnRGYWN0b3J5KS4KKworLWluY2x1ZGUoIm9vcC5ocmwiKS4KKy1pbmNsdWRlKCJ0cmFuc3BvcnQvdFRyYW5zcG9ydEZhY3RvcnkuaHJsIikuCisKKy1iZWhhdmlvcihvb3ApLgorCistZXhwb3J0KFthdHRyLzQsIHN1cGVyLzAsIGluc3BlY3QvMV0pLgorCistZXhwb3J0KFtuZXcvMCwgZ2V0VHJhbnNwb3J0LzJdKS4KKworJSUlCislJSUgZGVmaW5lIGF0dHJpYnV0ZXMKKyUlJSAnc3VwZXInIGlzIHJlcXVpcmVkIHVubGVzcyA/TU9EVUxFIGlzIGEgYmFzZSBjbGFzcworJSUlCisKKz9BVFRSX0RVTU1ZLgorCislJSUKKyUlJSBiZWhhdmlvciBjYWxsYmFja3MKKyUlJQorIAorJSUlIHN1cGVyKCkgLT4gU3VwZXJNb2R1bGUgPSBhdG9tKCkKKyUlJSAgICAgICAgICAgICB8ICBub25lCisKK3N1cGVyKCkgLT4KKyAgICBub25lLgorCislJSUgaW5zcGVjdChUaGlzKSAtPiBzdHJpbmcoKQorCitpbnNwZWN0KF9UaGlzKSAtPgorICAgICIiLgorCislJSUKKyUlJSBjbGFzcyBtZXRob2RzCislJSUKKworbmV3KCkgLT4KKyAgICAjP01PRFVMRXt9LgorCislJSUKKyUlJSBpbnN0YW5jZSBtZXRob2RzCislJSUKKworZ2V0VHJhbnNwb3J0KF9UaGlzLCBUcmFucykgLT4KKyAgICBUcmFucy4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGliL3RocmlmdC90dXRvcmlhbCBiL2xpYi9lcmwvbGliL3RocmlmdC90dXRvcmlhbApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi45NzIwYTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3R1dG9yaWFsCkBAIC0wLDAgKzEgQEAKKy4uLy4uLy4uLy4uL3R1dG9yaWFsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3VzZXIgYi9saWIvZXJsL2xpYi90aHJpZnQvdXNlcgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5hNWFhYzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9saWIvdGhyaWZ0L3VzZXIKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vLi4vdHV0b3JpYWwvZXJsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2VybC9saWIvdGhyaWZ0L3Zzbi5tayBiL2xpYi9lcmwvbGliL3RocmlmdC92c24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliNDAwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvbGliL3RocmlmdC92c24ubWsKQEAgLTAsMCArMSBAQAorVEhSSUZUX1ZTTj0wLjEKZGlmZiAtLWdpdCBhL2xpYi9lcmwvbGljZW5jZS50eHQgYi9saWIvZXJsL2xpY2VuY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTI5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL2xpY2VuY2UudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1R1ZSBPY3QgMjQgMTI6Mjg6NDQgQ0RUIDIwMDYKKworQ29weXJpZ2h0IChjKSA8MjAwNj4gPE1hcnRpbiBKLiBMb2dhbiwgRXJsd2FyZT4gCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIChPVFAgQmFzZSwgZnNsaWIsIEcuQS5TKSAgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byAKK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIAorb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIAorc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCAKK0lOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIAorUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCAKK0hPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiAKK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSAKK09SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL01ha2VmaWxlIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjc0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSAuLi9idWlsZC9jb2xvcnMubWsKKworTU9EVUxFUz0kKHNoZWxsIGxzIC4gfCBncmVwICJbXihNYWtlZmlsZSldIikKKworYWxsIGNsZWFuOgorCUBmb3IgZGlyIGluICQoTU9EVUxFUyk7IGRvIFwKKwkJKGNkICQkZGlyOyBpZiBbIC1lICJTS0lQIiBdOyB0aGVuICBlY2hvICQke01ZX0xSRUQ6LSQoTFJFRCl9InNraXBwaW5nIFwibWFrZSAkQFwiIGZvciAkJGRpciI7IGVsc2UgJHtNQUtFfSAkQDsgZmkpOyBcCisJCWlmIFsgIiQkPyIgLW5lICIwIiBdOyB0aGVuIEVSUk9SPSQkPzsgZWNobyAiRXJyb3IgQ29kZSAkJEVSUk9SIjsgZXhpdCAkJEVSUk9SOyBmaTsgXAorCQllY2hvIC1uICQoT0ZGKSQoTk9fQ09MT1IpOyBcCisJZG9uZQpkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvTWFrZWZpbGUgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDM1OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvTWFrZWZpbGUKQEAgLTAsMCArMSwyOTggQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIGZpbGUgZm9yIGNyZWF0aW5nIGFuIG90cCByZWxlYXNlLiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBCYXNlbmFtZSBvZiB0aGlzIHJlbGVhc2UuCisjIworUkVMUz0kKHNoZWxsIGJhc2VuYW1lIGBwd2RgKQorQVBQX05BTUU9JChzaGVsbCBlY2hvICQoUkVMUykgfCBzZWQgcy9fcmVsJCQvLykKKworaW5jbHVkZSAuLi8uLi9idWlsZC9vdHAubWsKKworaW5jbHVkZSAuL3Zzbi5taworCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvdGFyZ2V0Lm1rCisjaW5jbHVkZSAkKEVSTF9UT1ApL21ha2UvJChUQVJHRVQpL290cC5taworCitVU1JfTElCUEFUSD0uLi8uLi9saWIKK0lOU1RBTExfRElSPS91c3IvbG9jYWwvbGliCitBQlNfVVNFUl9MSUJQQVRIPSQoc2hlbGwgY2QgLi4vLi4vbGliO3B3ZCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENSRUFURSBESVIgU1RSVUNUVVJFIEhFUkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIVERPQ1M9JCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLmh0bWwpIFwKKwkkKHdpbGRjYXJkICQoQUJTX1VTRVJfTElCUEFUSCkvJChBUFBfTkFNRSkvaHRkb2NzLyouaHRtKSBcCisJJCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLnlhd3MpCitCVUlMRF9GSUxFUz1mc19ib290X3NtaXRoZS5iZWFtIGZzX2xpc3RzLmJlYW0gZnNfbGliLmJlYW0KKworTE9DQUxfRElSPWxvY2FsCisjTE9DQUxfRElSPSQoc2hlbGwgY2F0ICQoUkVMUykucmVsLnNyYyB8Z3JlcCAtbSAxICckKEFQUF9OQU1FKScgfGF3ayAtRiAnIicgJ3twcmludGYgIiVzLSVzIiwgJCQyLCQkNH0nKQorCitESVJfU1RSVUNUVVJFPSBcCisJJChMT0NBTF9ESVIpIFwKKwkkKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTikgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyAKKworUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFPSBcCisJJChSRUxTKSBcCisJJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvc3RhZ2UgXAorCSQoUkVMUykvbG9nLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3IFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgXAorCSQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTQ1JJUFRfQU5EX0JPT1RfRklMRVM9IFwKKwkkKFJFTFMpLnNjcmlwdCBcCisJJChSRUxTKS5ib290CisKK0xPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUz0gXAorCSQoTE9DQUxfRElSKS8kKFJFTFMpLnNjcmlwdCBcCisJJChMT0NBTF9ESVIpLyQoUkVMUykuYm9vdAorCitMT0NBTF9IVFRQX0NPTkY9IFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlcyAgCisKK1BST0RVQ1RJT05fSFRUUF9DT05GPSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXMgIAorCitMT0NBTF9UQVJHRVRfRklMRVM9JChMT0NBTF9IVFRQX0NPTkYpICQoTE9DQUxfRElSKS8kKFJFTFMpLmNvbmZpZyAkKExPQ0FMX1NDUklQVF9BTkRfQk9PVF9GSUxFUykKKworTE9DQUxfVEFSR0VUUz0kKExPQ0FMX0RJUikvJChSRUxTKS5zaCB2c25pdCAkKExPQ0FMX1RBUkdFVF9GSUxFUykgCisKK1BST0RVQ1RJT05fVEFSR0VUUz0kKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgICAgICAgJChSRUxTKS9saWIgXAorICAgICAgICAgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjIFwKKwkgICAgICAgICAgICQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYyBcCisJCSAgICQoUkVMUykvc3RhZ2UvJChSRUxTKS5zaC5zcmMgIFwKKwkJICAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIFwKKwkJICAgJChSRUxTKS9pbnN0YWxsLnNoIFwKKwkJICAgJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZSAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbGwgZGVidWcgb3B0IGluc3RyIHNjcmlwdDogICQoRElSX1NUUlVDVFVSRSkgJChMT0NBTF9UQVJHRVRTKSAkKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSkgJChQUk9EVUNUSU9OX1RBUkdFVFMpCisJQGVjaG8gJChIVERPQ1MpCisKK2luc3RhbGw6ICBzdGFnZQorCit0YXI6ICQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3oKKworJChESVJfU1RSVUNUVVJFKToKKwlta2RpciAtcCAkQAorCiskKFBST0RVQ1RJT05fRElSX1NUUlVDVFVSRSk6CisJbWtkaXIgLXAgJEAKKwkKK2NsZWFuOgorCSQoUk0pICQoUkVMX1NDUklQVFMpICQoVEFSR0VUX0ZJTEVTKQorCSQoUk0pIC1yICQoTE9DQUxfRElSKSAkKFBST0ROX0RJUikKKwkkKFJNKSAkKFJFTFMpLnJlbAorCSQoUk0pIC1yICQoUkVMUykKKwkkKFJNKSAkKFJFTFMpKi50Z3oKKwkkKFJNKSAkKFJFTFMpLnJlbC5zcmMudG1wCisJJChSTSkgJChTQ1JJUFRfQU5EX0JPT1RfRklMRVMpCisKK2RvY3M6CisJCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgTE9DQUwgTU9ERQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIGxvY2FsIG1vZGUKKyQoTE9DQUxfRElSKS8kKFJFTFMpLnNoOiAKKwlAZWNobyAnIyEvYmluL3NoJyA+ICRACisJQGVjaG8gImNkICQoQ1VSRElSKS8kKExPQ0FMX0RJUikiID4+ICRACisJQGVjaG8gImVybCAtbmFtZSAkJHtVU0VSfV8kKFJFTFMpIC1ib290ICQoUkVMUykgLWNvbmZpZyAkKFJFTFMpLmNvbmZpZyBcJCRAIiA+PiAkQAorCWNobW9kICt4ICRACisJQGVjaG8KKwlAZWNobyAiPT09PSBTdGFydCBsb2NhbCBub2RlIHdpdGggXCJzaCAkQFwiID09PT0iCisJQGVjaG8KKworIyBDcmVhdGUgdGhlIGNvbmZpZyBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpLyQoUkVMUykuY29uZmlnOiAkKFJFTFMpLmNvbmZpZy5zcmMKKwlzZWQgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVWQVJfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pOycgXAorICAgICAgICAgICAgLWUgJ3M7JVJFTFMlOyQoUkVMUyk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUhPTUUlOyQoSE9NRSk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUJST0FEQ0FTVF9BRERSRVNTJTskKEJST0FEQ0FTVF9BRERSRVNTKTtnJyBcCisgICAgICAgICAgICAtZSAnczslQ09OVEFDVF9OT0RFJTskKENPTlRBQ1RfTk9ERSk7ZycgXAorCSAgICAtZSAiczslSE9TVE5BTUUlO2Bob3N0bmFtZSAtLWxvbmdgOyIgXAorICAgICAgICAgICAgLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKwkgICAgLWUgJ3M7JUFQUF9WRVJTSU9OJTskKEFQUF9WRVJTSU9OKTtnJyBcCisgICAgICAgICAgICAgJDwgPiAkQAorCisjIENyZWF0ZSB0aGUgaHR0cGQgY29uZiBmaWxlIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZjogeWF3cy5jb25mLnNyYworCXNlZCAtZSAnczslVkFSX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKTsnIFwKKwkgICAgLWUgJ3M7JUxPR19PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvbG9nLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVIVERPQ19ST09UJTskKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jczsnIFwKKyAgICAgICAgICAgIC1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisgICAgICAgICAgICAtZSAnczslUkVMUyU7JChSRUxTKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVVU0VSJTskKFVTRVIpOycgXAorCSAgICAtZSAnczslSFRET0NfUk9PVCU7JChBQlNfVVNFUl9MSUJQQVRIKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVNSE9TVCU7JChNSE9TVCk7JyBcCisgICAgICAgICAgICAkPCA+ICRACisKKyMgQ3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgbG9jYWwgbW9kZS4KK3Zzbml0OiAkKFJFTFMpLnJlbC5zcmMgCisJc2VkIC1lICdzOyVSRUxfVlNOJTskKFJFTF9WU04pOycgXAorCSAgICAgICAkPCA+ICQ8LnRtcAorCisjIENyZWF0ZSBhbmQgcG9zaXRpb24gc2NyaXB0IGFuZCBib290IGZpbGVzIGZvciBsb2NhbCBtb2RlLgorJChMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVMpOiAKKwlAIGVybCAtcHogJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbiBcCisJICAgICAgLW5vc2hlbGwgXAorCSAgICAgIC1zIGZzX2xpYiBzX2FwcGx5IGZzX2Jvb3Rfc21pdGhlIG1ha2Vfc2NyaXB0X2FuZF9ib290ICJbXCIkKEVSTF9SVU5fVE9QKS8qXCIsICBcIiQoVVNSX0xJQlBBVEgpXCJdLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJCQoYmFzZW5hbWUgYHB3ZGApIi5yZWwuc3JjLnRtcFwiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbbG9jYWxdLiAiIFwKKwkgICAgICAtcyBpbml0IHN0b3AKKwljcCAkKFNDUklQVF9BTkRfQk9PVF9GSUxFUykgJChMT0NBTF9ESVIpLyAKKworJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXM6IC4uLy4uL2J1aWxkL21pbWUudHlwZXMKKwljcCAkPCAkQAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVEFSR0VUUyBGT1IgUFJPRFVDVElPTiBNT0RFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQoUkVMUykvbGliOiAKKwkjIEZvciBzb21lIHJlYXNvbiB0aGlzIHdpbGwgbm90IGhhcHBlbiBpZiBhZGRlZCB0byBQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUKKwlta2RpciAkQAorCUAgZXJsIC1weiAkKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgXAorCSAgICAgIC1ub3NoZWxsIFwKKwkgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBzdGFnZV9mcm9tX3JlbHNyYyAiW1wiJChVU1JfTElCUEFUSClcIl0uICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiQkKGJhc2VuYW1lIGBwd2RgKSIucmVsLnNyY1wiLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkQFwiIi4gIiBcCisJICAgICAgLXMgaW5pdCBzdG9wCisKKyMgTW92ZSB0aGUgaHRkb2NzIGZyb20gdGhlIGxvY2FsIGFwcHMgdG8gdGhlIHByb2R1Y3Rpb24gaHRkb2Mgcm9vdCBkaXJlY3RvcnkuCiskKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MvOiAkKEhURE9DUykKKwlAbWtkaXIgLXAgJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzOyBcCisJZm9yIHggaW4gJChIVERPQ1MpO2RvIFwKKyAJCWNwICAkJHggJEA7IFwKKwlkb25lCisKKyMgc3RhcnR1cCBzY3JpcHQgZm9yIHByb2R1Y3Rpb24gbW9kZQorJChSRUxTKS9zdGFnZS8kKFJFTFMpLnNoLnNyYzogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICJjZCAlSU5TVEFMTF9ESVIlLyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pIiA+PiAkQAorCUBlY2hvICJlcmwgLW5hbWUgJChSRUxTKSAtYm9vdCAkKFJFTFMpIC1jb25maWcgJChSRUxTKS5jb25maWcgLWRldGFjaGVkIFwkJEAiID4+ICRACisJY2htb2QgK3ggJEAKKworJChSRUxTKS9idWlsZC8kKFJFTF9WU04pOiAgJChVU1JfTElCUEFUSCkvZnNsaWIvZWJpbgorCW1rZGlyIC1wICQoUkVMUykvYnVpbGQvJChSRUxfVlNOKSAKKwljcCAkPC9mc19ib290X3NtaXRoZS5iZWFtICRACisJY3AgJDwvZnNfbGliLmJlYW0gJEAKKwljcCAkPC9mc19saXN0cy5iZWFtICRACisKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5yZWwuc3JjOiAkKFJFTFMpLnJlbC5zcmMudG1wCisJY3AgJDwgJEAKKworJChSRUxTKS9zdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmM6ICQoUkVMUykuY29uZmlnLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvc3RhZ2UveWF3cy5jb25mLnNyYzogeWF3cy5jb25mLnNyYworCWNwICQ8ICRACisKKyQoUkVMUykvaW5zdGFsbC5zaDogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImlmIFsgXCQkIyAtZXEgMSBdO3RoZW4iID4+ICRACisJQGVjaG8gIiAgICBJTlNUQUxMX0RJUj1cJCQxOyIgPj4gJEAKKwlAZWNobyAiZWxzZSIgPj4gJEAKKwlAZWNobyAiICAgIElOU1RBTExfRElSPSQoSU5TVEFMTF9ESVIpOyIgPj4gJEAKKwlAZWNobyAiZmkiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiZnVuY3Rpb24gbXVuZ2UoKSB7IiA+PiAkQAorCUBlY2hvICIgICAgc2VkIC1lIFwiczslTE9HX09UUCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS9sb2cvJChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVWQVJfT1RQJTtcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3Zhci8kKFJFTF9WU04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVJFTFMlOyQoUkVMUyk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslUkVMX1ZTTiU7JChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVVU0VSJTskJFVTRVI7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSFRET0NfUk9PVCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JU1IT1NUJTtcYGhvc3RuYW1lXGA7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQlJPQURDQVNUX0FERFJFU1MlOyQoQlJPQURDQVNUX0FERFJFU1MpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUlOU1RBTExfRElSJTtcJCRJTlNUQUxMX0RJUjtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVDT05UQUNUX05PREUlOyQoQ09OVEFDVF9OT0RFKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVIT1NUTkFNRSU7XGBob3N0bmFtZSAtLWxvbmdcYDtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQVBQX1ZFUlNJT04lOyQoQVBQX1ZFUlNJT04pO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAnICAgICAgICAkJDEgPiAkJDInID4+ICRACisJQGVjaG8gIn0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UveWF3cy5jb25mLnNyYyB2YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmY7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLmNvbmZpZy5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuY29uZmlnOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5zaC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICJtdW5nZSBzdGFnZS8kKFJFTFMpLnJlbC5zcmMgcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykucmVsOyIgPj4gJEAKKwlAZWNobyAiY2htb2QgK3ggcmVsZWFzZS8kKFJFTF9WU04pLyQoUkVMUykuc2g7IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImNkIC4uOyIgPj4gJEAKKwlAZWNobyAiZmluZCAkKFJFTFMpIHwgY3BpbyAtbyA+IFwkJElOU1RBTExfRElSLyQoUkVMUykuY3BpbzsiID4+ICRACisJQGVjaG8gImNkIC07IiA+PiAkQAorCUBlY2hvICJjZCBcJCRJTlNUQUxMX0RJUjsgIiA+PiAkQAorCUBlY2hvICJlY2hvIC1uIFwiVW5wYWNrZWQ6IFwiIiA+PiAkQAorCUBlY2hvICJjcGlvIC11aWQgPCAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICJybSAkKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImVjaG8gXCJwd2QgaXMgXGBwd2RcYFwiOyIgPj4gJEAKKwlAZWNobyAiY2QgJChSRUxTKTsiID4+ICRACisJQGVjaG8gIiBlcmwgLXB6IGJ1aWxkLyQoUkVMX1ZTTikgXFwiID4+ICRACisJQGVjaG8gIiAgICAgIC1ub3NoZWxsIFxcIiA+PiAkQAorCUBlY2hvIC1uICIgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBtYWtlX3NjcmlwdF9hbmRfYm9vdCBcIltcXFwiJChFUkxfUlVOX1RPUCkvKlxcXCIsICBcXFwibGliL1xcXCJdLiBcIiAiID4+ICRACisJQGVjaG8gLW4gICAgICAgICJcIlxcXCJzdGFnZS8kJChiYXNlbmFtZSBgcHdkYCkucmVsLnNyY1xcXCIuIFwiICIgPj4gJEAKKwlAZWNobyAtbiAgICAgICAgIlwiW2xvY2FsXS4gXCIgIiA+PiAkQAorCUBlY2hvICAgICAgICAgICAiLXMgaW5pdCBzdG9wIHwgZWdyZXAgJyp0ZXJtaW5hdGUqfEVSUk9SJyIgPj4gJEAKKwlAZWNobyAiaWYgWyBcJCQ/IC1lcSAwIF07IHRoZW4iID4+ICRACisJQGVjaG8gImVjaG8gXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIlNUQUdFIEZBSUxVUkUgXCQkPyAgLSBTaWxlbmNlIHRoZSBkaXNjb3JkLlwiOyIgPj4gJEAKKwlAZWNobyAiZWNobyBcIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XCI7IiA+PiAkQAorCUBlY2hvICJleGl0IDE7IiA+PiAkQAorCUBlY2hvICJmaSIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJtdiAkKFJFTFMpLnJlbCAkKFJFTFMpLnNjcmlwdCAkKFJFTFMpLmJvb3QgcmVsZWFzZS8kKFJFTF9WU04pOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJybSAtciBzdGFnZTsiID4+ICRACisJQGVjaG8gInJtIC1yIGJ1aWxkOyIgPj4gJEAKKwlAZWNobyAiY2QgLTsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNobW9kIC1SIDc3NSAkKFJFTFMpOyAiID4+ICRACisJQGVjaG8gImNkIC0iID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAicm0gLWYgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7IiA+PiAkQAorCUBlY2hvICJsbiAtcyBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyIgPj4gJEAKKwlAZWNobyAiY2hncnAgLVIgZXJ0cyAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsgIiA+PiAkQAorCUBlY2hvICJjaG1vZCAtUiA3NzUgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7ICIgPj4gJEAKKwlAZWNobyAicm0gXCQkSU5TVEFMTF9ESVIvJChSRUxTKS9pbnN0YWxsLnNoOyIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiAkJCdcZVswOzMybSciID4+ICRACisJQGVjaG8gImVjaG8gXCIkKEFQUF9OQU1FKSBpbnN0YWxsYXRpb24gdG8gXCQkSU5TVEFMTF9ESVIgY29tcGxldGUuXCIiID4+ICRACisJQGVjaG8gImVjaG8gLW4gJCQnXGVbMG0nIiA+PiAkQAorCWNobW9kICt4ICRACisJCQorCitzdGFnZTogJChSRUxTKQorCWNkICQoUkVMUyk7IFwKKwkuL2luc3RhbGwuc2g7IFwKKwljZCAtCisKKyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYvbWltZS50eXBlczogLi4vLi4vYnVpbGQvbWltZS50eXBlcworCWNwICQ8ICRACisKKyQoUkVMUyktJChMT0NBVElPTiktJChSRUxfVlNOKS50Z3o6ICQoUkVMUykKKwl0YXIgLXpjdmYgJEAgJDwKKworJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvY2xlYW5fcmVsZWFzZTogLi4vLi4vdG9vbHMvdXRpbGl0aWVzL2NsZWFuX3JlbGVhc2UKKwljcCAkPCAkQAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC90aHJpZnRfcmVsLmNvbmZpZyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDkxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC90aHJpZnRfcmVsLmNvbmZpZwpAQCAtMCwwICsxLDI2IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQorJSUlIFBhcmFtZXRlciBzZXR0aW5ncyBmb3IgYXBwcyBvbiB0aHJpZnQKKyUlJSBXYXJuaW5nIC0gdGhpcyBjb25maWcgZmlsZSAqbXVzdCogZW5kIHdpdGggPGRvdD48d2hpdGVzcGFjZT4KKworJSUgd3JpdGUgbG9nIGZpbGVzIHRvIHNhc2xfZGlyCitbCisge3Nhc2wsCisgIFsKKyAgIHtzYXNsX2Vycm9yX2xvZ2dlciwge2ZpbGUsICIvZGF0YS91c2Vycy9jcGlyby90aHJpZnQvdHJ1bmsvbGliL2VybC9yZWxlYXNlL3RocmlmdF9yZWwvbG9jYWwvbG9nLzEuMC9zYXNsX2xvZyJ9fQorICBdfSwKKworCisge2dhcywKKyAgWworICAge21vZF9zcGVjcywgW3tlbHdyYXAsIHtmc19lbHdyYXBfaCwgc3RhcnRfbGlua319XX0sCisKKyAgICUgZWx3cmFwIGNvbmZpZy4KKyAgIHtlcnJfbG9nLCAiL2RhdGEvdXNlcnMvY3Bpcm8vdGhyaWZ0L3RydW5rL2xpYi9lcmwvcmVsZWFzZS90aHJpZnRfcmVsL2xvY2FsL2xvZy8xLjAvZXJyX2xvZyJ9LAorICAge2Vycl9sb2dfd3JhcF9pbmZvLCB7e2Vyciw1MDAwMDAwLDEwfSx7c2FzbCw1MDAwMDAwLDEwfX19LCAKKyAgIHtlcnJfbG9nX3R0eSwgdHJ1ZX0gJSBMb2cgdG8gdGhlIHNjcmVlbgorICAgXX0sCisKKyB7dGhyaWZ0LAorICBbCisgIF19CitdLiAKZGlmZiAtLWdpdCBhL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL2xvY2FsL3RocmlmdF9yZWwuc2ggYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC90aHJpZnRfcmVsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzMGE0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC90aHJpZnRfcmVsLnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitjZCAvZGF0YS91c2Vycy9jcGlyby90aHJpZnQvdHJ1bmsvbGliL2VybC9yZWxlYXNlL3RocmlmdF9yZWwvbG9jYWwKK2VybCAtbmFtZSBjcGlyb190aHJpZnRfcmVsIC1ib290IHRocmlmdF9yZWwgLWNvbmZpZyB0aHJpZnRfcmVsLmNvbmZpZyAkQApkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdmFyLzEuMC93d3cvY29uZi9taW1lLnR5cGVzIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdmFyLzEuMC93d3cvY29uZi9taW1lLnR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZTNjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL21pbWUudHlwZXMKQEAgLTAsMCArMSw5OCBAQAorCithcHBsaWNhdGlvbi9hY3RpdmVtZXNzYWdlCithcHBsaWNhdGlvbi9hbmRyZXctaW5zZXQKK2FwcGxpY2F0aW9uL2FwcGxlZmlsZQorYXBwbGljYXRpb24vYXRvbWljbWFpbAorYXBwbGljYXRpb24vZGNhLXJmdAorYXBwbGljYXRpb24vZGVjLWR4CithcHBsaWNhdGlvbi9tYWMtYmluaGV4NDAJaHF4CithcHBsaWNhdGlvbi9tYWMtY29tcGFjdHBybwljcHQKK2FwcGxpY2F0aW9uL21hY3dyaXRlaWkKK2FwcGxpY2F0aW9uL21zd29yZAkJZG9jCithcHBsaWNhdGlvbi9uZXdzLW1lc3NhZ2UtaWQKK2FwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uCithcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0JYmluIGRtcyBsaGEgbHpoIGV4ZSBjbGFzcworYXBwbGljYXRpb24vb2RhCQkJb2RhCithcHBsaWNhdGlvbi9wZGYJCQlwZGYKK2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQJCWFpIGVwcyBwcworYXBwbGljYXRpb24vcG93ZXJwb2ludAkJcHB0CithcHBsaWNhdGlvbi9yZW1vdGUtcHJpbnRpbmcKK2FwcGxpY2F0aW9uL3J0ZgkJCXJ0ZgorYXBwbGljYXRpb24vc2xhdGUKK2FwcGxpY2F0aW9uL3dpdGEKK2FwcGxpY2F0aW9uL3dvcmRwZXJmZWN0NS4xCithcHBsaWNhdGlvbi94LWJjcGlvCQliY3BpbworYXBwbGljYXRpb24veC1jZGxpbmsJCXZjZAorYXBwbGljYXRpb24veC1jb21wcmVzcwkJWgorYXBwbGljYXRpb24veC1jcGlvCQljcGlvCithcHBsaWNhdGlvbi94LWNzaAkJY3NoCithcHBsaWNhdGlvbi94LWRpcmVjdG9yCQlkY3IgZGlyIGR4cgorYXBwbGljYXRpb24veC1kdmkJCWR2aQorYXBwbGljYXRpb24veC1ndGFyCQlndGFyCithcHBsaWNhdGlvbi94LWd6aXAJCWd6CithcHBsaWNhdGlvbi94LWhkZgkJaGRmCithcHBsaWNhdGlvbi94LWh0dHBkLWNnaQkJY2dpCithcHBsaWNhdGlvbi94LWtvYW4JCXNrcCBza2Qgc2t0IHNrbQorYXBwbGljYXRpb24veC1sYXRleAkJbGF0ZXgKK2FwcGxpY2F0aW9uL3gtbWlmCQltaWYKK2FwcGxpY2F0aW9uL3gtbmV0Y2RmCQluYyBjZGYKK2FwcGxpY2F0aW9uL3gtc2gJCXNoCithcHBsaWNhdGlvbi94LXNoYXIJCXNoYXIKK2FwcGxpY2F0aW9uL3gtc3R1ZmZpdAkJc2l0CithcHBsaWNhdGlvbi94LXN2NGNwaW8JCXN2NGNwaW8KK2FwcGxpY2F0aW9uL3gtc3Y0Y3JjCQlzdjRjcmMKK2FwcGxpY2F0aW9uL3gtdGFyCQl0YXIKK2FwcGxpY2F0aW9uL3gtdGNsCQl0Y2wKK2FwcGxpY2F0aW9uL3gtdGV4CQl0ZXgKK2FwcGxpY2F0aW9uL3gtdGV4aW5mbwkJdGV4aW5mbyB0ZXhpCithcHBsaWNhdGlvbi94LXRyb2ZmCQl0IHRyIHJvZmYKK2FwcGxpY2F0aW9uL3gtdHJvZmYtbWFuCQltYW4KK2FwcGxpY2F0aW9uL3gtdHJvZmYtbWUJCW1lCithcHBsaWNhdGlvbi94LXRyb2ZmLW1zCQltcworYXBwbGljYXRpb24veC11c3RhcgkJdXN0YXIKK2FwcGxpY2F0aW9uL3gtd2Fpcy1zb3VyY2UJc3JjCithcHBsaWNhdGlvbi96aXAJCQl6aXAKK2F1ZGlvL2Jhc2ljCQkJYXUgc25kCithdWRpby9tcGVnCQkJbXBnYSBtcDIKK2F1ZGlvL3gtYWlmZgkJCWFpZiBhaWZmIGFpZmMKK2F1ZGlvL3gtcG4tcmVhbGF1ZGlvCQlyYW0KK2F1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbglycG0KK2F1ZGlvL3gtcmVhbGF1ZGlvCQlyYQorYXVkaW8veC13YXYJCQl3YXYKK2NoZW1pY2FsL3gtcGRiCQkJcGRiIHh5egoraW1hZ2UvZ2lmCQkJZ2lmCitpbWFnZS9pZWYJCQlpZWYKK2ltYWdlL2pwZWcJCQlqcGVnIGpwZyBqcGUKK2ltYWdlL3BuZwkJCXBuZworaW1hZ2UvdGlmZgkJCXRpZmYgdGlmCitpbWFnZS94LWNtdS1yYXN0ZXIJCXJhcworaW1hZ2UveC1wb3J0YWJsZS1hbnltYXAJCXBubQoraW1hZ2UveC1wb3J0YWJsZS1iaXRtYXAJCXBibQoraW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwCXBnbQoraW1hZ2UveC1wb3J0YWJsZS1waXhtYXAJCXBwbQoraW1hZ2UveC1yZ2IJCQlyZ2IKK2ltYWdlL3gteGJpdG1hcAkJCXhibQoraW1hZ2UveC14cGl4bWFwCQkJeHBtCitpbWFnZS94LXh3aW5kb3dkdW1wCQl4d2QKK21lc3NhZ2UvZXh0ZXJuYWwtYm9keQorbWVzc2FnZS9uZXdzCittZXNzYWdlL3BhcnRpYWwKK21lc3NhZ2UvcmZjODIyCittdWx0aXBhcnQvYWx0ZXJuYXRpdmUKK211bHRpcGFydC9hcHBsZWRvdWJsZQorbXVsdGlwYXJ0L2RpZ2VzdAorbXVsdGlwYXJ0L21peGVkCittdWx0aXBhcnQvcGFyYWxsZWwKK3RleHQvaHRtbAkJCWh0bWwgaHRtCit0ZXh0L3gtc2VydmVyLXBhcnNlZC1odG1sCXNodG1sCit0ZXh0L3BsYWluCQkJdHh0Cit0ZXh0L3JpY2h0ZXh0CQkJcnR4Cit0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzCXRzdgordGV4dC94LXNldGV4dAkJCWV0eAordGV4dC94LXNnbWwJCQlzZ21sIHNnbQordmlkZW8vbXBlZwkJCW1wZWcgbXBnIG1wZQordmlkZW8vcXVpY2t0aW1lCQkJcXQgbW92Cit2aWRlby94LW1zdmlkZW8JCQlhdmkKK3ZpZGVvL3gtc2dpLW1vdmllCQltb3ZpZQoreC1jb25mZXJlbmNlL3gtY29vbHRhbGsJCWljZQoreC13b3JsZC94LXZybWwJCQl3cmwgdnJtbApkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdmFyLzEuMC93d3cvY29uZi95YXdzLmNvbmYgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC9sb2NhbC92YXIvMS4wL3d3dy9jb25mL3lhd3MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODU3YWFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvbG9jYWwvdmFyLzEuMC93d3cvY29uZi95YXdzLmNvbmYKQEAgLTAsMCArMSwxNjYgQEAKKworIyBjb25mIGZvciB5YXdzCisKKworIyBmaXJzdCB3ZSBoYXZlIGEgc2V0IG9mIGdsb2JhbHMKKyMgVGhhdCBhcHBseSB0byBhbGwgdmlydHVhbCBzZXJ2ZXJzCisKKworIyBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxvZ2ZpbGVzIGZvcgorIyBhbGwgdmlydHVhbCBzZXJ2ZXJzIHdpbGwgYmUgd3JpdHRlbgorCitsb2dkaXIgPSAvdmFyL2xvZy95YXdzCisKKyMgVGhpcyB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGVyZSBhZGRpdGlvbmFsCisjIGJlYW0gY29kZSBjYW4gYmUgcGxhY2VkLiBUaGUgZGFlbW9uIHdpbGwgYWRkIHRoaXMKKyMgZGlyZWN0b3J5IHRvIGl0cyBzZWFyY2ggcGF0aAorCitlYmluX2RpciA9IC92YXIveWF3cy9lYmluCisKKworIyBUaGlzIGlzIGEgZGlyZWN0b3J5IHdoZXJlIGFwcGxpY2F0aW9uIHNwZWNpZmljIC5ocmwKKyMgZmlsZXMgY2FuIGJlIHBsYWNlZC4gYXBwbGljYXRpb24gc3BlY2lmaWcgLnlhd3MgY29kZSBjYW4KKyMgdGhlbiBpbmNsdWRlIHRoZXNlIC5ocmwgZmlsZXMKKworaW5jbHVkZV9kaXIgPSAvdmFyL3lhd3MvaW5jbHVkZQorCisKKworCisKKyMgVGhpcyBpcyBhIGRlYnVnIHZhcmlhYmxlLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGh0dHAgfCB0cmFmZmljIHwgZmFsc2UKKyMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHRyYWNlIChwb3NzaWJseSB0byB0aGUgdHR5KSB3aGlsZQorIyBpbnZva2luZyB5YXdzIGZyb20gdGhlIHNoZWxsIGFzIGluCisjIHlhd3MgLWkgLVQgLXggKHNlZSBtYW4geWF3cykKKwordHJhY2UgPSBmYWxzZQorCisKKworCisKKyMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB5YXdzIHN0YXJ0IGFkZGl0aW9uYWwgCisjIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgYXQgc3RhcnR1cAorIyAKKyMgcnVubW9kID0gbXltb2R1bGUKKworCisjIEJ5IGRlZmF1bHQgeWF3cyB3aWxsIGNvcHkgdGhlIGVybGFuZyBlcnJvcl9sb2cgYW5kCisjIGVuZCB3cml0ZSBpdCB0byBhIHdyYXAgbG9nIGNhbGxlZCByZXBvcnQubG9nIChpbiB0aGUgbG9nZGlyKQorIyB0aGlzIGZlYXR1cmUgY2FuIGJlIHR1cm5lZCBvZmYuIFRoaXMgd291bGQgdHlwaWNhbGx5CisjIGJlIHRoZSBjYXNlIHdoZW4geWF3cyBydW5zIHdpdGhpbiBhbm90aGVyIGxhcmdlciBhcHAKKworY29weV9lcnJvcl9sb2cgPSB0cnVlCisKKworIyBMb2dzIGFyZSB3cmFwIGxvZ3MKKworbG9nX3dyYXBfc2l6ZSA9IDEwMDAwMDAKKworCisjIFBvc3NpYmx5IHJlc29sdmUgYWxsIGhvc3RuYW1lcyBpbiBsb2dmaWxlcyBzbyB3ZWJhbGl6ZXIKKyMgY2FuIHByb2R1Y2UgdGhlIG5pY2UgZ2VvZ3JhcGh5IHBpZWNoYXJ0CisKK2xvZ19yZXNvbHZlX2hvc3RuYW1lID0gZmFsc2UKKworCisKKyMgZmFpbCBjb21wbGV0ZWx5IG9yIG5vdCBpZiB5YXdzIGZhaWxzIAorIyB0byBiaW5kIGEgbGlzdGVuIHNvY2tldAorZmFpbF9vbl9iaW5kX2VyciA9IHRydWUKKworCisKKyMgSWYgeWF3cyBpcyBzdGFydGVkIGFzIHJvb3QsIGl0IGNhbiwgb25jZSBpdCBoYXMgb3BlbmVkCisjIGFsbCByZWxldmFudCBzb2NrZXRzIGZvciBsaXN0ZW5pbmcsIGNoYW5nZSB0aGUgdWlkIHRvIGEgCisjIHVzZXIgd2l0aCBsb3dlciBhY2Nlc3NyaWdodHMgdGhhbiByb290IAorCisjIHVzZXJuYW1lID0gbm9ib2R5CisKKworIyBJZiBIVFRQIGF1dGggaXMgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIHNwZWNpZmljCisjIGF1dGggbG9nLgorCithdXRoX2xvZyA9IHRydWUKKworCisjIFdoZW4gd2UncmUgcnVubmluZyBtdWx0aXBsZSB5YXdzIHN5c3RlbXMgb24gdGhlIHNhbWUgCisjIGhvc3QsIHdlIG5lZWQgdG8gZ2l2ZSBlYWNoIHlhd3Mgc3lzdGVtIGFuIGluZGl2aWR1YWwKKyMgbmFtZS4gWWF3cyB3aWxsIHdyaXRlIGEgbnVtYmVyIG9mIHJ1bnRpbWUgZmlsZXMgdW5kZXIKKyMgL3RtcC95YXdzLyR7aWR9CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0IgorCisKKyMgaWQgPSBteW5hbWUKKworCisjIGVhcmxpZXIgdmVyc2lvbnMgb2YgWWF3cyBwaWNrZWQgdGhlIGZpcnN0IHZpcnR1YWwgaG9zdAorIyBpbiBhIGxpc3Qgb2YgaG9zdHMgd2l0aCB0aGUgc2FtZSBJUC9QT1JUIHdoZW4gdGhlIEhvc3Q6CisjIGhlYWRlciBkb2Vzbid0IG1hdGNoIGFueSBuYW1lIG9uIGFueSBIb3N0CisjIFRoaXMgaXMgb2Z0ZW4gbmljZSBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBidXQgbm90CisjIGFjY2VwdGFibGUgaW4gcmVhbCBsaXZlIGhvc3Rpbmcgc2NlbmFyaW9zCisKK3BpY2tfZmlyc3RfdmlydGhvc3Rfb25fbm9tYXRjaCA9IHRydWUKKworCisjIEFsbCB1bmljZXMgYXJlIGJyb2tlbiBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBiaW5kIHRvCisjIGEgcHJpdmlsZWdlZCBwb3J0ICg8IDEwMjQpIHVubGVzcyB1aWQ9PTAKKyMgVGhlcmUgaXMgYSBjb250cmliIGluIGp1bmdlcmwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgYnkgbWVhbnMgCisjIG9mIGFuIGV4dGVybmFsIHNldHVpZCByb290IHByb2dyYW1tIGNhbGxlZCBmZHNydiB0byBsaXN0ZW4gdG8KKyMgdG8gcHJpdmlsZWdlZCBwb3J0LgorIyBJZiB3ZSB1c2UgdGhpcyBmZWF0dXJlLCBpdCByZXF1aXJlcyBmZHNydiB0byBiZSBwcm9wZXJseSBpbnN0YWxsZWQuCisjIERvZXNuJ3QgeWV0IHdvcmsgd2l0aCBTU0wuCisKK3VzZV9mZHNydiA9IGZhbHNlCisKKworCisKKyMgZW5kIHRoZW4gYSBzZXQgb2YgdmlydHVhbCBzZXJ2ZXJzCisjIEZpcnN0IHR3byB2aXJ0aG9zdGVkIHNlcnZlcnMgb24gdGhlIHNhbWUgSVAgKDAuMC4wLjApCisjIGluIHRoaXMgY2FzZSwgYnV0IGFuIGV4cGxpY2l0IElQIGNhbiBiZSBnaXZlbiBhcyB3ZWxsCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3Zhci95YXdzL3d3dworCWFyZ19yZXdyaXRlX21vZCA9IHB3cl9hcmdfcmV3cml0ZV9tb2QKKwlhcHBtb2RzID0gPHB3ciwgcHdyX21haW5fY29udHJvbGxlcl9hcHBtb2Q+Cis8L3NlcnZlcj4KKworPHNlcnZlciBsb2NhbGhvc3Q+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdG1wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCWRhdiA9IHRydWUKKwk8YXV0aD4KKwkJcmVhbG0gPSBmb29iYXIKKwkJZGlyID0gLworCQl1c2VyID0gZm9vOmJhcgorCQl1c2VyID0gYmF6OmJhcgorCTwvYXV0aD4KKzwvc2VydmVyPgorCisKKworIyBBbmQgdGhlbiBhbiBzc2wgc2VydmVyCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA0NDMKKwlkb2Nyb290ID0gL3RtcAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJPHNzbD4gIAorCSAgICAgICAga2V5ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1rZXkucGVtCisJICAgICAgICBjZXJ0ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1jZXJ0LnBlbQorCTwvc3NsPgorPC9zZXJ2ZXI+CisJCQkJCisJCisKKworCisKKworCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLmNvbmZpZy5zcmMgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLmNvbmZpZy5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzcwMWM1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwuY29uZmlnLnNyYwpAQCAtMCwwICsxLDI2IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQorJSUlIFBhcmFtZXRlciBzZXR0aW5ncyBmb3IgYXBwcyBvbiAlQVBQX05BTUUlCislJSUgV2FybmluZyAtIHRoaXMgY29uZmlnIGZpbGUgKm11c3QqIGVuZCB3aXRoIDxkb3Q+PHdoaXRlc3BhY2U+CisKKyUlIHdyaXRlIGxvZyBmaWxlcyB0byBzYXNsX2RpcgorWworIHtzYXNsLAorICBbCisgICB7c2FzbF9lcnJvcl9sb2dnZXIsIHtmaWxlLCAiJUxPR19PVFAlL3Nhc2xfbG9nIn19CisgIF19LAorCisKKyB7Z2FzLAorICBbCisgICB7bW9kX3NwZWNzLCBbe2Vsd3JhcCwge2ZzX2Vsd3JhcF9oLCBzdGFydF9saW5rfX1dfSwKKworICAgJSBlbHdyYXAgY29uZmlnLgorICAge2Vycl9sb2csICIlTE9HX09UUCUvZXJyX2xvZyJ9LAorICAge2Vycl9sb2dfd3JhcF9pbmZvLCB7e2Vyciw1MDAwMDAwLDEwfSx7c2FzbCw1MDAwMDAwLDEwfX19LCAKKyAgIHtlcnJfbG9nX3R0eSwgdHJ1ZX0gJSBMb2cgdG8gdGhlIHNjcmVlbgorICAgXX0sCisKKyB7JUFQUF9OQU1FJSwKKyAgWworICBdfQorXS4gCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZDI0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3RocmlmdF9yZWwucmVsLnNyYwpAQCAtMCwwICsxLDE0IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQore3JlbGVhc2UsIAorIHsidGhyaWZ0X3JlbCIsICIlUkVMX1ZTTiUifSwKKyBlcnRzLAorIFsKKyAga2VybmVsLAorICBzdGRsaWIsCisgIHNhc2wsCisgIGZzbGliLAorICBnYXMsCisgIHRocmlmdAorIF0KK30uIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMudG1wIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5yZWwuc3JjLnRtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM0ZjcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5yZWwuc3JjLnRtcApAQCAtMCwwICsxLDE0IEBACislJSUgLSotIG1vZGU6ZXJsYW5nIC0qLQore3JlbGVhc2UsIAorIHsidGhyaWZ0X3JlbCIsICIxLjAifSwKKyBlcnRzLAorIFsKKyAga2VybmVsLAorICBzdGRsaWIsCisgIHNhc2wsCisgIGZzbGliLAorICBnYXMsCisgIHRocmlmdAorIF0KK30uIAorCmRpZmYgLS1naXQgYS9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC92c24ubWsgYi9saWIvZXJsL3JlbGVhc2VfRElTQUJMRUQvdGhyaWZ0X3JlbC92c24ubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFjOGUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3Zzbi5tawpAQCAtMCwwICsxIEBACitSRUxfVlNOPTEuMApkaWZmIC0tZ2l0IGEvbGliL2VybC9yZWxlYXNlX0RJU0FCTEVEL3RocmlmdF9yZWwveWF3cy5jb25mLnNyYyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3lhd3MuY29uZi5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1N2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvcmVsZWFzZV9ESVNBQkxFRC90aHJpZnRfcmVsL3lhd3MuY29uZi5zcmMKQEAgLTAsMCArMSwxNjYgQEAKKworIyBjb25mIGZvciB5YXdzCisKKworIyBmaXJzdCB3ZSBoYXZlIGEgc2V0IG9mIGdsb2JhbHMKKyMgVGhhdCBhcHBseSB0byBhbGwgdmlydHVhbCBzZXJ2ZXJzCisKKworIyBUaGlzIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgYWxsIGxvZ2ZpbGVzIGZvcgorIyBhbGwgdmlydHVhbCBzZXJ2ZXJzIHdpbGwgYmUgd3JpdHRlbgorCitsb2dkaXIgPSAvdmFyL2xvZy95YXdzCisKKyMgVGhpcyB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSB3aGVyZSBhZGRpdGlvbmFsCisjIGJlYW0gY29kZSBjYW4gYmUgcGxhY2VkLiBUaGUgZGFlbW9uIHdpbGwgYWRkIHRoaXMKKyMgZGlyZWN0b3J5IHRvIGl0cyBzZWFyY2ggcGF0aAorCitlYmluX2RpciA9IC92YXIveWF3cy9lYmluCisKKworIyBUaGlzIGlzIGEgZGlyZWN0b3J5IHdoZXJlIGFwcGxpY2F0aW9uIHNwZWNpZmljIC5ocmwKKyMgZmlsZXMgY2FuIGJlIHBsYWNlZC4gYXBwbGljYXRpb24gc3BlY2lmaWcgLnlhd3MgY29kZSBjYW4KKyMgdGhlbiBpbmNsdWRlIHRoZXNlIC5ocmwgZmlsZXMKKworaW5jbHVkZV9kaXIgPSAvdmFyL3lhd3MvaW5jbHVkZQorCisKKworCisKKyMgVGhpcyBpcyBhIGRlYnVnIHZhcmlhYmxlLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGh0dHAgfCB0cmFmZmljIHwgZmFsc2UKKyMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHRyYWNlIChwb3NzaWJseSB0byB0aGUgdHR5KSB3aGlsZQorIyBpbnZva2luZyB5YXdzIGZyb20gdGhlIHNoZWxsIGFzIGluCisjIHlhd3MgLWkgLVQgLXggKHNlZSBtYW4geWF3cykKKwordHJhY2UgPSBmYWxzZQorCisKKworCisKKyMgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB5YXdzIHN0YXJ0IGFkZGl0aW9uYWwgCisjIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgYXQgc3RhcnR1cAorIyAKKyMgcnVubW9kID0gbXltb2R1bGUKKworCisjIEJ5IGRlZmF1bHQgeWF3cyB3aWxsIGNvcHkgdGhlIGVybGFuZyBlcnJvcl9sb2cgYW5kCisjIGVuZCB3cml0ZSBpdCB0byBhIHdyYXAgbG9nIGNhbGxlZCByZXBvcnQubG9nIChpbiB0aGUgbG9nZGlyKQorIyB0aGlzIGZlYXR1cmUgY2FuIGJlIHR1cm5lZCBvZmYuIFRoaXMgd291bGQgdHlwaWNhbGx5CisjIGJlIHRoZSBjYXNlIHdoZW4geWF3cyBydW5zIHdpdGhpbiBhbm90aGVyIGxhcmdlciBhcHAKKworY29weV9lcnJvcl9sb2cgPSB0cnVlCisKKworIyBMb2dzIGFyZSB3cmFwIGxvZ3MKKworbG9nX3dyYXBfc2l6ZSA9IDEwMDAwMDAKKworCisjIFBvc3NpYmx5IHJlc29sdmUgYWxsIGhvc3RuYW1lcyBpbiBsb2dmaWxlcyBzbyB3ZWJhbGl6ZXIKKyMgY2FuIHByb2R1Y2UgdGhlIG5pY2UgZ2VvZ3JhcGh5IHBpZWNoYXJ0CisKK2xvZ19yZXNvbHZlX2hvc3RuYW1lID0gZmFsc2UKKworCisKKyMgZmFpbCBjb21wbGV0ZWx5IG9yIG5vdCBpZiB5YXdzIGZhaWxzIAorIyB0byBiaW5kIGEgbGlzdGVuIHNvY2tldAorZmFpbF9vbl9iaW5kX2VyciA9IHRydWUKKworCisKKyMgSWYgeWF3cyBpcyBzdGFydGVkIGFzIHJvb3QsIGl0IGNhbiwgb25jZSBpdCBoYXMgb3BlbmVkCisjIGFsbCByZWxldmFudCBzb2NrZXRzIGZvciBsaXN0ZW5pbmcsIGNoYW5nZSB0aGUgdWlkIHRvIGEgCisjIHVzZXIgd2l0aCBsb3dlciBhY2Nlc3NyaWdodHMgdGhhbiByb290IAorCisjIHVzZXJuYW1lID0gbm9ib2R5CisKKworIyBJZiBIVFRQIGF1dGggaXMgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhIHNwZWNpZmljCisjIGF1dGggbG9nLgorCithdXRoX2xvZyA9IHRydWUKKworCisjIFdoZW4gd2UncmUgcnVubmluZyBtdWx0aXBsZSB5YXdzIHN5c3RlbXMgb24gdGhlIHNhbWUgCisjIGhvc3QsIHdlIG5lZWQgdG8gZ2l2ZSBlYWNoIHlhd3Mgc3lzdGVtIGFuIGluZGl2aWR1YWwKKyMgbmFtZS4gWWF3cyB3aWxsIHdyaXRlIGEgbnVtYmVyIG9mIHJ1bnRpbWUgZmlsZXMgdW5kZXIKKyMgL3RtcC95YXdzLyR7aWR9CisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0IgorCisKKyMgaWQgPSBteW5hbWUKKworCisjIGVhcmxpZXIgdmVyc2lvbnMgb2YgWWF3cyBwaWNrZWQgdGhlIGZpcnN0IHZpcnR1YWwgaG9zdAorIyBpbiBhIGxpc3Qgb2YgaG9zdHMgd2l0aCB0aGUgc2FtZSBJUC9QT1JUIHdoZW4gdGhlIEhvc3Q6CisjIGhlYWRlciBkb2Vzbid0IG1hdGNoIGFueSBuYW1lIG9uIGFueSBIb3N0CisjIFRoaXMgaXMgb2Z0ZW4gbmljZSBpbiB0ZXN0aW5nIGVudmlyb25tZW50cyBidXQgbm90CisjIGFjY2VwdGFibGUgaW4gcmVhbCBsaXZlIGhvc3Rpbmcgc2NlbmFyaW9zCisKK3BpY2tfZmlyc3RfdmlydGhvc3Rfb25fbm9tYXRjaCA9IHRydWUKKworCisjIEFsbCB1bmljZXMgYXJlIGJyb2tlbiBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBiaW5kIHRvCisjIGEgcHJpdmlsZWdlZCBwb3J0ICg8IDEwMjQpIHVubGVzcyB1aWQ9PTAKKyMgVGhlcmUgaXMgYSBjb250cmliIGluIGp1bmdlcmwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgYnkgbWVhbnMgCisjIG9mIGFuIGV4dGVybmFsIHNldHVpZCByb290IHByb2dyYW1tIGNhbGxlZCBmZHNydiB0byBsaXN0ZW4gdG8KKyMgdG8gcHJpdmlsZWdlZCBwb3J0LgorIyBJZiB3ZSB1c2UgdGhpcyBmZWF0dXJlLCBpdCByZXF1aXJlcyBmZHNydiB0byBiZSBwcm9wZXJseSBpbnN0YWxsZWQuCisjIERvZXNuJ3QgeWV0IHdvcmsgd2l0aCBTU0wuCisKK3VzZV9mZHNydiA9IGZhbHNlCisKKworCisKKyMgZW5kIHRoZW4gYSBzZXQgb2YgdmlydHVhbCBzZXJ2ZXJzCisjIEZpcnN0IHR3byB2aXJ0aG9zdGVkIHNlcnZlcnMgb24gdGhlIHNhbWUgSVAgKDAuMC4wLjApCisjIGluIHRoaXMgY2FzZSwgYnV0IGFuIGV4cGxpY2l0IElQIGNhbiBiZSBnaXZlbiBhcyB3ZWxsCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3Zhci95YXdzL3d3dworCWFyZ19yZXdyaXRlX21vZCA9IHB3cl9hcmdfcmV3cml0ZV9tb2QKKwlhcHBtb2RzID0gPHB3ciwgcHdyX21haW5fY29udHJvbGxlcl9hcHBtb2Q+Cis8L3NlcnZlcj4KKworPHNlcnZlciBsb2NhbGhvc3Q+CisJcG9ydCA9IDgwCisJbGlzdGVuID0gMC4wLjAuMAorCWRvY3Jvb3QgPSAvdG1wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCWRhdiA9IHRydWUKKwk8YXV0aD4KKwkJcmVhbG0gPSBmb29iYXIKKwkJZGlyID0gLworCQl1c2VyID0gZm9vOmJhcgorCQl1c2VyID0gYmF6OmJhcgorCTwvYXV0aD4KKzwvc2VydmVyPgorCisKKworIyBBbmQgdGhlbiBhbiBzc2wgc2VydmVyCisKKzxzZXJ2ZXIgY29yZS5tYXJ0aW5qbG9nYW4uY29tPgorCXBvcnQgPSA0NDMKKwlkb2Nyb290ID0gL3RtcAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkaXJfbGlzdGluZ3MgPSB0cnVlCisJPHNzbD4gIAorCSAgICAgICAga2V5ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1rZXkucGVtCisJICAgICAgICBjZXJ0ZmlsZSA9IC91c3IvbG9jYWwveWF3cy9ldGMveWF3cy1jZXJ0LnBlbQorCTwvc3NsPgorPC9zZXJ2ZXI+CisJCQkJCisJCisKKworCisKKworCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyYWY3My4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuZXJsCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS1tb2R1bGUodEJpbmFyeVByb3RvY29sKS4KLQotLWluY2x1ZGUoInRocmlmdC90aHJpZnQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybCIpLgotCi0tZXhwb3J0KFsKLSAgbmV3LzEsCi0gIHRyYW5zLzEsCi0gIHNraXAvMiwKLQotICB3cml0ZU1lc3NhZ2VCZWdpbi80LCB3cml0ZU1lc3NhZ2VFbmQvMSwKLSAgd3JpdGVTdHJ1Y3RCZWdpbi8yLCB3cml0ZVN0cnVjdEVuZC8xLAotICB3cml0ZUZpZWxkQmVnaW4vNCwgd3JpdGVGaWVsZEVuZC8xLCB3cml0ZUZpZWxkU3RvcC8xLAotICB3cml0ZU1hcEJlZ2luLzQsIHdyaXRlTWFwRW5kLzEsCi0gIHdyaXRlTGlzdEJlZ2luLzMsIHdyaXRlTGlzdEVuZC8xLAotICB3cml0ZVNldEJlZ2luLzMsIHdyaXRlU2V0RW5kLzEsCi0KLSAgd3JpdGVCb29sLzIsIHdyaXRlQnl0ZS8yLCB3cml0ZUkxNi8yLCB3cml0ZUkzMi8yLCAKLSAgd3JpdGVJNjQvMiwgd3JpdGVEb3VibGUvMiwgd3JpdGVTdHJpbmcvMiwgCi0KLSAgcmVhZE1lc3NhZ2VCZWdpbi8xLCByZWFkTWVzc2FnZUVuZC8xLCAKLSAgcmVhZFN0cnVjdEJlZ2luLzEsIHJlYWRTdHJ1Y3RFbmQvMSwgCi0gIHJlYWRGaWVsZEJlZ2luLzEsIHJlYWRGaWVsZEVuZC8xLAotICByZWFkTWFwQmVnaW4vMSwgcmVhZE1hcEVuZC8xLAotICByZWFkTGlzdEJlZ2luLzEsIHJlYWRMaXN0RW5kLzEsCi0gIHJlYWRTZXRCZWdpbi8xLCByZWFkU2V0RW5kLzEsCi0KLSAgcmVhZEJvb2wvMSwgcmVhZEJ5dGUvMSwgcmVhZEkxNi8xLCByZWFkSTMyLzEsIAotICByZWFkSTY0LzEsIHJlYWREb3VibGUvMSwgcmVhZFN0cmluZy8xCi1dKS4KLQotbmV3KFRyYW5zKSAtPgotICAgICN0QmluYXJ5UHJvdG9jb2x7dHJhbnM9VHJhbnN9LgotCi10cmFucyhUaGlzKSAtPiAlIGFjY2Vzc29yCi0gICAgP0FUVFIodHJhbnMpLgotCi1za2lwKFRoaXMsIFR5cGUpIC0+Ci0gICAgdFByb3RvY29sOnNraXAoVGhpcywgVHlwZSkuCi0KLXdyaXRlTWVzc2FnZUJlZ2luKFRoaXMsIE5hbWUsIFR5cGUsIFNlcWlkKSAtPgotICAgIHdyaXRlSTMyKFRoaXMsID9WRVJTSU9OXzEgYm9yIFR5cGUpLAotICAgIHdyaXRlU3RyaW5nKFRoaXMsIE5hbWUpLAotICAgIHdyaXRlSTMyKFRoaXMsIFNlcWlkKS4KLQotd3JpdGVNZXNzYWdlRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVTdHJ1Y3RCZWdpbihUaGlzLCBOYW1lKSAtPgotICAgIFRoaXMsIE5hbWUsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXdyaXRlU3RydWN0RW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotd3JpdGVGaWVsZEJlZ2luKFRoaXMsIE5hbWUsIFR5cGUsIElkKSAtPgotICAgIE5hbWUsCi0gICAgd3JpdGVCeXRlKFRoaXMsIFR5cGUpLAotICAgIHdyaXRlSTE2KFRoaXMsIElkKS4KLQotd3JpdGVGaWVsZEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXdyaXRlRmllbGRTdG9wKFRoaXMpIC0+Ci0gICAgd3JpdGVCeXRlKFRoaXMsID90VHlwZV9TVE9QKS4KLQotd3JpdGVNYXBCZWdpbihUaGlzLCBLdHlwZSwgVnR5cGUsIFNpemUpIC0+Ci0gICAgd3JpdGVCeXRlKFRoaXMsIEt0eXBlKSwKLSAgICB3cml0ZUJ5dGUoVGhpcywgVnR5cGUpLAotICAgIHdyaXRlSTMyKFRoaXMsIFNpemUpLgotCi13cml0ZU1hcEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXdyaXRlTGlzdEJlZ2luKFRoaXMsIEV0eXBlLCBTaXplKSAtPgotICAgIHdyaXRlQnl0ZShUaGlzLCBFdHlwZSksCi0gICAgd3JpdGVJMzIoVGhpcywgU2l6ZSkuCi0KLXdyaXRlTGlzdEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXdyaXRlU2V0QmVnaW4oVGhpcywgRXR5cGUsIFNpemUpIC0+Ci0gICAgd3JpdGVCeXRlKFRoaXMsIEV0eXBlKSwKLSAgICB3cml0ZUkzMihUaGlzLCBTaXplKS4KLQotd3JpdGVTZXRFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi0lCi0KLXdyaXRlQm9vbChUaGlzLCBCb29sKSAtPgotICAgIGlmIEJvb2wgLT4gJSB0cnVlCi0JICAgIHdyaXRlQnl0ZShUaGlzLCAxKTsKLSAgICAgICB0cnVlIC0+ICUgZmFsc2UKLQkgICAgd3JpdGVCeXRlKFRoaXMsIDApCi0gICAgZW5kLgotCi13cml0ZUJ5dGUoVGhpcywgQnl0ZSkgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgID9NMShUcmFucywgd3JpdGUsIGJpbmFyeV90b19saXN0KDw8Qnl0ZTo4L2JpZz4+KSkuCi0KLXdyaXRlSTE2KFRoaXMsIEkxNikgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgID9NMShUcmFucywgd3JpdGUsIGJpbmFyeV90b19saXN0KDw8STE2OjE2L2JpZz4+KSkuCi0KLXdyaXRlSTMyKFRoaXMsIEkzMikgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgID9NMShUcmFucywgd3JpdGUsIGJpbmFyeV90b19saXN0KDw8STMyOjMyL2JpZz4+KSkuCi0KLXdyaXRlSTY0KFRoaXMsIEk2NCkgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgID9NMShUcmFucywgd3JpdGUsIGJpbmFyeV90b19saXN0KDw8STY0OjY0L2JpZz4+KSkuCi0KLXdyaXRlRG91YmxlKFRoaXMsICBEb3VibGUpIC0+Ci0gICAgVHJhbnMgPSBUaGlzI3RCaW5hcnlQcm90b2NvbC50cmFucywKLSAgICA/TTEoVHJhbnMsIHdyaXRlLCBiaW5hcnlfdG9fbGlzdCg8PERvdWJsZTo2NC9iaWc+PikpLgotCi13cml0ZVN0cmluZyhUaGlzLCBTdHIpIC0+Ci0gICAgVHJhbnMgPSBUaGlzI3RCaW5hcnlQcm90b2NvbC50cmFucywKLSAgICB3cml0ZUkzMihUaGlzLCBsZW5ndGgoU3RyKSksCi0gICAgP00xKFRyYW5zLCB3cml0ZSwgU3RyKS4KLQotJQotCi1yZWFkTWVzc2FnZUJlZ2luKFRoaXMpIC0+Ci0gICAgVmVyc2lvbiA9IHJlYWRJMzIoVGhpcyksCi0gICAgaWYgCi0JKFZlcnNpb24gYmFuZCA/VkVSU0lPTl9NQVNLKSAvPSA/VkVSU0lPTl8xIC0+Ci0JICAgIHRocm93KHRQcm90b2NvbEV4Y2VwdGlvbjpuZXcoP3RQcm90b2NvbEV4Y2VwdGlvbl9CQURfVkVSU0lPTiwKLQkJCQkJICJNaXNzaW5nIHZlcnNpb24gaWRlbnRpZmllciIpKTsKLQl0cnVlIC0+IG9rCi0gICAgZW5kLAotICAgIFR5cGUgPSBWZXJzaW9uIGJhbmQgMTYjMDAwMDAwZmYsCi0gICAgTmFtZSAgPSByZWFkU3RyaW5nKFRoaXMpLAotICAgIFNlcWlkID0gcmVhZEkzMihUaGlzKSwKLSAgICB7IE5hbWUsIFR5cGUsIFNlcWlkIH0uCi0KLXJlYWRNZXNzYWdlRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotcmVhZFN0cnVjdEJlZ2luKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotcmVhZFN0cnVjdEVuZChUaGlzKSAtPgotICAgIFRoaXMsICUgc3VwcHJlc3MgdW51c2VkIHdhcm5pbmdzCi0gICAgb2suCi0KLXJlYWRGaWVsZEJlZ2luKFRoaXMpIC0+Ci0gICAgVHlwZSA9IHJlYWRCeXRlKFRoaXMpLAotICAgIGlmIFR5cGUgPT0gP3RUeXBlX1NUT1AgLT4KLQkgICAgeyBuaWwsIFR5cGUsIDAgfTsgJSBXQVRDSAotICAgICAgIHRydWUgLT4KLQkgICAgSWQgPSByZWFkSTE2KFRoaXMpLAotCSAgICB7IG5pbCwgVHlwZSwgSWQgfQotICAgIGVuZC4KLQotcmVhZEZpZWxkRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotcmVhZE1hcEJlZ2luKFRoaXMpIC0+Ci0gICAgS3R5cGUgPSByZWFkQnl0ZShUaGlzKSwKLSAgICBWdHlwZSA9IHJlYWRCeXRlKFRoaXMpLAotICAgIFNpemUgID0gcmVhZEkzMihUaGlzKSwKLSAgICB7IEt0eXBlLCBWdHlwZSwgU2l6ZSB9LgotCi1yZWFkTWFwRW5kKFRoaXMpIC0+Ci0gICAgVGhpcywgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBvay4KLQotcmVhZExpc3RCZWdpbihUaGlzKSAtPgotICAgIEV0eXBlID0gcmVhZEJ5dGUoVGhpcyksCi0gICAgU2l6ZSAgPSByZWFkSTMyKFRoaXMpLAotICAgIHsgRXR5cGUsIFNpemUgfS4KLQotcmVhZExpc3RFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi1yZWFkU2V0QmVnaW4oVGhpcykgLT4KLSAgICBFdHlwZSA9IHJlYWRCeXRlKFRoaXMpLAotICAgIFNpemUgID0gcmVhZEkzMihUaGlzKSwKLSAgICB7IEV0eXBlLCBTaXplIH0uCi0KLXJlYWRTZXRFbmQoVGhpcykgLT4KLSAgICBUaGlzLCAlIHN1cHByZXNzIHVudXNlZCB3YXJuaW5ncwotICAgIG9rLgotCi0lIFdBVENIIGV2ZXJ5dGhpbmcgLi4uIHdobyBrbm93cyB3aGF0IG9mIHRoaXMgd2lsbCB3b3JrCi0KLXJlYWRCb29sKFRoaXMpIC0+Ci0gICAgQnl0ZSA9IHJlYWRCeXRlKFRoaXMpLAotICAgIChCeXRlIC89IDApLgotCi1yZWFkQnl0ZShUaGlzKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgPDxWYWw6OC9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP00xKFRyYW5zLCByZWFkQWxsLCAxKSwKLSAgICBWYWwuCi0KLXJlYWRJMTYoVGhpcykgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgIDw8VmFsOjE2L2ludGVnZXItc2lnbmVkLWJpZywgXy9iaW5hcnk+PiAgPSA/TTEoVHJhbnMsIHJlYWRBbGwsIDIpLAotICAgIFZhbC4KLQotcmVhZEkzMihUaGlzKSAtPgotICAgIFRyYW5zID0gVGhpcyN0QmluYXJ5UHJvdG9jb2wudHJhbnMsCi0gICAgPDxWYWw6MzIvaW50ZWdlci1zaWduZWQtYmlnLCBfL2JpbmFyeT4+ICA9ID9NMShUcmFucywgcmVhZEFsbCwgNCksCi0gICAgVmFsLgotCi1yZWFkSTY0KFRoaXMpIC0+Ci0gICAgVHJhbnMgPSBUaGlzI3RCaW5hcnlQcm90b2NvbC50cmFucywKLSAgICA8PFZhbDo2NC9pbnRlZ2VyLXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP00xKFRyYW5zLCByZWFkQWxsLCA4KSwKLSAgICBWYWwuCi0KLXJlYWREb3VibGUoVGhpcykgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgIDw8VmFsOjY0L2Zsb2F0LXNpZ25lZC1iaWcsIF8vYmluYXJ5Pj4gID0gP00xKFRyYW5zLCByZWFkQWxsLCA4KSwKLSAgICBWYWwuCi0KLXJlYWRTdHJpbmcoVGhpcykgLT4KLSAgICBUcmFucyA9IFRoaXMjdEJpbmFyeVByb3RvY29sLnRyYW5zLAotICAgIFN6ICAgID0gcmVhZEkzMihUaGlzKSwKLSAgICBiaW5hcnlfdG9fbGlzdCg/TTEoVHJhbnMsIHJlYWRBbGwsIFN6KSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdEJpbmFyeVByb3RvY29sLmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkNDgzNi4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0tZGVmaW5lKFZFUlNJT05fTUFTSywgMTYjRkZGRjAwMDApLgotLWRlZmluZShWRVJTSU9OXzEsIDE2IzgwMDEwMDAwKS4KLS1yZWNvcmQodEJpbmFyeVByb3RvY29sLCB7dHJhbnN9KS4KLQpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sLmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RQcm90b2NvbC5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNmNhMTEuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS1tb2R1bGUodFByb3RvY29sKS4KLQotLWluY2x1ZGUoInRocmlmdC90aHJpZnQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3Byb3RvY29sL3RQcm90b2NvbC5ocmwiKS4KLQotLWV4cG9ydChbbmV3LzEsIHNraXAvMl0pLgotCi1za2lwX3N0cnVjdF9sb29wKFRoaXMpIC0+Ci0gICAgeyBOYW1lLCBUeXBlLCBJZCB9ID0gP00wKFRoaXMsIHJlYWRGaWVsZEJlZ2luKSwKLSAgICBOYW1lLCBJZCwgJSBzdXBwcmVzcyB1bnVzZWQgd2FybmluZ3MKLSAgICBpZgotCVR5cGUgPT0gP3RUeXBlX1NUT1AgLT4KLQkgICAgb2s7Ci0JdHJ1ZSAtPgotCSAgICBza2lwKFRoaXMsIFR5cGUpLAotCSAgICA/TTAoVGhpcywgcmVhZEZpZWxkRW5kKSwKLQotCSAgICAlJSB0aGlzIGlzIGhlcmUgaW4gb3JpZ2luYWwgdHByb3RvY29sLnJiLCBidXQgaSB0aGluayBpdCdzIGEgYnVnCi0JICAgICUgP00wKFRoaXMsIHJlYWRTdHJ1Y3RFbmQpLAotCSAgICBza2lwX3N0cnVjdF9sb29wKFRoaXMpCi0gICAgZW5kLgotICAgICAgIAotc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgVGltZXMpIC0+Ci0gICAgc2tpcChUaGlzLCBLdHlwZSksCi0gICAgc2tpcChUaGlzLCBWdHlwZSksCi0gICAgc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgVGltZXMtMSkuCi0KLXNraXBfc2V0X3JlcGVhdChUaGlzLCBFdHlwZSwgVGltZXMpIC0+Ci0gICAgc2tpcChUaGlzLCBFdHlwZSksCi0gICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBUaW1lcy0xKS4KLQotbmV3KFRyYW5zKSAtPgotICAgICN0UHJvdG9jb2x7dHJhbnM9VHJhbnN9LgotCi1za2lwKFRoaXMsIFR5cGUpIC0+Ci0gICAgY2FzZSBUeXBlIG9mIAotCT90VHlwZV9TVE9QICAgLT4gbmlsOyAlIFdBVENICi0JP3RUeXBlX0JPT0wgICAtPiA/TTAoVGhpcywgcmVhZEJvb2wpOwotCT90VHlwZV9CWVRFICAgLT4gP00wKFRoaXMsIHJlYWRCeXRlKTsKLQk/dFR5cGVfSTE2ICAgIC0+ID9NMChUaGlzLCByZWFkSTE2KTsKLQk/dFR5cGVfSTMyICAgIC0+ID9NMChUaGlzLCByZWFkSTMyKTsKLQk/dFR5cGVfSTY0ICAgIC0+ID9NMChUaGlzLCByZWFkSTY0KTsKLQk/dFR5cGVfRE9VQkxFIC0+ID9NMChUaGlzLCByZWFkRG91YmxlKTsKLQk/dFR5cGVfU1RSSU5HIC0+ID9NMChUaGlzLCByZWFkU3RyaW5nKTsKLQotCT90VHlwZV9TVFJVQ1QgLT4gCi0JICAgID9NMChUaGlzLCByZWFkU3RydWN0QmVnaW4pLAotCSAgICBza2lwX3N0cnVjdF9sb29wKFRoaXMpLAotCi0JICAgICUlIHRoaXMgaXNuJ3QgaGVyZSBpbiB0aGUgb3JpZ2luYWwgdHByb3RvY29sLnJiLCBidXQgaSB0aGluayBpdCdzIGEgYnVnCi0JICAgID9NMChUaGlzLCByZWFkU3RydWN0RW5kKTsKLQotCT90VHlwZV9NQVAgLT4KLQkgICAge0t0eXBlLCBWdHlwZSwgU2l6ZX0gPSA/TTAoVGhpcywgcmVhZE1hcEJlZ2luKSwKLQkgICAgc2tpcF9tYXBfcmVwZWF0KFRoaXMsIEt0eXBlLCBWdHlwZSwgU2l6ZSksCi0JICAgID9NMChUaGlzLCByZWFkTWFwRW5kKTsKLQotCT90VHlwZV9TRVQgLT4gCi0JICAgIHtFdHlwZSwgU2l6ZX0gPSA/TTAoVGhpcywgcmVhZFNldEJlZ2luKSwKLQkgICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBTaXplKSwKLQkgICAgP00wKFRoaXMsIHJlYWRTZXRFbmQpOwotCi0JP3RUeXBlX0xJU1QgLT4KLQkgICAge0V0eXBlLCBTaXplfSA9ID9NMChUaGlzLCByZWFkTGlzdEJlZ2luKSwKLQkgICAgc2tpcF9zZXRfcmVwZWF0KFRoaXMsIEV0eXBlLCBTaXplKSwgJSBbc2ljXSBza2lwcGluZyBzYW1lIGFzIGZvciBTRVQKLQkgICAgP00wKFRoaXMsIHJlYWRMaXN0RW5kKQotICAgIGVuZC4KLQotCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2wuaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sLmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4NTEyNC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9wcm90b2NvbC90UHJvdG9jb2wuaHJsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLXJlY29yZCh0UHJvdG9jb2wsIHt0cmFuc30pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YWE0OGEuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotLW1vZHVsZSh0UHJvdG9jb2xFeGNlcHRpb24pLgotLWluY2x1ZGUoInRQcm90b2NvbEV4Y2VwdGlvbi5ocmwiKS4KLS1leHBvcnQoW25ldy8yLCBuZXcvMSwgbmV3LzBdKS4KLQotbmV3KFR5cGUsIE1lc3NhZ2UpIC0+Ci0gICAgI3RQcm90b2NvbEV4Y2VwdGlvbnt0eXBlPVR5cGUsIG1lc3NhZ2U9TWVzc2FnZX0uCi0KLW5ldyhUeXBlKSAtPiBuZXcoVHlwZSwgbmlsKS4KLW5ldygpICAgICAtPiBuZXcoP3RQcm90b2NvbEV4Y2VwdGlvbl9VTktOT1dOLCBuaWwpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3Byb3RvY29sL3RQcm90b2NvbEV4Y2VwdGlvbi5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YmYzYWMuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvcHJvdG9jb2wvdFByb3RvY29sRXhjZXB0aW9uLmhybAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotLXJlY29yZCh0UHJvdG9jb2xFeGNlcHRpb24sIHttZXNzYWdlLCB0eXBlfSkuCi0KLS1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX1VOS05PV04sIDApLgotLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fSU5WQUxJRF9EQVRBLCAxKS4KLS1kZWZpbmUodFByb3RvY29sRXhjZXB0aW9uX05FR0FUSVZFX1NJWkUsIDIpLgotLWRlZmluZSh0UHJvdG9jb2xFeGNlcHRpb25fU0laRV9MSU1JVCwgMykuCi0tZGVmaW5lKHRQcm90b2NvbEV4Y2VwdGlvbl9CQURfVkVSU0lPTiwgNCkuCi0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMTgyZS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9zZXJ2ZXIvdFNlcnZlci5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0tbW9kdWxlKHRTZXJ2ZXIpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvcHJvdG9jb2wvdFByb3RvY29sLmhybCIpLgotLWluY2x1ZGUoInRocmlmdC9wcm90b2NvbC90QmluYXJ5UHJvdG9jb2wuaHJsIikuCi0lIC1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RUcmFuc3BvcnQuaHJsIikuCi0taW5jbHVkZSgidFNlcnZlci5ocmwiKS4KLQotLWV4cG9ydChbbmV3LzMsIHNlcnZlLzFdKS4KLQotJSBub3cgcHJvY2Vzc29yIGlzIHRoZSBtb2R1bGUgd2l0aCBwcm9jZXNzXyosIG5vdCBhbiBvYmplY3QKLQotbmV3KFByb2Nlc3Nvck1vZHVsZSwgSGFuZGxlck1vZHVsZSwgU2VydmVyVHJhbnNwb3J0KSAtPgotICAgICN0U2VydmVye3Byb2Nlc3Nvck1vZHVsZT1Qcm9jZXNzb3JNb2R1bGUsIAotCSAgICAgaGFuZGxlck1vZHVsZT1IYW5kbGVyTW9kdWxlLAotCSAgICAgc2VydmVyVHJhbnNwb3J0PVNlcnZlclRyYW5zcG9ydH0uCi0KLXNlcnZlclRyYW5zcG9ydChUaGlzKSAtPgotICAgIFRoaXMjdFNlcnZlci5zZXJ2ZXJUcmFuc3BvcnQuCi0KLXNlcnZlKFRoaXMpIC0+Ci0gICAgU1QxID0gP00wKHNlcnZlclRyYW5zcG9ydChUaGlzKSwgbGlzdGVuX01VVEFCTEUpLAotICAgIFRoaXMxID0gVGhpcyN0U2VydmVye3NlcnZlclRyYW5zcG9ydD1TVDF9LAotICAgIHNlcnZlX2xvb3AoVGhpczEpLgotCi1wcm9jZXNzb3JNb2R1bGUoVGhpcykgLT4KLSAgICBUaGlzI3RTZXJ2ZXIucHJvY2Vzc29yTW9kdWxlLgotCi1oYW5kbGVyTW9kdWxlKFRoaXMpIC0+Ci0gICAgVGhpcyN0U2VydmVyLmhhbmRsZXJNb2R1bGUuCi0KLXNlcnZlX2xvb3AoVGhpcykgLT4KLSAgICBpbzpmb3JtYXQoIn5ucmVhZHkufm4iLCBbXSksCi0gICAgQ2xpZW50ID0gP00wKHNlcnZlclRyYW5zcG9ydChUaGlzKSwgYWNjZXB0X01VVEFCTEUpLAotICAgIFRoaXMxICA9IFRoaXMjdFNlcnZlcntzZXJ2ZXJUcmFuc3BvcnQ9Q2xpZW50fSwKLQotICAgIFRyYW5zICA9IENsaWVudCwgJSBmYWN0b3J5Ci0gICAgUHJvdCAgID0gdEJpbmFyeVByb3RvY29sOm5ldyhUcmFucyksCi0gICAgc2VydmVfbG9vcF9sb29wKFRoaXMxLCBQcm90KSwgJSBnaWdnbGUgbG9vcD8KLSAgICA/TTAoVHJhbnMsIGNsb3NlX01VVEFCTEUpLCAlIGRvbid0ICJhc3NpZ24iIC4uLiBkaXNjYXJkCi0gICAgc2VydmVfbG9vcChUaGlzKS4KLSAgICAKLXNlcnZlX2xvb3BfbG9vcChUaGlzLCBQcm90KSAtPgotICAgIE5leHQgPSB0cnkKLQlWYWwgPSAocHJvY2Vzc29yTW9kdWxlKFRoaXMpKTpwcm9jZXNzKGhhbmRsZXJNb2R1bGUoVGhpcyksIFByb3QsIFByb3QpLAotCWlvOmZvcm1hdCgicmVxdWVzdCBwcm9jZXNzZWQ6IHJ2PX5wfm4iLCBbVmFsXSksCi0JbG9vcAotICAgIGNhdGNoIAotCSUlIFRPRE8oY3Bpcm8pIGNhc2Ugd2hlbiBpc19yZWNvcmQoLi4uKSB0byBwaWNrIG91dCBvdXIgZXhjZXB0aW9uCi0JJSUgcmVjb3JkcyB2cy4gbm9ybWFsIGVybGFuZyB0aHJvd3MKLQl7dFRyYW5zcG9ydEV4Y2VwdGlvbixfLF99IC0+Ci0JICAgIGlvOmZvcm1hdCgidFRyYW5zcG9ydEV4Y2VwdGlvbiAobm9ybWFsLWlzaD8pfm4iLCBbXSksCi0JICAgIGNsb3NlOwotCUUgLT4KLQkgICAgaW86Zm9ybWF0KCJFWENFUFRJT046IH5wfm4iLCBbRV0pLAotCSAgICBjbG9zZQotICAgIGVuZCwKLSAgICBjYXNlIE5leHQgb2YgCi0JbG9vcCAtPiBzZXJ2ZV9sb29wX2xvb3AoVGhpcywgUHJvdCk7Ci0JY2xvc2UgLT4gb2sKLSAgICBlbmQuCi0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3NlcnZlci90U2VydmVyLmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNkYTAyOS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS9zZXJ2ZXIvdFNlcnZlci5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0tcmVjb3JkKHRTZXJ2ZXIsIHtwcm9jZXNzb3JNb2R1bGUsIGhhbmRsZXJNb2R1bGUsIHNlcnZlclRyYW5zcG9ydH0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NDUzYTMuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS1tb2R1bGUodEFwcGxpY2F0aW9uRXhjZXB0aW9uKS4KLQotLWluY2x1ZGUoInRocmlmdC5ocmwiKS4KLSUgLWluY2x1ZGUoInRBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwiKS4KLQotLWV4cG9ydChbbmV3LzAsIG5ldy8xLCBuZXcvMiwgcmVhZC8yLCB3cml0ZS8yXSkuCi0KLW5ldyhUeXBlLCBNZXNzYWdlKSAtPgotICAgICN0QXBwbGljYXRpb25FeGNlcHRpb257dHlwZT1UeXBlLCBtZXNzYWdlPU1lc3NhZ2V9LgotCi1uZXcoKSAgICAgLT4gbmV3KD90QXBwbGljYXRpb25FeGNlcHRpb25fVU5LTk9XTiwgbmlsKS4gJSBXQVRDSAotbmV3KFR5cGUpIC0+IG5ldyhUeXBlLCBuaWwpLiAlIFdBVENICi0KLXJlYWQoVGhpcywgSXByb3QpIC0+Ci0gICAgP00wKElwcm90LCByZWFkU3RydWN0QmVnaW4pLAotICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCksCi0gICAgP00wKElwcm90LCByZWFkU3RydWN0RW5kKSwKLSAgICBUaGlzLgotCi1yZWFkX3doaWxlX2xvb3AoVGhpcywgSXByb3QpIC0+Ci0gICAge18sIEZ0eXBlLCBGaWR9ID0gP00wKElwcm90LCByZWFkRmllbGRCZWdpbiksICUgZmllbGQgPSB7Zm5hbWUsIGZ0eXBlLCBmaWR9Ci0KLSAgICBpZiAKLQlGdHlwZSA9PSA/dFR5cGVfU1RPUCAtPgotCSAgICBUaGlzOwotCShGaWQgPT0gMSkgYW5kIChGdHlwZSA9PSA/dFR5cGVfU1RSSU5HKSAtPgotCSAgICBUaGlzMSA9IFRoaXMjdEFwcGxpY2F0aW9uRXhjZXB0aW9ue21lc3NhZ2U9P00wKElwcm90LCByZWFkU3RyaW5nKX0sCi0JICAgID9NMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKLQkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMxLCBJcHJvdCk7Ci0KLQlGaWQgPT0gMSAtPgotCSAgICA/TTAoSXByb3QsIHNraXApLAotCSAgICA/TTAoSXByb3QsIHJlYWRGaWVsZEVuZCksCi0JICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzLCBJcHJvdCk7Ci0KLQkoRmlkID09IDIpIGFuZCAoRnR5cGUgPT0gP3RUeXBlX0kzMikgLT4KLQkgICAgVGhpczEgPSBUaGlzI3RBcHBsaWNhdGlvbkV4Y2VwdGlvbnt0eXBlPT9NMChJcHJvdCwgcmVhZEkzMil9LAotCSAgICA/TTAoSXByb3QsIHJlYWRGaWVsZEVuZCksCi0JICAgIHJlYWRfd2hpbGVfbG9vcChUaGlzMSwgSXByb3QpOwotCi0gICAgICAgIHRydWUgLT4gCi0JICAgID9NMChJcHJvdCwgc2tpcCksCi0JICAgID9NMChJcHJvdCwgcmVhZEZpZWxkRW5kKSwKLQkgICAgcmVhZF93aGlsZV9sb29wKFRoaXMsIElwcm90KQotICAgIGVuZC4KLQotd3JpdGUoVGhpcywgT3Byb3QpIC0+CQotICAgID9NMShPcHJvdCwgd3JpdGVTdHJ1Y3RCZWdpbiwgInRBcHBsaWNhdGlvbkV4Y2VwdGlvbiIpLAotICAgIE1lc3NhZ2UgPSBUaGlzI3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5tZXNzYWdlLAotICAgIFR5cGUgPSBUaGlzI3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi50eXBlLAotICAgIGlmCU1lc3NhZ2UgLz0gdW5kZWZpbmVkIC0+Ci0JICAgID9NMyhPcHJvdCwgd3JpdGVGaWVsZEJlZ2luLCAibWVzc2FnZSIsID90VHlwZV9TVFJJTkcsIDEpLAotCSAgICA/TTEoT3Byb3QsIHdyaXRlU3RyaW5nLCBNZXNzYWdlKSwKLQkgICAgP00wKE9wcm90LCB3cml0ZUZpZWxkRW5kKTsKLSAgICAgICAgdHJ1ZSAtPiBvawotICAgIGVuZCwKLSAgICBpZiAgVHlwZSAvPSB1bmRlZmluZWQgLT4gCi0JICAgID9NMyhPcHJvdCwgd3JpdGVGaWVsZEJlZ2luLCAidHlwZSIsID90VHlwZV9JMzIsIDIpLAotCSAgICA/TTEoT3Byb3QsIHdyaXRlSTMyLCBUeXBlKSwKLQkgICAgP00wKE9wcm90LCB3cml0ZUZpZWxkRW5kKTsKLSAgICAgICAgdHJ1ZSAtPiBvawotICAgIGVuZCwKLSAgICA/TTAoT3Byb3QsIHdyaXRlRmllbGRTdG9wKSwKLSAgICA/TTAoT3Byb3QsIHdyaXRlU3RydWN0RW5kKS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90QXBwbGljYXRpb25FeGNlcHRpb24uaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjFmNDAxLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RBcHBsaWNhdGlvbkV4Y2VwdGlvbi5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSUgVEFwcGxpY2F0aW9uRXhjZXB0aW9uCi0tZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9VTktOT1dOLCAwKS4KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV05fTUVUSE9ELCAxKS4KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX0lOVkFMSURfTUVTU0FHRV9UWVBFLCAyKS4KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX1dST05HX01FVEhPRF9OQU1FLCAzKS4KLS1kZWZpbmUodEFwcGxpY2F0aW9uRXhjZXB0aW9uX0JBRF9TRVFVRU5DRV9JRCwgNCkuCi0tZGVmaW5lKHRBcHBsaWNhdGlvbkV4Y2VwdGlvbl9NSVNTSU5HX1JFU1VMVCwgNSkuCi0KLS1yZWNvcmQodEFwcGxpY2F0aW9uRXhjZXB0aW9uLCB7bWVzc2FnZSwgdHlwZT0/dEFwcGxpY2F0aW9uRXhjZXB0aW9uX1VOS05PV059KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RFeGNlcHRpb24uZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvdEV4Y2VwdGlvbi5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNGE5ZTguLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdEV4Y2VwdGlvbi5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLS1tb2R1bGUodEV4Y2VwdGlvbikuCi0taW5jbHVkZSgidEV4Y2VwdGlvbi5ocmwiKS4KLS1leHBvcnQoW25ldy8wXSkuCi0KLW5ldygpIC0+Ci0gICAgI3RFeGNlcHRpb257fS4KLQpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdEV4Y2VwdGlvbi5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90RXhjZXB0aW9uLmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxMDU1MS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90RXhjZXB0aW9uLmhybAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS1yZWNvcmQodEV4Y2VwdGlvbiwge21lc3NhZ2V9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RocmlmdC5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90aHJpZnQuaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDVkNjFjLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RocmlmdC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0tZGVmaW5lKENMQVNTKE9iaiksIGVsZW1lbnQoMSxPYmopKS4KLQotLWRlZmluZShNMChPYmosIE1ldGhvZCksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmopKSkuCi0tZGVmaW5lKE0xKE9iaiwgTWV0aG9kLCBBcmcxKSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSkpKS4KLS1kZWZpbmUoTTIoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyKSkpLgotLWRlZmluZShNMyhPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMyksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIsIEFyZzMpKSkuCi0tZGVmaW5lKE00KE9iaiwgTWV0aG9kLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSwgKCg/Q0xBU1MoT2JqKSk6TWV0aG9kKE9iaiwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCkpKS4KLS1kZWZpbmUoTTUoT2JqLCBNZXRob2QsIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpLCAoKD9DTEFTUyhPYmopKTpNZXRob2QoT2JqLCBBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSkpLgotLWRlZmluZShNNihPYmosIE1ldGhvZCwgQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiksICgoP0NMQVNTKE9iaikpOk1ldGhvZChPYmosIEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpKSkuCi0KLS1kZWZpbmUoQVRUUihYKSwgVGhpcyM/TU9EVUxFLlgpLgotCi0lJSBUVHlwZQotLWRlZmluZSh0VHlwZV9TVE9QLCAwKS4KLS1kZWZpbmUodFR5cGVfVk9JRCwgMSkuCi0tZGVmaW5lKHRUeXBlX0JPT0wsIDIpLgotLWRlZmluZSh0VHlwZV9CWVRFLCAzKS4KLS1kZWZpbmUodFR5cGVfRE9VQkxFLCA0KS4KLS1kZWZpbmUodFR5cGVfSTE2LCA2KS4KLS1kZWZpbmUodFR5cGVfSTMyLCA4KS4KLS1kZWZpbmUodFR5cGVfSTY0LCAxMCkuCi0tZGVmaW5lKHRUeXBlX1NUUklORywgMTEpLgotLWRlZmluZSh0VHlwZV9TVFJVQ1QsIDEyKS4KLS1kZWZpbmUodFR5cGVfTUFQLCAxMykuCi0tZGVmaW5lKHRUeXBlX1NFVCwgMTQpLgotLWRlZmluZSh0VHlwZV9MSVNULCAxNSkuCi0KLSUgdG1lc3NhZ2V0eXBlCi0tZGVmaW5lKHRNZXNzYWdlVHlwZV9DQUxMLCAxKS4KLS1kZWZpbmUodE1lc3NhZ2VUeXBlX1JFUExZLCAyKS4KLS1kZWZpbmUodE1lc3NhZ2VUeXBlX0VYQ0VQVElPTiwgMykuCi0KLSUgVFByb2Nlc3NvcgotJSA/Ci0KLS1pbmNsdWRlKCJ0aHJpZnQvdEFwcGxpY2F0aW9uRXhjZXB0aW9uLmhybCIpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNjODA5ZC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdEJ1ZmZlcmVkVHJhbnNwb3J0LmVybAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS1tb2R1bGUodEJ1ZmZlcmVkVHJhbnNwb3J0KS4KLQotLWluY2x1ZGUoInRocmlmdC90aHJpZnQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsIikuCi0KLS1leHBvcnQoW25ldy8xLCBpc09wZW4vMSwgb3Blbi8xLCBjbG9zZS8xLCByZWFkLzIsIHdyaXRlX01VVEFCTEUvMiwgZmx1c2hfTVVUQUJMRS8xXSkuCi0KLW5ldyhUcmFuc3BvcnQpIC0+Ci0gICAgI3RCdWZmZXJlZFRyYW5zcG9ydHt0cmFuc3BvcnQ9VHJhbnNwb3J0LCB3YnVmPSIifS4KLQotdHJhbnNwb3J0KFRoaXMpIC0+ICUgbG9jYWwgYWNjZXNzb3IKLSAgICBUaGlzI3RCdWZmZXJlZFRyYW5zcG9ydC50cmFuc3BvcnQuCi0KLWlzT3BlbihUaGlzKSAtPgotICAgID9NMCh0cmFuc3BvcnQoVGhpcyksIGlzT3BlbikuCi0KLW9wZW4oVGhpcykgLT4KLSAgICA/TTAodHJhbnNwb3J0KFRoaXMpLCBvcGVuKS4KLQotY2xvc2UoVGhpcykgLT4KLSAgICA/TTAodHJhbnNwb3J0KFRoaXMpLCBjbG9zZSkuCi0KLXJlYWQoVGhpcywgU3opIC0+Ci0gICAgP00xKHRyYW5zcG9ydChUaGlzKSwgcmVhZCwgU3opLgotCi13cml0ZV9NVVRBQkxFKFRoaXMsIEJ1ZikgLT4gJSBiZSBzdXJlIHRvIHJlYmluZCBUaGlzIHRvIHRoZSByZXR2YWwKLSAgICBXYnVmID0gVGhpcyN0QnVmZmVyZWRUcmFuc3BvcnQud2J1ZiwKLSAgICBUaGlzI3RCdWZmZXJlZFRyYW5zcG9ydHt3YnVmPVdidWYrK0J1Zn0uICUgVE9ETzogKysgZWZmaWNpZW5jeT8KLQotZmx1c2hfTVVUQUJMRShUaGlzKSAtPiAlIGJlIHN1cmUgdG8gcmViaW5kIFRoaXMgdG8gdGhlIHJldHZhbAotICAgIFdidWYgPSBUaGlzI3RCdWZmZXJlZFRyYW5zcG9ydC53YnVmLAotICAgID9NMSh0cmFuc3BvcnQoVGhpcyksIHdyaXRlLCBXYnVmKSwKLSAgICA/TTAodHJhbnNwb3J0KFRoaXMpLCBmbHVzaCksCi0gICAgVGhpcyN0QnVmZmVyZWRUcmFuc3BvcnR7d2J1Zj0iIn0uICUgVE9ETzogKysgZWZmaWNpZW5jeT8KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90QnVmZmVyZWRUcmFuc3BvcnQuaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZDcxZTEuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RCdWZmZXJlZFRyYW5zcG9ydC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0tcmVjb3JkKHRCdWZmZXJlZFRyYW5zcG9ydCwge3RyYW5zcG9ydCwgd2J1Zn0pLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuZXJsIGIvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTZXJ2ZXJTb2NrZXQuZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzlhZjZlLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmVybAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS1tb2R1bGUodFNlcnZlclNvY2tldCkuCi0taW5jbHVkZSgidFNlcnZlclNvY2tldC5ocmwiKS4KLQotLWV4cG9ydChbbmV3LzEsIGxpc3Rlbl9NVVRBQkxFLzEsIGFjY2VwdF9NVVRBQkxFLzEsIGNsb3NlLzFdKS4KLQotbmV3KFBvcnQpIC0+Ci0gICAgI3RTZXJ2ZXJTb2NrZXR7cG9ydD1Qb3J0LCBoYW5kbGU9bmlsfS4KLQotbGlzdGVuX01VVEFCTEUoVGhpcykgLT4KLSAgICBQb3J0ID0gVGhpcyN0U2VydmVyU29ja2V0LnBvcnQsCi0gICAgT3B0aW9ucyA9IFtiaW5hcnksIHtwYWNrZXQsIDB9LCB7YWN0aXZlLCBmYWxzZX1dLCAlIHdhcyBbXQotCi0gICAgY2FzZSBnZW5fdGNwOmxpc3RlbihQb3J0LCBPcHRpb25zKSBvZiAKLQl7b2ssIExpc3RlblNvY2tldH0gLT4KLQkgICAgVGhpcyN0U2VydmVyU29ja2V0e2hhbmRsZT1MaXN0ZW5Tb2NrZXR9Ci0JJSB7ZXJyb3IsIF99IC0+IAotCSUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPwotICAgIGVuZC4KLQotYWNjZXB0X01VVEFCTEUoVGhpcykgLT4KLSAgICBpZiAKLQlUaGlzI3RTZXJ2ZXJTb2NrZXQuaGFuZGxlIC89IG5pbCAtPgotCSAgICBjYXNlIGdlbl90Y3A6YWNjZXB0KFRoaXMjdFNlcnZlclNvY2tldC5oYW5kbGUpIG9mCi0JCXtvaywgU29ja2V0fSAtPgotCQkgICAgdFNvY2tldDpzZXRIYW5kbGVfTVVUQUJMRSggdFNvY2tldDpuZXcoKSwgU29ja2V0ICkKLQkgICAgICAgICUge2Vycm9yLCBffSAtPiAKLSAgICAgICAgICAgICAgICAlIFRPRE86IG5vIGVycm9yIGhhbmRsaW5nIGluIFJ1YnkgdmVyc2lvbj8KLQkgICAgZW5kOwotCXRydWUgLT4KLQkgICAgbmlsCi0gICAgZW5kLgotCi1jbG9zZShUaGlzKSAtPgotICAgIGlmIAotIAlUaGlzI3RTZXJ2ZXJTb2NrZXQuaGFuZGxlIC89IG5pbCAtPgotCSAgICBjYXNlIGdlbl90Y3A6Y2xvc2UoVGhpcyN0U2VydmVyU29ja2V0LmhhbmRsZSkgb2YgCi0JCW9rIC0+Ci0JCSAgICBvawotCSAgICAgICAgJSB7ZXJyb3IsIF99IC0+IAotICAgICAgICAgICAgICAgICUgVE9ETzogbm8gZXJyb3IgaGFuZGxpbmcgaW4gUnVieSB2ZXJzaW9uPwotCSAgICBlbmQ7Ci0JdHJ1ZSAtPgotCSAgICBvawotICAgIGVuZC4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmhybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmhybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlZDMyMC4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNlcnZlclNvY2tldC5ocmwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0tcmVjb3JkKHRTZXJ2ZXJTb2NrZXQsIHtwb3J0LCBoYW5kbGV9KS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U29ja2V0LmVybCBiL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90U29ja2V0LmVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUwYzNiOS4uMDAwMDAwMAotLS0gYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNvY2tldC5lcmwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0tbW9kdWxlKHRTb2NrZXQpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIikuCi0lIC1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RUcmFuc3BvcnQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3RyYW5zcG9ydC90U29ja2V0LmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yLCBzZXRIYW5kbGVfTVVUQUJMRS8yLCBvcGVuX01VVEFCTEUvMSwgaXNPcGVuLzEsIHdyaXRlLzIsIHJlYWQvMiwgY2xvc2VfTVVUQUJMRS8xLCByZWFkQWxsLzJdKS4KLQotbmV3KEhvc3QsIFBvcnQpIC0+Ci0gICAgI3RTb2NrZXR7aG9zdD1Ib3N0LCBwb3J0PVBvcnQsIGhhbmRsZT1uaWx9LiAlIFdBVENICi0KLW5ldygpICAgICAtPiBuZXcoImxvY2FsaG9zdCIsIDkwOTApLgotbmV3KEhvc3QpIC0+IG5ldyhIb3N0LCA5MDkwKS4KLSAgICAKLXNldEhhbmRsZV9NVVRBQkxFKFRoaXMsIEhhbmRsZSkgLT4KLSAgICBUaGlzI3RTb2NrZXR7aGFuZGxlPUhhbmRsZX0uCi0KLW9wZW5fTVVUQUJMRShUaGlzKSAtPiAKLSAgICBIb3N0ID0gVGhpcyN0U29ja2V0Lmhvc3QsCi0gICAgUG9ydCA9IFRoaXMjdFNvY2tldC5wb3J0LAotICAgIE9wdGlvbnMgPSBbXSwKLQotICAgIGNhc2UgZ2VuX3RjcDpjb25uZWN0KEhvc3QsIFBvcnQsIE9wdGlvbnMpIG9mCi0Je2Vycm9yLCBffSAtPgotCSAgICB0aHJvdyh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldygKLQkJICAgID90VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLAotCQkgICAgIkNvdWxkIG5vdCBjb25uZWN0IHRvICIgKysgSG9zdCArKyAiOiIgKysgUG9ydCkKLQkJICksCi0JICAgIHtlcnJvciwgVGhpc307ICUgY3Bpcm8gbm90IHJlYWNoZWQ/Ci0Je29rLCBTb2NrZXR9IC0+Ci0JICAgIHtvaywgVGhpcyN0U29ja2V0e2hhbmRsZT1Tb2NrZXR9fQotICAgIGVuZC4KLQotaGFuZGxlKFRoaXMpIC0+Ci0gICAgVGhpcyN0U29ja2V0LmhhbmRsZS4KLQotaXNPcGVuKFRoaXMpIC0+Ci0gICAgaGFuZGxlKFRoaXMpIC89IG5pbC4KLQotd3JpdGUoVGhpcywgU3RyKSAtPgotICAgIFZhbCA9IGdlbl90Y3A6c2VuZChoYW5kbGUoVGhpcyksIFN0ciksCi0KLSAgICAlJSBpbzpmb3JtYXQoIldSSVRFIHx+cHwofnApfm4iLCBbU3RyLFZhbF0pLAotICAgIAotICAgIGNhc2UgVmFsIG9mCi0Je2Vycm9yLCBffSAtPgotCSAgICB0aHJvdyh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldyg/dFRyYW5zcG9ydEV4Y2VwdGlvbl9OT1RfT1BFTiwgImluIHdyaXRlIikpOwotCW9rIC0+Ci0JICAgIG9rCi0gICAgZW5kLgotCi1yZWFkKFRoaXMsIFN6KSAtPgotICAgIGNhc2UgZ2VuX3RjcDpyZWN2KGhhbmRsZShUaGlzKSwgU3opIG9mCi0Je29rLCBbXX0gLT4KLQkgICAgeyBIb3N0LCBQb3J0IH0gPSB7IFRoaXMjdFNvY2tldC5ob3N0LCBUaGlzI3RTb2NrZXQucG9ydCB9LAotCSAgICB0aHJvdyh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldyg/dFRyYW5zcG9ydEV4Y2VwdGlvbl9VTktOT1dOLCAiVFNvY2tldDogQ291bGQgbm90IHJlYWQgIiArKyBTeiArKyAiYnl0ZXMgZnJvbSAiICsrIEhvc3QgKysgIjoiICsrIFBvcnQpKTsKLQl7b2ssIERhdGF9IC0+Ci0JICAgIERhdGE7Ci0Je2Vycm9yLCBFcnJvcn0gLT4KLQkgICAgaW86Zm9ybWF0KCJpbiB0U29ja2V0OnJlYWQvMjogZ2VuX3RjcDpyZWN2KH5wLCB+cCkgPT4ge2Vycm9yLCB+cH1+biIsCi0JCSAgICAgIFtoYW5kbGUoVGhpcyksIFN6LCBFcnJvcl0pLAotCSAgICB0aHJvdyh0VHJhbnNwb3J0RXhjZXB0aW9uOm5ldyg/dFRyYW5zcG9ydEV4Y2VwdGlvbl9OT1RfT1BFTiwgImluIHRTb2NrZXQ6cmVhZC8yOiBnZW5fdGNwOnJlY3YiKSkKLQllbmQuCi0JICAgIAotY2xvc2VfTVVUQUJMRShUaGlzKSAtPgotICAgIGlmCi0JVGhpcyN0U29ja2V0LmhhbmRsZSA9PSBuaWwgLT4KLQkgICAgVGhpczsKLQl0cnVlIC0+Ci0JICAgIGdlbl90Y3A6Y2xvc2UoaGFuZGxlKFRoaXMpKSwKLQkgICAgVGhpcyN0U29ja2V0e2hhbmRsZT1uaWx9Ci0gICAgZW5kLgotCi1yZWFkQWxsKFRoaXMsIFN6KSAtPgotICAgIHJlYWRBbGxfbG9vcChUaGlzLCBTeiwgIiIsIDApLgotCi1yZWFkQWxsX2xvb3AoVGhpcywgU3osIEJ1ZmYsIEhhdmUpIC0+Ci0gICAgaWYgCi0JSGF2ZSA8IFN6IC0+Ci0JICAgIENodW5rID0gP00xKFRoaXMsIHJlYWQsIFN6IC0gSGF2ZSksCi0KLQkgICAgJSUgbWFuIGdlbl90Y3A6Ci0JICAgICUlIGV4YWN0bHkgTGVuZ3RoIGJ5dGVzIGFyZSByZXR1cm5lZCwgb3IgYW4gZXJyb3I7IAotCSAgICAlJSBwb3NzaWJseSBkaXNjYXJkaW5nIGxlc3MgdGhhbiBMZW5ndGggYnl0ZXMgb2YgZGF0YSB3aGVuIAotCSAgICAlJSB0aGUgc29ja2V0IGdldHMgY2xvc2VkIGZyb20gdGhlIG90aGVyIHNpZGUuCi0KLQkgICAgJSUgaW86Zm9ybWF0KCJSRUFEIHx+cHx+biIsIFtDaHVua10pLAotCi0JICAgIEhhdmUxID0gSGF2ZSArIChTei1IYXZlKSwgJSBsZW5ndGgoQ2h1bmspCi0JICAgIEJ1ZmYxID0gQnVmZiArKyBDaHVuaywgJSBUT0RPOiArKyBlZmZpY2llbmN5PwotCSAgICByZWFkQWxsX2xvb3AoVGhpcywgU3osIEJ1ZmYxLCBIYXZlMSk7Ci0JdHJ1ZSAtPgotCSAgICBCdWZmCi0gICAgZW5kLgotCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNvY2tldC5ocmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFNvY2tldC5ocmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMWNjMjAuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RTb2NrZXQuaHJsCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLXJlY29yZCh0U29ja2V0LCB7aG9zdCwgcG9ydCwgaGFuZGxlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydC5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydC5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYjcyMjguLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RUcmFuc3BvcnQuZXJsCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0tbW9kdWxlKHRUcmFuc3BvcnQpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgotCmRpZmYgLS1naXQgYS9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5lcmwgYi9saWIvZXJsL3NyYy1sb29zZS90cmFuc3BvcnQvdFRyYW5zcG9ydEV4Y2VwdGlvbi5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMWJiMjAuLjAwMDAwMDAKLS0tIGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uZXJsCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLW1vZHVsZSh0VHJhbnNwb3J0RXhjZXB0aW9uKS4KLQotLWluY2x1ZGUoInRocmlmdC90aHJpZnQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybCIpLgotCi0tZXhwb3J0KFtuZXcvMCwgbmV3LzEsIG5ldy8yLCBtZXNzYWdlLzFdKS4KLQotbmV3KFR5cGUsIE1lc3NhZ2UpIC0+Ci0gICAgI3RUcmFuc3BvcnRFeGNlcHRpb257dHlwZSA9IFR5cGUsIG1lc3NhZ2UgPSBNZXNzYWdlfS4KLQotbmV3KCkgICAgIC0+IG5ldyg/dFRyYW5zcG9ydEV4Y2VwdGlvbl9VTktOT1dOLCBuaWwpLiAlIFdBVENICi1uZXcoVHlwZSkgLT4gbmV3KFR5cGUsIG5pbCkuICUgV0FUQ0gKLQotbWVzc2FnZShUaGlzKSAtPgotICAgID9BVFRSKG1lc3NhZ2UpLgpkaWZmIC0tZ2l0IGEvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsIGIvbGliL2VybC9zcmMtbG9vc2UvdHJhbnNwb3J0L3RUcmFuc3BvcnRFeGNlcHRpb24uaHJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTg1NTRiLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvc3JjLWxvb3NlL3RyYW5zcG9ydC90VHJhbnNwb3J0RXhjZXB0aW9uLmhybAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX1VOS05PV04sIDApLgotLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX05PVF9PUEVOLCAxKS4KLS1kZWZpbmUodFRyYW5zcG9ydEV4Y2VwdGlvbl9BTFJFQURZX09QRU4sIDIpLgotLWRlZmluZSh0VHJhbnNwb3J0RXhjZXB0aW9uX1RJTUVEX09VVCwgMykuCi0tZGVmaW5lKHRUcmFuc3BvcnRFeGNlcHRpb25fRU5EX09GX0ZJTEUsIDQpLgotCi0tcmVjb3JkKHRUcmFuc3BvcnRFeGNlcHRpb24sIHt0eXBlLCBtZXNzYWdlfSkuCmRpZmYgLS1naXQgYS9saWIvZXJsL3RocmlmdCBiL2xpYi9lcmwvdGhyaWZ0CmRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAxYWI0YzVjLi4wMDAwMDAwCi0tLSBhL2xpYi9lcmwvdGhyaWZ0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotc3JjLWxvb3NlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9NYWtlZmlsZSBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGYyYzhhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitNT0RVTEVTID0gXAorCXNyYworCithbGwgY2xlYW4gZG9jczoKKwlmb3IgZGlyIGluICQoTU9EVUxFUyk7IGRvIFwKKwkJKGNkICQkZGlyOyAke01BS0V9ICRAKTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvaW5jbHVkZS9ibGFua19hcHAuaHJsIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9pbmNsdWRlL2JsYW5rX2FwcC5ocmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvaW5jbHVkZS9ibGFua19hcHAuaHJsCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9NYWtlZmlsZSBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzYjA2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9NYWtlZmlsZQpAQCAtMCwwICsxLDExMiBAQAorIyAkSWQ6IE1ha2VmaWxlLHYgMS4zIDIwMDQvMDgvMTMgMTY6MzU6NTkgbWxvZ2FuIEV4cCAkCisjCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL290cC5taworaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9jb2xvcnMubWsKK2luY2x1ZGUgLi4vLi4vLi4vYnVpbGQvYnVpbGR0YXJnZXRzLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBsaWNhdGlvbiB2ZXJzaW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5jbHVkZSAuLi92c24ubWsKK0FQUF9OQU1FPSUlQVBQX05BTUUlJQorUEZYPSUlUEZYJSUKK1ZTTj0kKCUlQVBQX05BTUVfVVBQRVJfQ0FTRSUlX1ZTTikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluc3RhbGwgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24KKyMgV0FSTklORzogSU5TVEFMTF9ESVIgdGhlIGNvbW1hbmQgdG8gaW5zdGFsbCBhIGRpcmVjdG9yeS4KKyMgICAgICAgICAgSU5TVEFMTF9EU1QgaXMgdGhlIHRhcmdldCBkaXJlY3RvcnkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSU5TVEFMTF9EU1QgPSAkKEVSTEFOR19PVFApL2xpYi8kKEFQUF9OQU1FKS0kKFZTTikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRhcmdldCBTcGVjcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTU9EVUxFUyA9ICQoc2hlbGwgbHMgKi5lcmwgfCBzZWQgcy8uZXJsLy8pCitNT0RVTEVTX0NPTU1BID0gJChzaGVsbCBscyAqLmVybCB8IHNlZCBzL1xcLmVybC8sLykKKworSFJMX0ZJTEVTPQorSU5URVJOQUxfSFJMX0ZJTEVTPSAkKEFQUF9OQU1FKS5ocmwKK0VSTF9GSUxFUz0gJChNT0RVTEVTOiU9JS5lcmwpCitET0NfRklMRVM9JChFUkxfRklMRVMpCisKK0FQUF9GSUxFPSAkKEFQUF9OQU1FKS5hcHAKK0FQUFVQX0ZJTEU9ICQoQVBQX05BTUUpLmFwcHVwCisKK0FQUF9TUkM9ICQoQVBQX0ZJTEUpLnNyYworQVBQVVBfU1JDPSAkKEFQUFVQX0ZJTEUpLnNyYworCitBUFBfVEFSR0VUPSAkKEVCSU4pLyQoQVBQX0ZJTEUpCitBUFBVUF9UQVJHRVQ9ICQoRUJJTikvJChBUFBVUF9GSUxFKQorCitCRUFNUz0gJChNT0RVTEVTOiU9JChFQklOKS8lLiQoRU1VTEFUT1IpKQorVEFSR0VUX0ZJTEVTPSAkKEJFQU1TKSAkKEFQUF9UQVJHRVQpICQoQVBQVVBfVEFSR0VUKQorCitXRUJfVEFSR0VUPS92YXIveWF3cy93d3cvJChBUFBfTkFNRSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZMQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRVJMX0ZMQUdTICs9CitFUkxfQ09NUElMRV9GTEFHUyArPSAtSS4uL2luY2x1ZGUgLUkuLi8uLi9mc2xpYi9pbmNsdWRlIC1JLi4vLi4vc3lzdGVtX3N0YXR1cy9pbmNsdWRlIAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGFyZ2V0cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FsbCBkZWJ1ZyBvcHQ6ICQoRUJJTikgJChUQVJHRVRfRklMRVMpIAorCisjJChFQklOKS9ybV9sb2dnZXIuYmVhbTogJChBUFBfTkFNRSkuaHJsCitpbmNsdWRlIC4uLy4uLy4uL2J1aWxkL2RvY3MubWsKKworIyBOb3RlOiBJbiB0aGUgb3Blbi1zb3VyY2UgYnVpbGQgY2xlYW4gbXVzdCBub3QgZGVzdHJveSB0aGUgcHJlbG9hZGVkCisjIGJlYW0gZmlsZXMuCitjbGVhbjoKKwlybSAtZiAkKFRBUkdFVF9GSUxFUykKKwlybSAtZiBjb3JlCisJcm0gLXJmICQoRUJJTikKKwlybSAtcmYgKmh0bWwKKworJChFQklOKToKKwlta2RpciAkKEVCSU4pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTcGVjaWFsIEJ1aWxkIFRhcmdldHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiskKEFQUF9UQVJHRVQpOiAkKEFQUF9TUkMpIC4uL3Zzbi5tayAkKEJFQU1TKQorCXNlZCAtZSAnczslVlNOJTskKFZTTik7JyBcCisJCS1lICdzOyVQRlglOyQoUEZYKTsnIFwKKwkJLWUgJ3M7JUFQUF9OQU1FJTskKEFQUF9OQU1FKTsnIFwKKwkJLWUgJ3M7JU1PRFVMRVMlOyVNT0RVTEVTJSQoTU9EVUxFU19DT01NQSk7JyBcCisJCSQ8ID4gJDwiLnRtcCIgCisJc2VkIC1lICdzLyVNT0RVTEVTJVwoLipcKSwvXDEvJyBcCisJCSQ8Ii50bXAiID4gJEAgCisJcm0gJDwiLnRtcCIKKworCiskKEFQUFVQX1RBUkdFVCk6ICQoQVBQVVBfU1JDKSAuLi92c24ubWsKKwlzZWQgLWUgJ3M7JVZTTiU7JChWU04pOycgJDwgPiAkQAorCiskKFdFQl9UQVJHRVQpOiAuLi9tYXJrdXAvKiAKKwlybSAtcmYgJChXRUJfVEFSR0VUKSAKKwlta2RpciAkKFdFQl9UQVJHRVQpIAorCWNwIC1yIC4uL21hcmt1cC8gJChXRUJfVEFSR0VUKQorCWNwIC1yIC4uL3NraW5zLyAkKFdFQl9UQVJHRVQpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJbnN0YWxsIFRhcmdldAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitpbnN0YWxsOiBhbGwgJChXRUJfVEFSR0VUKQorIwkkKElOU1RBTExfRElSKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RBVEEpICQoRVJMX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RBVEEpICQoSU5URVJOQUxfSFJMX0ZJTEVTKSAkKElOU1RBTExfRFNUKS9zcmMKKyMJJChJTlNUQUxMX0RJUikgJChJTlNUQUxMX0RTVCkvaW5jbHVkZQorIwkkKElOU1RBTExfREFUQSkgJChIUkxfRklMRVMpICQoSU5TVEFMTF9EU1QpL2luY2x1ZGUKKyMJJChJTlNUQUxMX0RJUikgJChJTlNUQUxMX0RTVCkvZWJpbgorIwkkKElOU1RBTExfREFUQSkgJChUQVJHRVRfRklMRVMpICQoSU5TVEFMTF9EU1QpL2ViaW4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JhX3NlcnZlci5lcmwgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9iYV9zZXJ2ZXIuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhOThmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9iYV9zZXJ2ZXIuZXJsCkBAIC0wLDAgKzEsMTI0IEBACislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSUgQGRvYyAgCislJSUgQGVuZAorJSUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW1vZHVsZSglJVBGWCUlX3NlcnZlcikuCisKKy1iZWhhdmlvdXIoZ2VuX3NlcnZlcikuCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBJbmNsdWRlIGZpbGVzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistaW5jbHVkZSgiJSVBUFBfTkFNRSUlLmhybCIpLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBFeHRlcm5hbCBleHBvcnRzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZXhwb3J0KFsKKwkgc3RhcnRfbGluay8wLAorCSBzdG9wLzAKKwkgXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIGdlbl9zZXJ2ZXIgY2FsbGJhY2tzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZXhwb3J0KFtpbml0LzEsIGhhbmRsZV9jYWxsLzMsIGhhbmRsZV9jYXN0LzIsIGhhbmRsZV9pbmZvLzIsIHRlcm1pbmF0ZS8yLCBjb2RlX2NoYW5nZS8zXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIHJlY29yZCBkZWZpbml0aW9ucworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXJlY29yZChzdGF0ZSwge30pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBtYWNybyBkZWZpbml0aW9ucworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBFeHRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEBkb2MgU3RhcnRzIHRoZSBzZXJ2ZXIuCislJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0KKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXJ0X2xpbmsoKSAtPgorICAgIGdlbl9zZXJ2ZXI6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSwgW10pLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIFN0b3BzIHRoZSBzZXJ2ZXIuCislJSBAc3BlYyBzdG9wKCkgLT4gb2sKKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0b3AoKSAtPgorICAgIGdlbl9zZXJ2ZXI6Y2FzdCg/U0VSVkVSLCBzdG9wKS4KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgU2VydmVyIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaW5pdC8xCislJSBEZXNjcmlwdGlvbjogSW5pdGlhdGVzIHRoZSBzZXJ2ZXIKKyUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgIHwKKyUlICAgICAgICAgIHtvaywgU3RhdGUsIFRpbWVvdXR9IHwKKyUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgIHwKKyUlICAgICAgICAgIHtzdG9wLCBSZWFzb259CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbml0KFtdKSAtPgorICAgIHtvaywgI3N0YXRle319LgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2NhbGwvMworJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhbGwgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtyZXBseSwgUmVwbHksIFN0YXRlfSAgICAgICAgICB8CislJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBTdGF0ZSwgVGltZW91dH0gfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlfSAgICAgICAgICAgICAgIHwKKyUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gICAgICB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgU3RhdGV9ICAgfCAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2hhbmRsZV9jYWxsKFJlcXVlc3QsIEZyb20sIFN0YXRlKSAtPgorICAgIFJlcGx5ID0gb2ssCisgICAge3JlcGx5LCBSZXBseSwgU3RhdGV9LgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2Nhc3QvMgorJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGNhc3QgbWVzc2FnZXMKKyUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfAorJSUgICAgICAgICAge25vcmVwbHksIFN0YXRlLCBUaW1lb3V0fSB8CislJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGFuZGxlX2Nhc3Qoc3RvcCwgU3RhdGUpIC0+CisgICAge3N0b3AsIG5vcm1hbCwgU3RhdGV9OworaGFuZGxlX2Nhc3QoTXNnLCBTdGF0ZSkgLT4KKyAgICB7bm9yZXBseSwgU3RhdGV9LgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBGdW5jdGlvbjogaGFuZGxlX2luZm8vMgorJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGFsbCBub24gY2FsbC9jYXN0IG1lc3NhZ2VzCislJSBSZXR1cm5zOiB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgIHwKKyUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfAorJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2hhbmRsZV9pbmZvKEluZm8sIFN0YXRlKSAtPgorICAgIHtub3JlcGx5LCBTdGF0ZX0uCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmN0aW9uOiB0ZXJtaW5hdGUvMgorJSUgRGVzY3JpcHRpb246IFNodXRkb3duIHRoZSBzZXJ2ZXIKKyUlIFJldHVybnM6IGFueSAoaWdub3JlZCBieSBnZW5fc2VydmVyKQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+CisgICAgb2suCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEZ1bmM6IGNvZGVfY2hhbmdlLzMKKyUlIFB1cnBvc2U6IENvbnZlcnQgcHJvY2VzcyBzdGF0ZSB3aGVuIGNvZGUgaXMgY2hhbmdlZAorJSUgUmV0dXJuczoge29rLCBOZXdTdGF0ZX0KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGUsIEV4dHJhKSAtPgorICAgIHtvaywgU3RhdGV9LgorCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSUgSW50ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9iYV9zdXAuZXJsIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmFfc3VwLmVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWY0OGQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmFfc3VwLmVybApAQCAtMCwwICsxLDc0IEBACislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSUgQGRvYyAgCislJSUgQGVuZAorJSUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW1vZHVsZSglJVBGWCUlX3N1cCkuCisKKy1iZWhhdmlvdXIoc3VwZXJ2aXNvcikuCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBJbmNsdWRlIGZpbGVzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEV4dGVybmFsIGV4cG9ydHMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1leHBvcnQoWworCSBzdGFydF9saW5rLzEKKyAgICAgICAgXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIEludGVybmFsIGV4cG9ydHMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1leHBvcnQoWworCSBpbml0LzEKKyAgICAgICAgXSkuCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIE1hY3JvcworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLgorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBSZWNvcmRzCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlIEV4dGVybmFsIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgQGRvYyBTdGFydHMgdGhlIHN1cGVydmlzb3IuCislJSBAc3BlYyBzdGFydF9saW5rKFN0YXJ0QXJncykgLT4ge29rLCBwaWQoKX0gfCBFcnJvcgorJSUgQGVuZAorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhcnRfbGluayhTdGFydEFyZ3MpIC0+CisgICAgc3VwZXJ2aXNvcjpzdGFydF9saW5rKHtsb2NhbCwgP1NFUlZFUn0sID9NT0RVTEUsIFtdKS4KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgU2VydmVyIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRnVuYzogaW5pdC8xCislJSBSZXR1cm5zOiB7b2ssICB7U3VwRmxhZ3MsICBbQ2hpbGRTcGVjXX19IHwKKyUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorJSUgICAgICAgICAge2Vycm9yLCBSZWFzb259ICAgCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbml0KFtdKSAtPgorICAgIFJlc3RhcnRTdHJhdGVneSAgICA9IG9uZV9mb3Jfb25lLAorICAgIE1heFJlc3RhcnRzICAgICAgICA9IDEwMDAsCisgICAgTWF4VGltZUJldFJlc3RhcnRzID0gMzYwMCwKKyAgICAKKyAgICBTdXBGbGFncyA9IHtSZXN0YXJ0U3RyYXRlZ3ksIE1heFJlc3RhcnRzLCBNYXhUaW1lQmV0UmVzdGFydHN9LAorICAgIAorICAgIENoaWxkU3BlY3MgPQorCVsKKwkgeyUlUEZYJSVfc2VydmVyLAorCSAgeyUlUEZYJSVfc2VydmVyLCBzdGFydF9saW5rLCBbXX0sCisJICBwZXJtYW5lbnQsCisJICAxMDAwLAorCSAgd29ya2VyLAorCSAgWyUlUEZYJSVfc2VydmVyXX0KKwkgXSwKKyAgICB7b2sse1N1cEZsYWdzLCBDaGlsZFNwZWNzfX0uCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJSBJbnRlcm5hbCBmdW5jdGlvbnMKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5hcHAuc3JjIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC9zcmMvYmxhbmtfYXBwLmFwcC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE1MTNmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5hcHAuc3JjCkBAIC0wLDAgKzEsNDEgQEAKKyUlJSAtKi0gbW9kZTplcmxhbmcgLSotCit7YXBwbGljYXRpb24sICVBUFBfTkFNRSUsCisgWworICAlIEEgcXVpY2sgZGVzY3JpcHRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgorICB7ZGVzY3JpcHRpb24sICJBbiBFcmxhbmcgQXBwbGljYXRpb24uIn0sCisKKyAgJSBUaGUgdmVyc2lvbiBvZiB0aGUgYXBwbGljYXRvbgorICB7dnNuLCAiJVZTTiUifSwKKworICAlIEFsbCBtb2R1bGVzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAKKyAge21vZHVsZXMsCisgICBbCisJJU1PRFVMRVMlCisgICBdfSwKKworICAlIEFsbCBvZiB0aGUgcmVnaXN0ZXJlZCBuYW1lcyB0aGUgYXBwbGljYXRpb24gdXNlcy4gVGhpcyBjYW4gYmUgaWdub3JlZC4KKyAge3JlZ2lzdGVyZWQsIFtdfSwKKworICAlIEFwcGxpY2F0aW9ucyB0aGF0IGFyZSB0byBiZSBzdGFydGVkIHByaW9yIHRvIHRoaXMgb25lLiBUaGlzIGNhbiBiZSBpZ25vcmVkCisgICUgbGVhdmUgaXQgYWxvbmUgdW5sZXNzIHlvdSB1bmRlcnN0YW5kIGl0IHdlbGwgYW5kIGxldCB0aGUgLnJlbCBmaWxlcyBpbiAKKyAgJSB5b3VyIHJlbGVhc2UgaGFuZGxlIHRoaXMuIAorICB7YXBwbGljYXRpb25zLAorICAgWworICAgIGtlcm5lbCwgCisgICAgc3RkbGliCisgICBdfSwKKworICAlIE9UUCBhcHBsaWNhdGlvbiBsb2FkZXIgd2lsbCBsb2FkLCBidXQgbm90IHN0YXJ0LCBpbmNsdWRlZCBhcHBzLiBBZ2FpbgorICAlIHRoaXMgY2FuIGJlIGlnbm9yZWQgYXMgd2VsbC4gIFRvIGxvYWQgYnV0IG5vdCBzdGFydCBhbiBhcHBsaWNhdGlvbiBpdAorICAlIGlzIGVhc2llciB0byBpbmNsdWRlIGl0IGluIHRoZSAucmVsIGZpbGUgZm9sbG93ZWQgYnkgdGhlIGF0b20gJ25vbmUnCisgIHtpbmNsdWRlZF9hcHBsaWNhdGlvbnMsIFtdfSwKKworICAlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBzaW1pbGFyIHRvIHRob3NlIGluIHRoZSBjb25maWcgZmlsZSBzcGVjaWZpZWQKKyAgJSBvbiB0aGUgY29tbWFuZCBsaW5lLiBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdhczpnZXRfZW52CisgIHtlbnYsIFtdfSwKKworICAlIFRoZSBNb2R1bGUgYW5kIEFyZ3MgdXNlZCB0byBzdGFydCB0aGlzIGFwcGxpY2F0aW9uLgorICB7bW9kLCB7JUFQUF9OQU1FJSwgW119fQorIF0KK30uCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5hcHB1cC5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9ibGFua19hcHAuYXBwdXAuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0YTYzODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9ibGFua19hcHAuYXBwdXAuc3JjCkBAIC0wLDAgKzEgQEAKK3siJVZTTiUiLFtdLFtdfS4KZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvc3JjL2JsYW5rX2FwcC5lcmwgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9ibGFua19hcHAuZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkYjZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwL3NyYy9ibGFua19hcHAuZXJsCkBAIC0wLDAgKzEsNjMgQEAKKyUlJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlJSBAZG9jICAKKyUlJSBAZW5kCislJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbW9kdWxlKCUlQVBQX05BTUUlJSkuCisKKy1iZWhhdmlvdXIoYXBwbGljYXRpb24pLgorJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgSW5jbHVkZSBmaWxlcworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWluY2x1ZGUoIiUlQVBQX05BTUUlJS5ocmwiKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgRXh0ZXJuYWwgZXhwb3J0cworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWV4cG9ydChbCisJIHN0YXJ0LzIsCisJIHNodXRkb3duLzAsCisJIHN0b3AvMQorCSBdKS4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgTWFjcm9zCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUlIFJlY29yZHMKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorJSUgRXh0ZXJuYWwgZnVuY3Rpb25zCislJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBAZG9jIFRoZSBzdGFydGluZyBwb2ludCBmb3IgYW4gZXJsYW5nIGFwcGxpY2F0aW9uLgorJSUgQHNwZWMgc3RhcnQoVHlwZSwgU3RhcnRBcmdzKSAtPiB7b2ssIFBpZH0gfCB7b2ssIFBpZCwgU3RhdGV9IHwge2Vycm9yLCBSZWFzb259CislJSBAZW5kCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGFydChUeXBlLCBTdGFydEFyZ3MpIC0+CisgICAgY2FzZSAlJVBGWCUlX3N1cDpzdGFydF9saW5rKFN0YXJ0QXJncykgb2YKKwl7b2ssIFBpZH0gLT4gCisJICAgIHtvaywgUGlkfTsKKwlFcnJvciAtPgorCSAgICBFcnJvcgorICAgIGVuZC4KKworJSUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSUgQGRvYyBDYWxsZWQgdG8gc2h1ZG93biB0aGUgJSVBUFBfTkFNRSUlIGFwcGxpY2F0aW9uLgorJSUgQHNwZWMgc2h1dGRvd24oKSAtPiBvayAKKyUlIEBlbmQKKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NodXRkb3duKCkgLT4KKyAgICBhcHBsaWNhdGlvbjpzdG9wKCUlQVBQX05BTUUlJSkuCisKKyUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyUlIEludGVybmFsIGZ1bmN0aW9ucworJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCislJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislJSBDYWxsZWQgdXBvbiB0aGUgdGVybWludGlvbiBvZiBhbiBhcHBsaWNhdGlvbi4KKyUlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0b3AoU3RhdGUpIC0+CisgICAgb2suCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvdnNuLm1rIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcC92c24ubWsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJhMTc0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHAvdnNuLm1rCkBAIC0wLDAgKzEgQEAKKyUlQVBQX05BTUVfVVBQRVJfQ0FTRSUlX1ZTTj0xLjAKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL01ha2VmaWxlIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQzNTk1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjk4IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBmaWxlIGZvciBjcmVhdGluZyBhbiBvdHAgcmVsZWFzZS4gCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMKKyMgQmFzZW5hbWUgb2YgdGhpcyByZWxlYXNlLgorIyMKK1JFTFM9JChzaGVsbCBiYXNlbmFtZSBgcHdkYCkKK0FQUF9OQU1FPSQoc2hlbGwgZWNobyAkKFJFTFMpIHwgc2VkIHMvX3JlbCQkLy8pCisKK2luY2x1ZGUgLi4vLi4vYnVpbGQvb3RwLm1rCisKK2luY2x1ZGUgLi92c24ubWsKKworI2luY2x1ZGUgJChFUkxfVE9QKS9tYWtlL3RhcmdldC5taworI2luY2x1ZGUgJChFUkxfVE9QKS9tYWtlLyQoVEFSR0VUKS9vdHAubWsKKworVVNSX0xJQlBBVEg9Li4vLi4vbGliCitJTlNUQUxMX0RJUj0vdXNyL2xvY2FsL2xpYgorQUJTX1VTRVJfTElCUEFUSD0kKHNoZWxsIGNkIC4uLy4uL2xpYjtwd2QpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDUkVBVEUgRElSIFNUUlVDVFVSRSBIRVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFRET0NTPSQod2lsZGNhcmQgJChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3MvKi5odG1sKSBcCisJJCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLmh0bSkgXAorCSQod2lsZGNhcmQgJChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3MvKi55YXdzKQorQlVJTERfRklMRVM9ZnNfYm9vdF9zbWl0aGUuYmVhbSBmc19saXN0cy5iZWFtIGZzX2xpYi5iZWFtCisKK0xPQ0FMX0RJUj1sb2NhbAorI0xPQ0FMX0RJUj0kKHNoZWxsIGNhdCAkKFJFTFMpLnJlbC5zcmMgfGdyZXAgLW0gMSAnJChBUFBfTkFNRSknIHxhd2sgLUYgJyInICd7cHJpbnRmICIlcy0lcyIsICQkMiwkJDR9JykKKworRElSX1NUUlVDVFVSRT0gXAorCSQoTE9DQUxfRElSKSBcCisJJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgCisKK1BST0RVQ1RJT05fRElSX1NUUlVDVFVSRT0gXAorCSQoUkVMUykgXAorCSQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3N0YWdlIFwKKwkkKFJFTFMpL2xvZy8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dyBcCisJJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0NSSVBUX0FORF9CT09UX0ZJTEVTPSBcCisJJChSRUxTKS5zY3JpcHQgXAorCSQoUkVMUykuYm9vdAorCitMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVM9IFwKKwkkKExPQ0FMX0RJUikvJChSRUxTKS5zY3JpcHQgXAorCSQoTE9DQUxfRElSKS8kKFJFTFMpLmJvb3QKKworTE9DQUxfSFRUUF9DT05GPSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXMgIAorCitQUk9EVUNUSU9OX0hUVFBfQ09ORj0gXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmYgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzICAKKworTE9DQUxfVEFSR0VUX0ZJTEVTPSQoTE9DQUxfSFRUUF9DT05GKSAkKExPQ0FMX0RJUikvJChSRUxTKS5jb25maWcgJChMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVMpCisKK0xPQ0FMX1RBUkdFVFM9JChMT0NBTF9ESVIpLyQoUkVMUykuc2ggdnNuaXQgJChMT0NBTF9UQVJHRVRfRklMRVMpIAorCitQUk9EVUNUSU9OX1RBUkdFVFM9JChSRUxTKS9idWlsZC8kKFJFTF9WU04pIFwKKwkgICAgICAgICAgICQoUkVMUykvbGliIFwKKyAgICAgICAgICAgICAgICAgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykucmVsLnNyYyBcCisJICAgICAgICAgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykuY29uZmlnLnNyYyBcCisJICAgICAgICAgICAkKFJFTFMpL3N0YWdlL3lhd3MuY29uZi5zcmMgXAorCQkgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykuc2guc3JjICBcCisJCSAgICQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyBcCisJCSAgICQoUkVMUykvaW5zdGFsbC5zaCBcCisJCSAgICQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pL2NsZWFuX3JlbGVhc2UgCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUQVJHRVRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWxsIGRlYnVnIG9wdCBpbnN0ciBzY3JpcHQ6ICAkKERJUl9TVFJVQ1RVUkUpICQoTE9DQUxfVEFSR0VUUykgJChQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUpICQoUFJPRFVDVElPTl9UQVJHRVRTKQorCUBlY2hvICQoSFRET0NTKQorCitpbnN0YWxsOiAgc3RhZ2UKKwordGFyOiAkKFJFTFMpLSQoTE9DQVRJT04pLSQoUkVMX1ZTTikudGd6CisKKyQoRElSX1NUUlVDVFVSRSk6CisJbWtkaXIgLXAgJEAKKworJChQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUpOgorCW1rZGlyIC1wICRACisJCitjbGVhbjoKKwkkKFJNKSAkKFJFTF9TQ1JJUFRTKSAkKFRBUkdFVF9GSUxFUykKKwkkKFJNKSAtciAkKExPQ0FMX0RJUikgJChQUk9ETl9ESVIpCisJJChSTSkgJChSRUxTKS5yZWwKKwkkKFJNKSAtciAkKFJFTFMpCisJJChSTSkgJChSRUxTKSoudGd6CisJJChSTSkgJChSRUxTKS5yZWwuc3JjLnRtcAorCSQoUk0pICQoU0NSSVBUX0FORF9CT09UX0ZJTEVTKQorCitkb2NzOgorCQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMgRk9SIExPQ0FMIE1PREUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIHN0YXJ0dXAgc2NyaXB0IGZvciBsb2NhbCBtb2RlCiskKExPQ0FMX0RJUikvJChSRUxTKS5zaDogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICJjZCAkKENVUkRJUikvJChMT0NBTF9ESVIpIiA+PiAkQAorCUBlY2hvICJlcmwgLW5hbWUgJCR7VVNFUn1fJChSRUxTKSAtYm9vdCAkKFJFTFMpIC1jb25maWcgJChSRUxTKS5jb25maWcgXCQkQCIgPj4gJEAKKwljaG1vZCAreCAkQAorCUBlY2hvCisJQGVjaG8gIj09PT0gU3RhcnQgbG9jYWwgbm9kZSB3aXRoIFwic2ggJEBcIiA9PT09IgorCUBlY2hvCisKKyMgQ3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfRElSKS8kKFJFTFMpLmNvbmZpZzogJChSRUxTKS5jb25maWcuc3JjCisJc2VkIC1lICdzOyVMT0dfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pOycgXAorCSAgICAtZSAnczslVkFSX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVSRUxTJTskKFJFTFMpO2cnIFwKKyAgICAgICAgICAgIC1lICdzOyVIT01FJTskKEhPTUUpO2cnIFwKKyAgICAgICAgICAgIC1lICdzOyVCUk9BRENBU1RfQUREUkVTUyU7JChCUk9BRENBU1RfQUREUkVTUyk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUNPTlRBQ1RfTk9ERSU7JChDT05UQUNUX05PREUpO2cnIFwKKwkgICAgLWUgInM7JUhPU1ROQU1FJTtgaG9zdG5hbWUgLS1sb25nYDsiIFwKKyAgICAgICAgICAgIC1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisJICAgIC1lICdzOyVBUFBfVkVSU0lPTiU7JChBUFBfVkVSU0lPTik7ZycgXAorICAgICAgICAgICAgICQ8ID4gJEAKKworIyBDcmVhdGUgdGhlIGh0dHBkIGNvbmYgZmlsZSBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmY6IHlhd3MuY29uZi5zcmMKKwlzZWQgLWUgJ3M7JVZBUl9PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVMT0dfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pOycgXAorCSAgICAtZSAnczslSFRET0NfUk9PVCU7JChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3M7JyBcCisgICAgICAgICAgICAtZSAnczslQVBQX05BTUUlOyQoQVBQX05BTUUpOycgXAorICAgICAgICAgICAgLWUgJ3M7JVJFTFMlOyQoUkVMUyk7JyBcCisgICAgICAgICAgICAtZSAnczslVVNFUiU7JChVU0VSKTsnIFwKKwkgICAgLWUgJ3M7JUhURE9DX1JPT1QlOyQoQUJTX1VTRVJfTElCUEFUSCk7JyBcCisgICAgICAgICAgICAtZSAnczslTUhPU1QlOyQoTUhPU1QpOycgXAorICAgICAgICAgICAgJDwgPiAkQAorCisjIENyZWF0ZSB0aGUgY29uZmlnIGZpbGUgZm9yIGxvY2FsIG1vZGUuCit2c25pdDogJChSRUxTKS5yZWwuc3JjIAorCXNlZCAtZSAnczslUkVMX1ZTTiU7JChSRUxfVlNOKTsnIFwKKwkgICAgICAgJDwgPiAkPC50bXAKKworIyBDcmVhdGUgYW5kIHBvc2l0aW9uIHNjcmlwdCBhbmQgYm9vdCBmaWxlcyBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfU0NSSVBUX0FORF9CT09UX0ZJTEVTKTogCisJQCBlcmwgLXB6ICQoVVNSX0xJQlBBVEgpL2ZzbGliL2ViaW4gXAorCSAgICAgIC1ub3NoZWxsIFwKKwkgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBtYWtlX3NjcmlwdF9hbmRfYm9vdCAiW1wiJChFUkxfUlVOX1RPUCkvKlwiLCAgXCIkKFVTUl9MSUJQQVRIKVwiXS4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiQkKGJhc2VuYW1lIGBwd2RgKSIucmVsLnNyYy50bXBcIi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW2xvY2FsXS4gIiBcCisJICAgICAgLXMgaW5pdCBzdG9wCisJY3AgJChTQ1JJUFRfQU5EX0JPT1RfRklMRVMpICQoTE9DQUxfRElSKS8gCisKKyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzOiAuLi8uLi9idWlsZC9taW1lLnR5cGVzCisJY3AgJDwgJEAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMgRk9SIFBST0RVQ1RJT04gTU9ERQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskKFJFTFMpL2xpYjogCisJIyBGb3Igc29tZSByZWFzb24gdGhpcyB3aWxsIG5vdCBoYXBwZW4gaWYgYWRkZWQgdG8gUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFCisJbWtkaXIgJEAKKwlAIGVybCAtcHogJChSRUxTKS9idWlsZC8kKFJFTF9WU04pIFwKKwkgICAgICAtbm9zaGVsbCBcCisJICAgICAgLXMgZnNfbGliIHNfYXBwbHkgZnNfYm9vdF9zbWl0aGUgc3RhZ2VfZnJvbV9yZWxzcmMgIltcIiQoVVNSX0xJQlBBVEgpXCJdLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkJChiYXNlbmFtZSBgcHdkYCkiLnJlbC5zcmNcIi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJEBcIiIuICIgXAorCSAgICAgIC1zIGluaXQgc3RvcAorCisjIE1vdmUgdGhlIGh0ZG9jcyBmcm9tIHRoZSBsb2NhbCBhcHBzIHRvIHRoZSBwcm9kdWN0aW9uIGh0ZG9jIHJvb3QgZGlyZWN0b3J5LgorJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzLzogJChIVERPQ1MpCisJQG1rZGlyIC1wICQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jczsgXAorCWZvciB4IGluICQoSFRET0NTKTtkbyBcCisgCQljcCAgJCR4ICRAOyBcCisJZG9uZQorCisjIHN0YXJ0dXAgc2NyaXB0IGZvciBwcm9kdWN0aW9uIG1vZGUKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5zaC5zcmM6IAorCUBlY2hvICcjIS9iaW4vc2gnID4gJEAKKwlAZWNobyAiY2QgJUlOU1RBTExfRElSJS8kKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKSIgPj4gJEAKKwlAZWNobyAiZXJsIC1uYW1lICQoUkVMUykgLWJvb3QgJChSRUxTKSAtY29uZmlnICQoUkVMUykuY29uZmlnIC1kZXRhY2hlZCBcJCRAIiA+PiAkQAorCWNobW9kICt4ICRACisKKyQoUkVMUykvYnVpbGQvJChSRUxfVlNOKTogICQoVVNSX0xJQlBBVEgpL2ZzbGliL2ViaW4KKwlta2RpciAtcCAkKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgCisJY3AgJDwvZnNfYm9vdF9zbWl0aGUuYmVhbSAkQAorCWNwICQ8L2ZzX2xpYi5iZWFtICRACisJY3AgJDwvZnNfbGlzdHMuYmVhbSAkQAorCiskKFJFTFMpL3N0YWdlLyQoUkVMUykucmVsLnNyYzogJChSRUxTKS5yZWwuc3JjLnRtcAorCWNwICQ8ICRACisKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjOiAkKFJFTFMpLmNvbmZpZy5zcmMKKwljcCAkPCAkQAorCiskKFJFTFMpL3N0YWdlL3lhd3MuY29uZi5zcmM6IHlhd3MuY29uZi5zcmMKKwljcCAkPCAkQAorCiskKFJFTFMpL2luc3RhbGwuc2g6IAorCUBlY2hvICcjIS9iaW4vc2gnID4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJpZiBbIFwkJCMgLWVxIDEgXTt0aGVuIiA+PiAkQAorCUBlY2hvICIgICAgSU5TVEFMTF9ESVI9XCQkMTsiID4+ICRACisJQGVjaG8gImVsc2UiID4+ICRACisJQGVjaG8gIiAgICBJTlNUQUxMX0RJUj0kKElOU1RBTExfRElSKTsiID4+ICRACisJQGVjaG8gImZpIiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImZ1bmN0aW9uIG11bmdlKCkgeyIgPj4gJEAKKwlAZWNobyAiICAgIHNlZCAtZSBcInM7JUxPR19PVFAlO1wkJElOU1RBTExfRElSLyQoUkVMUykvbG9nLyQoUkVMX1ZTTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslVkFSX09UUCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS92YXIvJChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVSRUxTJTskKFJFTFMpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVJFTF9WU04lOyQoUkVMX1ZTTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslVVNFUiU7JCRVU0VSO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUhURE9DX1JPT1QlO1wkJElOU1RBTExfRElSLyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcztnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVNSE9TVCU7XGBob3N0bmFtZVxgO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUJST0FEQ0FTVF9BRERSRVNTJTskKEJST0FEQ0FTVF9BRERSRVNTKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVJTlNUQUxMX0RJUiU7XCQkSU5TVEFMTF9ESVI7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQ09OVEFDVF9OT0RFJTskKENPTlRBQ1RfTk9ERSk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSE9TVE5BTUUlO1xgaG9zdG5hbWUgLS1sb25nXGA7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQVBQX05BTUUlOyQoQVBQX05BTUUpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUFQUF9WRVJTSU9OJTskKEFQUF9WRVJTSU9OKTtnXCIgXFwiID4+ICRACisJQGVjaG8gJyAgICAgICAgJCQxID4gJCQyJyA+PiAkQAorCUBlY2hvICJ9IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlL3lhd3MuY29uZi5zcmMgdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLmNvbmZpZzsiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlLyQoUkVMUykuc2guc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5yZWwuc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnJlbDsiID4+ICRACisJQGVjaG8gImNobW9kICt4IHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJjZCAuLjsiID4+ICRACisJQGVjaG8gImZpbmQgJChSRUxTKSB8IGNwaW8gLW8gPiBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICJjZCAtOyIgPj4gJEAKKwlAZWNobyAiY2QgXCQkSU5TVEFMTF9ESVI7ICIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiBcIlVucGFja2VkOiBcIiIgPj4gJEAKKwlAZWNobyAiY3BpbyAtdWlkIDwgJChSRUxTKS5jcGlvOyIgPj4gJEAKKwlAZWNobyAicm0gJChSRUxTKS5jcGlvOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJlY2hvIFwicHdkIGlzIFxgcHdkXGBcIjsiID4+ICRACisJQGVjaG8gImNkICQoUkVMUyk7IiA+PiAkQAorCUBlY2hvICIgZXJsIC1weiBidWlsZC8kKFJFTF9WU04pIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAtbm9zaGVsbCBcXCIgPj4gJEAKKwlAZWNobyAtbiAiICAgICAgLXMgZnNfbGliIHNfYXBwbHkgZnNfYm9vdF9zbWl0aGUgbWFrZV9zY3JpcHRfYW5kX2Jvb3QgXCJbXFxcIiQoRVJMX1JVTl9UT1ApLypcXFwiLCAgXFxcImxpYi9cXFwiXS4gXCIgIiA+PiAkQAorCUBlY2hvIC1uICAgICAgICAiXCJcXFwic3RhZ2UvJCQoYmFzZW5hbWUgYHB3ZGApLnJlbC5zcmNcXFwiLiBcIiAiID4+ICRACisJQGVjaG8gLW4gICAgICAgICJcIltsb2NhbF0uIFwiICIgPj4gJEAKKwlAZWNobyAgICAgICAgICAgIi1zIGluaXQgc3RvcCB8IGVncmVwICcqdGVybWluYXRlKnxFUlJPUiciID4+ICRACisJQGVjaG8gImlmIFsgXCQkPyAtZXEgMCBdOyB0aGVuIiA+PiAkQAorCUBlY2hvICJlY2hvIFwiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cIjsiID4+ICRACisJQGVjaG8gImVjaG8gXCJTVEFHRSBGQUlMVVJFIFwkJD8gIC0gU2lsZW5jZSB0aGUgZGlzY29yZC5cIjsiID4+ICRACisJQGVjaG8gImVjaG8gXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVwiOyIgPj4gJEAKKwlAZWNobyAiZXhpdCAxOyIgPj4gJEAKKwlAZWNobyAiZmkiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAibXYgJChSRUxTKS5yZWwgJChSRUxTKS5zY3JpcHQgJChSRUxTKS5ib290IHJlbGVhc2UvJChSRUxfVlNOKTsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAicm0gLXIgc3RhZ2U7IiA+PiAkQAorCUBlY2hvICJybSAtciBidWlsZDsiID4+ICRACisJQGVjaG8gImNkIC07IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImNoZ3JwIC1SIGVydHMgJChSRUxTKTsgIiA+PiAkQAorCUBlY2hvICJjaG1vZCAtUiA3NzUgJChSRUxTKTsgIiA+PiAkQAorCUBlY2hvICJjZCAtIiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gInJtIC1mIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyIgPj4gJEAKKwlAZWNobyAibG4gLXMgXCQkSU5TVEFMTF9ESVIvJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5zaCAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsiID4+ICRACisJQGVjaG8gImNoZ3JwIC1SIGVydHMgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7ICIgPj4gJEAKKwlAZWNobyAiY2htb2QgLVIgNzc1IC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyAiID4+ICRACisJQGVjaG8gInJtIFwkJElOU1RBTExfRElSLyQoUkVMUykvaW5zdGFsbC5zaDsiID4+ICRACisJQGVjaG8gImVjaG8gLW4gJCQnXGVbMDszMm0nIiA+PiAkQAorCUBlY2hvICJlY2hvIFwiJChBUFBfTkFNRSkgaW5zdGFsbGF0aW9uIHRvIFwkJElOU1RBTExfRElSIGNvbXBsZXRlLlwiIiA+PiAkQAorCUBlY2hvICJlY2hvIC1uICQkJ1xlWzBtJyIgPj4gJEAKKwljaG1vZCAreCAkQAorCQkKKworc3RhZ2U6ICQoUkVMUykKKwljZCAkKFJFTFMpOyBcCisJLi9pbnN0YWxsLnNoOyBcCisJY2QgLQorCiskKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXM6IC4uLy4uL2J1aWxkL21pbWUudHlwZXMKKwljcCAkPCAkQAorCiskKFJFTFMpLSQoTE9DQVRJT04pLSQoUkVMX1ZTTikudGd6OiAkKFJFTFMpCisJdGFyIC16Y3ZmICRAICQ8CisKKyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pL2NsZWFuX3JlbGVhc2U6IC4uLy4uL3Rvb2xzL3V0aWxpdGllcy9jbGVhbl9yZWxlYXNlCisJY3AgJDwgJEAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvYmxhbmtfYXBwX3JlbC5jb25maWcuc3JjIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvYmxhbmtfYXBwX3JlbC5jb25maWcuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MDFjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLmNvbmZpZy5zcmMKQEAgLTAsMCArMSwyNiBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KKyUlJSBQYXJhbWV0ZXIgc2V0dGluZ3MgZm9yIGFwcHMgb24gJUFQUF9OQU1FJQorJSUlIFdhcm5pbmcgLSB0aGlzIGNvbmZpZyBmaWxlICptdXN0KiBlbmQgd2l0aCA8ZG90Pjx3aGl0ZXNwYWNlPgorCislJSB3cml0ZSBsb2cgZmlsZXMgdG8gc2FzbF9kaXIKK1sKKyB7c2FzbCwKKyAgWworICAge3Nhc2xfZXJyb3JfbG9nZ2VyLCB7ZmlsZSwgIiVMT0dfT1RQJS9zYXNsX2xvZyJ9fQorICBdfSwKKworCisge2dhcywKKyAgWworICAge21vZF9zcGVjcywgW3tlbHdyYXAsIHtmc19lbHdyYXBfaCwgc3RhcnRfbGlua319XX0sCisKKyAgICUgZWx3cmFwIGNvbmZpZy4KKyAgIHtlcnJfbG9nLCAiJUxPR19PVFAlL2Vycl9sb2cifSwKKyAgIHtlcnJfbG9nX3dyYXBfaW5mbywge3tlcnIsNTAwMDAwMCwxMH0se3Nhc2wsNTAwMDAwMCwxMH19fSwgCisgICB7ZXJyX2xvZ190dHksIHRydWV9ICUgTG9nIHRvIHRoZSBzY3JlZW4KKyAgIF19LAorCisgeyVBUFBfTkFNRSUsCisgIFsKKyAgXX0KK10uIApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvYmxhbmtfYXBwX3JlbC5yZWwuc3JjIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvYmxhbmtfYXBwX3JlbC5yZWwuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2OTU3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC9ibGFua19hcHBfcmVsLnJlbC5zcmMKQEAgLTAsMCArMSwxNCBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KK3tyZWxlYXNlLCAKKyB7IiUlQVBQX05BTUUlJV9yZWwiLCAiJVJFTF9WU04lIn0sCisgZXJ0cywKKyBbCisgIGtlcm5lbCwKKyAgc3RkbGliLAorICBzYXNsLAorICBmc2xpYiwKKyAgZ2FzLAorICAlJUFQUF9OQU1FJSUKKyBdCit9LiAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvdnNuLm1rIGIvbGliL2VybC90b29scy8uYXBwZ2VuL2JsYW5rX2FwcF9yZWwvdnNuLm1rCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhYzhlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC92c24ubWsKQEAgLTAsMCArMSBAQAorUkVMX1ZTTj0xLjAKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9ibGFua19hcHBfcmVsL3lhd3MuY29uZi5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC95YXdzLmNvbmYuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTdhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vYmxhbmtfYXBwX3JlbC95YXdzLmNvbmYuc3JjCkBAIC0wLDAgKzEsMTY2IEBACisKKyMgY29uZiBmb3IgeWF3cworCisKKyMgZmlyc3Qgd2UgaGF2ZSBhIHNldCBvZiBnbG9iYWxzCisjIFRoYXQgYXBwbHkgdG8gYWxsIHZpcnR1YWwgc2VydmVycworCisKKyMgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBsb2dmaWxlcyBmb3IKKyMgYWxsIHZpcnR1YWwgc2VydmVycyB3aWxsIGJlIHdyaXR0ZW4KKworbG9nZGlyID0gL3Zhci9sb2cveWF3cworCisjIFRoaXMgdGhlIHBhdGggdG8gYSBkaXJlY3Rvcnkgd2hlcmUgYWRkaXRpb25hbAorIyBiZWFtIGNvZGUgY2FuIGJlIHBsYWNlZC4gVGhlIGRhZW1vbiB3aWxsIGFkZCB0aGlzCisjIGRpcmVjdG9yeSB0byBpdHMgc2VhcmNoIHBhdGgKKworZWJpbl9kaXIgPSAvdmFyL3lhd3MvZWJpbgorCisKKyMgVGhpcyBpcyBhIGRpcmVjdG9yeSB3aGVyZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyAuaHJsCisjIGZpbGVzIGNhbiBiZSBwbGFjZWQuIGFwcGxpY2F0aW9uIHNwZWNpZmlnIC55YXdzIGNvZGUgY2FuCisjIHRoZW4gaW5jbHVkZSB0aGVzZSAuaHJsIGZpbGVzCisKK2luY2x1ZGVfZGlyID0gL3Zhci95YXdzL2luY2x1ZGUKKworCisKKworCisjIFRoaXMgaXMgYSBkZWJ1ZyB2YXJpYWJsZSwgcG9zc2libGUgdmFsdWVzIGFyZSBodHRwIHwgdHJhZmZpYyB8IGZhbHNlCisjIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSB0cmFjZSAocG9zc2libHkgdG8gdGhlIHR0eSkgd2hpbGUKKyMgaW52b2tpbmcgeWF3cyBmcm9tIHRoZSBzaGVsbCBhcyBpbgorIyB5YXdzIC1pIC1UIC14IChzZWUgbWFuIHlhd3MpCisKK3RyYWNlID0gZmFsc2UKKworCisKKworCisjIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgeWF3cyBzdGFydCBhZGRpdGlvbmFsIAorIyBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb2RlIGF0IHN0YXJ0dXAKKyMgCisjIHJ1bm1vZCA9IG15bW9kdWxlCisKKworIyBCeSBkZWZhdWx0IHlhd3Mgd2lsbCBjb3B5IHRoZSBlcmxhbmcgZXJyb3JfbG9nIGFuZAorIyBlbmQgd3JpdGUgaXQgdG8gYSB3cmFwIGxvZyBjYWxsZWQgcmVwb3J0LmxvZyAoaW4gdGhlIGxvZ2RpcikKKyMgdGhpcyBmZWF0dXJlIGNhbiBiZSB0dXJuZWQgb2ZmLiBUaGlzIHdvdWxkIHR5cGljYWxseQorIyBiZSB0aGUgY2FzZSB3aGVuIHlhd3MgcnVucyB3aXRoaW4gYW5vdGhlciBsYXJnZXIgYXBwCisKK2NvcHlfZXJyb3JfbG9nID0gdHJ1ZQorCisKKyMgTG9ncyBhcmUgd3JhcCBsb2dzCisKK2xvZ193cmFwX3NpemUgPSAxMDAwMDAwCisKKworIyBQb3NzaWJseSByZXNvbHZlIGFsbCBob3N0bmFtZXMgaW4gbG9nZmlsZXMgc28gd2ViYWxpemVyCisjIGNhbiBwcm9kdWNlIHRoZSBuaWNlIGdlb2dyYXBoeSBwaWVjaGFydAorCitsb2dfcmVzb2x2ZV9ob3N0bmFtZSA9IGZhbHNlCisKKworCisjIGZhaWwgY29tcGxldGVseSBvciBub3QgaWYgeWF3cyBmYWlscyAKKyMgdG8gYmluZCBhIGxpc3RlbiBzb2NrZXQKK2ZhaWxfb25fYmluZF9lcnIgPSB0cnVlCisKKworCisjIElmIHlhd3MgaXMgc3RhcnRlZCBhcyByb290LCBpdCBjYW4sIG9uY2UgaXQgaGFzIG9wZW5lZAorIyBhbGwgcmVsZXZhbnQgc29ja2V0cyBmb3IgbGlzdGVuaW5nLCBjaGFuZ2UgdGhlIHVpZCB0byBhIAorIyB1c2VyIHdpdGggbG93ZXIgYWNjZXNzcmlnaHRzIHRoYW4gcm9vdCAKKworIyB1c2VybmFtZSA9IG5vYm9keQorCisKKyMgSWYgSFRUUCBhdXRoIGlzIHVzZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBzcGVjaWZpYworIyBhdXRoIGxvZy4KKworYXV0aF9sb2cgPSB0cnVlCisKKworIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgbXVsdGlwbGUgeWF3cyBzeXN0ZW1zIG9uIHRoZSBzYW1lIAorIyBob3N0LCB3ZSBuZWVkIHRvIGdpdmUgZWFjaCB5YXdzIHN5c3RlbSBhbiBpbmRpdmlkdWFsCisjIG5hbWUuIFlhd3Mgd2lsbCB3cml0ZSBhIG51bWJlciBvZiBydW50aW1lIGZpbGVzIHVuZGVyCisjIC90bXAveWF3cy8ke2lkfQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdCIKKworCisjIGlkID0gbXluYW1lCisKKworIyBlYXJsaWVyIHZlcnNpb25zIG9mIFlhd3MgcGlja2VkIHRoZSBmaXJzdCB2aXJ0dWFsIGhvc3QKKyMgaW4gYSBsaXN0IG9mIGhvc3RzIHdpdGggdGhlIHNhbWUgSVAvUE9SVCB3aGVuIHRoZSBIb3N0OgorIyBoZWFkZXIgZG9lc24ndCBtYXRjaCBhbnkgbmFtZSBvbiBhbnkgSG9zdAorIyBUaGlzIGlzIG9mdGVuIG5pY2UgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgYnV0IG5vdAorIyBhY2NlcHRhYmxlIGluIHJlYWwgbGl2ZSBob3N0aW5nIHNjZW5hcmlvcworCitwaWNrX2ZpcnN0X3ZpcnRob3N0X29uX25vbWF0Y2ggPSB0cnVlCisKKworIyBBbGwgdW5pY2VzIGFyZSBicm9rZW4gc2luY2UgaXQncyBub3QgcG9zc2libGUgdG8gYmluZCB0bworIyBhIHByaXZpbGVnZWQgcG9ydCAoPCAxMDI0KSB1bmxlc3MgdWlkPT0wCisjIFRoZXJlIGlzIGEgY29udHJpYiBpbiBqdW5nZXJsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIGJ5IG1lYW5zIAorIyBvZiBhbiBleHRlcm5hbCBzZXR1aWQgcm9vdCBwcm9ncmFtbSBjYWxsZWQgZmRzcnYgdG8gbGlzdGVuIHRvCisjIHRvIHByaXZpbGVnZWQgcG9ydC4KKyMgSWYgd2UgdXNlIHRoaXMgZmVhdHVyZSwgaXQgcmVxdWlyZXMgZmRzcnYgdG8gYmUgcHJvcGVybHkgaW5zdGFsbGVkLgorIyBEb2Vzbid0IHlldCB3b3JrIHdpdGggU1NMLgorCit1c2VfZmRzcnYgPSBmYWxzZQorCisKKworCisjIGVuZCB0aGVuIGEgc2V0IG9mIHZpcnR1YWwgc2VydmVycworIyBGaXJzdCB0d28gdmlydGhvc3RlZCBzZXJ2ZXJzIG9uIHRoZSBzYW1lIElQICgwLjAuMC4wKQorIyBpbiB0aGlzIGNhc2UsIGJ1dCBhbiBleHBsaWNpdCBJUCBjYW4gYmUgZ2l2ZW4gYXMgd2VsbAorCis8c2VydmVyIGNvcmUubWFydGluamxvZ2FuLmNvbT4KKwlwb3J0ID0gODAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZG9jcm9vdCA9IC92YXIveWF3cy93d3cKKwlhcmdfcmV3cml0ZV9tb2QgPSBwd3JfYXJnX3Jld3JpdGVfbW9kCisJYXBwbW9kcyA9IDxwd3IsIHB3cl9tYWluX2NvbnRyb2xsZXJfYXBwbW9kPgorPC9zZXJ2ZXI+CisKKzxzZXJ2ZXIgbG9jYWxob3N0PgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3RtcAorCWRpcl9saXN0aW5ncyA9IHRydWUKKwlkYXYgPSB0cnVlCisJPGF1dGg+CisJCXJlYWxtID0gZm9vYmFyCisJCWRpciA9IC8KKwkJdXNlciA9IGZvbzpiYXIKKwkJdXNlciA9IGJhejpiYXIKKwk8L2F1dGg+Cis8L3NlcnZlcj4KKworCisKKyMgQW5kIHRoZW4gYW4gc3NsIHNlcnZlcgorCis8c2VydmVyIGNvcmUubWFydGluamxvZ2FuLmNvbT4KKwlwb3J0ID0gNDQzCisJZG9jcm9vdCA9IC90bXAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCTxzc2w+ICAKKwkgICAgICAgIGtleWZpbGUgPSAvdXNyL2xvY2FsL3lhd3MvZXRjL3lhd3Mta2V5LnBlbQorCSAgICAgICAgY2VydGZpbGUgPSAvdXNyL2xvY2FsL3lhd3MvZXRjL3lhd3MtY2VydC5wZW0KKwk8L3NzbD4KKzwvc2VydmVyPgorCQkJCQorCQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3JlbmFtZS5zaCBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYwNzdjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9yZW5hbWUuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKK2lmIFsgJCMgLWVxIDMgXTsgdGhlbgorCU9MRF9QUkVGSVg9JDEKKwlORVdfUFJFRklYPSQyCisJRklMRU5BTUU9JDMKKwlORVdfRklMRU5BTUU9JChlY2hvICRGSUxFTkFNRSB8IHNlZCAtZSAicy8kT0xEX1BSRUZJWC8kTkVXX1BSRUZJWC8iKQorCWVjaG8gIm1vdmluZyAkRklMRU5BTUUgdG8gJE5FV19GSUxFTkFNRSIKKwltdiAkRklMRU5BTUUgJE5FV19GSUxFTkFNRQorCWV4aXQgMDsKK2ZpCisKKworaWYgWyAkIyAtZXEgMiBdOyB0aGVuCisJd2hpbGUgcmVhZCBsaW5lOyAKKwlkbyAKKwkJT0xEX1BSRUZJWD0kMQorCQlORVdfUFJFRklYPSQyCisJCU5FV19GSUxFTkFNRT0kKGVjaG8gJHtsaW5lfSB8IHNlZCAtZSAicy8kT0xEX1BSRUZJWC8kTkVXX1BSRUZJWC8iKQorCQllY2hvICJtb3ZpbmcgJHtsaW5lfSB0byAkTkVXX0ZJTEVOQU1FIgorCQltdiAke2xpbmV9ICRORVdfRklMRU5BTUUKKwlkb25lCisJZXhpdCAwCitmaQorCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vc3Vic3RpdHV0ZS5zaCBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi9zdWJzdGl0dXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzMDViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vc3Vic3RpdHV0ZS5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworCitpZiBbICQjIC1sdCAyIF07IHRoZW4KKwllY2hvICJ1c2FnZTogc3Vic3RpdHV0ZS5zaCA8dmFyaWFibGUgdG8gcmVwbGFjZT4gPHZhbHVlIHRvIHJlcGxhY2Ugd2l0aD4gPGZpbGVuYW1lIHwgU1RESU4+IgorCWV4aXQgMQorZmkKKworaWYgWyAkIyAtZXEgMyBdOyB0aGVuCisJVkFSSUFCTEU9JDEKKwlWQUxVRT0kMgorCUZJTEVOQU1FPSQzCisJCisJZWNobyAicmVwbGFjaW5nICRWQVJJQUJMRSB3aXRoICRWQUxVRSBpbiAkRklMRU5BTUUiCisJc2VkIC1lICJzLyRWQVJJQUJMRS8kVkFMVUUvIiAkRklMRU5BTUUgPiAiJEZJTEVOQU1FIl90bXAgCisJbXYgIiRGSUxFTkFNRSJfdG1wICRGSUxFTkFNRQorCWV4aXQgMAorZmkKKworaWYgWyAkIyAtZXEgMiBdOyB0aGVuCisgICAgd2hpbGUgcmVhZCBsaW5lOyAKKyAgICBkbworCQlWQVJJQUJMRT0kMQorCQlWQUxVRT0kMgorCQlGSUxFTkFNRT0ke2xpbmV9CisJCisJCWVjaG8gInJlcGxhY2luZyAkVkFSSUFCTEUgd2l0aCAkVkFMVUUgaW4gJEZJTEVOQU1FIgorCQlzZWQgLWUgInMvJFZBUklBQkxFLyRWQUxVRS8iICRGSUxFTkFNRSA+ICIkRklMRU5BTUUiX3RtcCAKKwkJbXYgIiRGSUxFTkFNRSJfdG1wICRGSUxFTkFNRQorICAgIGRvbmUKKyAgICBleGl0IDAKK2ZpCisKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL01ha2VmaWxlIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQzNTk1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjk4IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBmaWxlIGZvciBjcmVhdGluZyBhbiBvdHAgcmVsZWFzZS4gCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMKKyMgQmFzZW5hbWUgb2YgdGhpcyByZWxlYXNlLgorIyMKK1JFTFM9JChzaGVsbCBiYXNlbmFtZSBgcHdkYCkKK0FQUF9OQU1FPSQoc2hlbGwgZWNobyAkKFJFTFMpIHwgc2VkIHMvX3JlbCQkLy8pCisKK2luY2x1ZGUgLi4vLi4vYnVpbGQvb3RwLm1rCisKK2luY2x1ZGUgLi92c24ubWsKKworI2luY2x1ZGUgJChFUkxfVE9QKS9tYWtlL3RhcmdldC5taworI2luY2x1ZGUgJChFUkxfVE9QKS9tYWtlLyQoVEFSR0VUKS9vdHAubWsKKworVVNSX0xJQlBBVEg9Li4vLi4vbGliCitJTlNUQUxMX0RJUj0vdXNyL2xvY2FsL2xpYgorQUJTX1VTRVJfTElCUEFUSD0kKHNoZWxsIGNkIC4uLy4uL2xpYjtwd2QpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDUkVBVEUgRElSIFNUUlVDVFVSRSBIRVJFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFRET0NTPSQod2lsZGNhcmQgJChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3MvKi5odG1sKSBcCisJJCh3aWxkY2FyZCAkKEFCU19VU0VSX0xJQlBBVEgpLyQoQVBQX05BTUUpL2h0ZG9jcy8qLmh0bSkgXAorCSQod2lsZGNhcmQgJChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3MvKi55YXdzKQorQlVJTERfRklMRVM9ZnNfYm9vdF9zbWl0aGUuYmVhbSBmc19saXN0cy5iZWFtIGZzX2xpYi5iZWFtCisKK0xPQ0FMX0RJUj1sb2NhbAorI0xPQ0FMX0RJUj0kKHNoZWxsIGNhdCAkKFJFTFMpLnJlbC5zcmMgfGdyZXAgLW0gMSAnJChBUFBfTkFNRSknIHxhd2sgLUYgJyInICd7cHJpbnRmICIlcy0lcyIsICQkMiwkJDR9JykKKworRElSX1NUUlVDVFVSRT0gXAorCSQoTE9DQUxfRElSKSBcCisJJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pIFwKKwkkKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTikgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9odGRvY3MgCisKK1BST0RVQ1RJT05fRElSX1NUUlVDVFVSRT0gXAorCSQoUkVMUykgXAorCSQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3N0YWdlIFwKKwkkKFJFTFMpL2xvZy8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dyBcCisJJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzIFwKKwkkKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0NSSVBUX0FORF9CT09UX0ZJTEVTPSBcCisJJChSRUxTKS5zY3JpcHQgXAorCSQoUkVMUykuYm9vdAorCitMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVM9IFwKKwkkKExPQ0FMX0RJUikvJChSRUxTKS5zY3JpcHQgXAorCSQoTE9DQUxfRElSKS8kKFJFTFMpLmJvb3QKKworTE9DQUxfSFRUUF9DT05GPSBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL3lhd3MuY29uZiBcCisJJChMT0NBTF9ESVIpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXMgIAorCitQUk9EVUNUSU9OX0hUVFBfQ09ORj0gXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmYgXAorCSQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzICAKKworTE9DQUxfVEFSR0VUX0ZJTEVTPSQoTE9DQUxfSFRUUF9DT05GKSAkKExPQ0FMX0RJUikvJChSRUxTKS5jb25maWcgJChMT0NBTF9TQ1JJUFRfQU5EX0JPT1RfRklMRVMpCisKK0xPQ0FMX1RBUkdFVFM9JChMT0NBTF9ESVIpLyQoUkVMUykuc2ggdnNuaXQgJChMT0NBTF9UQVJHRVRfRklMRVMpIAorCitQUk9EVUNUSU9OX1RBUkdFVFM9JChSRUxTKS9idWlsZC8kKFJFTF9WU04pIFwKKwkgICAgICAgICAgICQoUkVMUykvbGliIFwKKyAgICAgICAgICAgICAgICAgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykucmVsLnNyYyBcCisJICAgICAgICAgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykuY29uZmlnLnNyYyBcCisJICAgICAgICAgICAkKFJFTFMpL3N0YWdlL3lhd3MuY29uZi5zcmMgXAorCQkgICAkKFJFTFMpL3N0YWdlLyQoUkVMUykuc2guc3JjICBcCisJCSAgICQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcyBcCisJCSAgICQoUkVMUykvaW5zdGFsbC5zaCBcCisJCSAgICQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pL2NsZWFuX3JlbGVhc2UgCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUQVJHRVRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWxsIGRlYnVnIG9wdCBpbnN0ciBzY3JpcHQ6ICAkKERJUl9TVFJVQ1RVUkUpICQoTE9DQUxfVEFSR0VUUykgJChQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUpICQoUFJPRFVDVElPTl9UQVJHRVRTKQorCUBlY2hvICQoSFRET0NTKQorCitpbnN0YWxsOiAgc3RhZ2UKKwordGFyOiAkKFJFTFMpLSQoTE9DQVRJT04pLSQoUkVMX1ZTTikudGd6CisKKyQoRElSX1NUUlVDVFVSRSk6CisJbWtkaXIgLXAgJEAKKworJChQUk9EVUNUSU9OX0RJUl9TVFJVQ1RVUkUpOgorCW1rZGlyIC1wICRACisJCitjbGVhbjoKKwkkKFJNKSAkKFJFTF9TQ1JJUFRTKSAkKFRBUkdFVF9GSUxFUykKKwkkKFJNKSAtciAkKExPQ0FMX0RJUikgJChQUk9ETl9ESVIpCisJJChSTSkgJChSRUxTKS5yZWwKKwkkKFJNKSAtciAkKFJFTFMpCisJJChSTSkgJChSRUxTKSoudGd6CisJJChSTSkgJChSRUxTKS5yZWwuc3JjLnRtcAorCSQoUk0pICQoU0NSSVBUX0FORF9CT09UX0ZJTEVTKQorCitkb2NzOgorCQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMgRk9SIExPQ0FMIE1PREUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIHN0YXJ0dXAgc2NyaXB0IGZvciBsb2NhbCBtb2RlCiskKExPQ0FMX0RJUikvJChSRUxTKS5zaDogCisJQGVjaG8gJyMhL2Jpbi9zaCcgPiAkQAorCUBlY2hvICJjZCAkKENVUkRJUikvJChMT0NBTF9ESVIpIiA+PiAkQAorCUBlY2hvICJlcmwgLW5hbWUgJCR7VVNFUn1fJChSRUxTKSAtYm9vdCAkKFJFTFMpIC1jb25maWcgJChSRUxTKS5jb25maWcgXCQkQCIgPj4gJEAKKwljaG1vZCAreCAkQAorCUBlY2hvCisJQGVjaG8gIj09PT0gU3RhcnQgbG9jYWwgbm9kZSB3aXRoIFwic2ggJEBcIiA9PT09IgorCUBlY2hvCisKKyMgQ3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfRElSKS8kKFJFTFMpLmNvbmZpZzogJChSRUxTKS5jb25maWcuc3JjCisJc2VkIC1lICdzOyVMT0dfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pOycgXAorCSAgICAtZSAnczslVkFSX09UUCU7JChDVVJESVIpLyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKTsnIFwKKyAgICAgICAgICAgIC1lICdzOyVSRUxTJTskKFJFTFMpO2cnIFwKKyAgICAgICAgICAgIC1lICdzOyVIT01FJTskKEhPTUUpO2cnIFwKKyAgICAgICAgICAgIC1lICdzOyVCUk9BRENBU1RfQUREUkVTUyU7JChCUk9BRENBU1RfQUREUkVTUyk7ZycgXAorICAgICAgICAgICAgLWUgJ3M7JUNPTlRBQ1RfTk9ERSU7JChDT05UQUNUX05PREUpO2cnIFwKKwkgICAgLWUgInM7JUhPU1ROQU1FJTtgaG9zdG5hbWUgLS1sb25nYDsiIFwKKyAgICAgICAgICAgIC1lICdzOyVBUFBfTkFNRSU7JChBUFBfTkFNRSk7JyBcCisJICAgIC1lICdzOyVBUFBfVkVSU0lPTiU7JChBUFBfVkVSU0lPTik7ZycgXAorICAgICAgICAgICAgICQ8ID4gJEAKKworIyBDcmVhdGUgdGhlIGh0dHBkIGNvbmYgZmlsZSBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi95YXdzLmNvbmY6IHlhd3MuY29uZi5zcmMKKwlzZWQgLWUgJ3M7JVZBUl9PVFAlOyQoQ1VSRElSKS8kKExPQ0FMX0RJUikvdmFyLyQoUkVMX1ZTTik7JyBcCisJICAgIC1lICdzOyVMT0dfT1RQJTskKENVUkRJUikvJChMT0NBTF9ESVIpL2xvZy8kKFJFTF9WU04pOycgXAorCSAgICAtZSAnczslSFRET0NfUk9PVCU7JChBQlNfVVNFUl9MSUJQQVRIKS8kKEFQUF9OQU1FKS9odGRvY3M7JyBcCisgICAgICAgICAgICAtZSAnczslQVBQX05BTUUlOyQoQVBQX05BTUUpOycgXAorICAgICAgICAgICAgLWUgJ3M7JVJFTFMlOyQoUkVMUyk7JyBcCisgICAgICAgICAgICAtZSAnczslVVNFUiU7JChVU0VSKTsnIFwKKwkgICAgLWUgJ3M7JUhURE9DX1JPT1QlOyQoQUJTX1VTRVJfTElCUEFUSCk7JyBcCisgICAgICAgICAgICAtZSAnczslTUhPU1QlOyQoTUhPU1QpOycgXAorICAgICAgICAgICAgJDwgPiAkQAorCisjIENyZWF0ZSB0aGUgY29uZmlnIGZpbGUgZm9yIGxvY2FsIG1vZGUuCit2c25pdDogJChSRUxTKS5yZWwuc3JjIAorCXNlZCAtZSAnczslUkVMX1ZTTiU7JChSRUxfVlNOKTsnIFwKKwkgICAgICAgJDwgPiAkPC50bXAKKworIyBDcmVhdGUgYW5kIHBvc2l0aW9uIHNjcmlwdCBhbmQgYm9vdCBmaWxlcyBmb3IgbG9jYWwgbW9kZS4KKyQoTE9DQUxfU0NSSVBUX0FORF9CT09UX0ZJTEVTKTogCisJQCBlcmwgLXB6ICQoVVNSX0xJQlBBVEgpL2ZzbGliL2ViaW4gXAorCSAgICAgIC1ub3NoZWxsIFwKKwkgICAgICAtcyBmc19saWIgc19hcHBseSBmc19ib290X3NtaXRoZSBtYWtlX3NjcmlwdF9hbmRfYm9vdCAiW1wiJChFUkxfUlVOX1RPUCkvKlwiLCAgXCIkKFVTUl9MSUJQQVRIKVwiXS4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiQkKGJhc2VuYW1lIGBwd2RgKSIucmVsLnNyYy50bXBcIi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW2xvY2FsXS4gIiBcCisJICAgICAgLXMgaW5pdCBzdG9wCisJY3AgJChTQ1JJUFRfQU5EX0JPT1RfRklMRVMpICQoTE9DQUxfRElSKS8gCisKKyQoTE9DQUxfRElSKS92YXIvJChSRUxfVlNOKS93d3cvY29uZi9taW1lLnR5cGVzOiAuLi8uLi9idWlsZC9taW1lLnR5cGVzCisJY3AgJDwgJEAKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRBUkdFVFMgRk9SIFBST0RVQ1RJT04gTU9ERQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskKFJFTFMpL2xpYjogCisJIyBGb3Igc29tZSByZWFzb24gdGhpcyB3aWxsIG5vdCBoYXBwZW4gaWYgYWRkZWQgdG8gUFJPRFVDVElPTl9ESVJfU1RSVUNUVVJFCisJbWtkaXIgJEAKKwlAIGVybCAtcHogJChSRUxTKS9idWlsZC8kKFJFTF9WU04pIFwKKwkgICAgICAtbm9zaGVsbCBcCisJICAgICAgLXMgZnNfbGliIHNfYXBwbHkgZnNfYm9vdF9zbWl0aGUgc3RhZ2VfZnJvbV9yZWxzcmMgIltcIiQoVVNSX0xJQlBBVEgpXCJdLiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIkJChiYXNlbmFtZSBgcHdkYCkiLnJlbC5zcmNcIi4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJEBcIiIuICIgXAorCSAgICAgIC1zIGluaXQgc3RvcAorCisjIE1vdmUgdGhlIGh0ZG9jcyBmcm9tIHRoZSBsb2NhbCBhcHBzIHRvIHRoZSBwcm9kdWN0aW9uIGh0ZG9jIHJvb3QgZGlyZWN0b3J5LgorJChSRUxTKS92YXIvJChSRUxfVlNOKS93d3cvaHRkb2NzLzogJChIVERPQ1MpCisJQG1rZGlyIC1wICQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jczsgXAorCWZvciB4IGluICQoSFRET0NTKTtkbyBcCisgCQljcCAgJCR4ICRAOyBcCisJZG9uZQorCisjIHN0YXJ0dXAgc2NyaXB0IGZvciBwcm9kdWN0aW9uIG1vZGUKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5zaC5zcmM6IAorCUBlY2hvICcjIS9iaW4vc2gnID4gJEAKKwlAZWNobyAiY2QgJUlOU1RBTExfRElSJS8kKFJFTFMpL3JlbGVhc2UvJChSRUxfVlNOKSIgPj4gJEAKKwlAZWNobyAiZXJsIC1uYW1lICQoUkVMUykgLWJvb3QgJChSRUxTKSAtY29uZmlnICQoUkVMUykuY29uZmlnIC1kZXRhY2hlZCBcJCRAIiA+PiAkQAorCWNobW9kICt4ICRACisKKyQoUkVMUykvYnVpbGQvJChSRUxfVlNOKTogICQoVVNSX0xJQlBBVEgpL2ZzbGliL2ViaW4KKwlta2RpciAtcCAkKFJFTFMpL2J1aWxkLyQoUkVMX1ZTTikgCisJY3AgJDwvZnNfYm9vdF9zbWl0aGUuYmVhbSAkQAorCWNwICQ8L2ZzX2xpYi5iZWFtICRACisJY3AgJDwvZnNfbGlzdHMuYmVhbSAkQAorCiskKFJFTFMpL3N0YWdlLyQoUkVMUykucmVsLnNyYzogJChSRUxTKS5yZWwuc3JjLnRtcAorCWNwICQ8ICRACisKKyQoUkVMUykvc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjOiAkKFJFTFMpLmNvbmZpZy5zcmMKKwljcCAkPCAkQAorCiskKFJFTFMpL3N0YWdlL3lhd3MuY29uZi5zcmM6IHlhd3MuY29uZi5zcmMKKwljcCAkPCAkQAorCiskKFJFTFMpL2luc3RhbGwuc2g6IAorCUBlY2hvICcjIS9iaW4vc2gnID4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJpZiBbIFwkJCMgLWVxIDEgXTt0aGVuIiA+PiAkQAorCUBlY2hvICIgICAgSU5TVEFMTF9ESVI9XCQkMTsiID4+ICRACisJQGVjaG8gImVsc2UiID4+ICRACisJQGVjaG8gIiAgICBJTlNUQUxMX0RJUj0kKElOU1RBTExfRElSKTsiID4+ICRACisJQGVjaG8gImZpIiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImZ1bmN0aW9uIG11bmdlKCkgeyIgPj4gJEAKKwlAZWNobyAiICAgIHNlZCAtZSBcInM7JUxPR19PVFAlO1wkJElOU1RBTExfRElSLyQoUkVMUykvbG9nLyQoUkVMX1ZTTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslVkFSX09UUCU7XCQkSU5TVEFMTF9ESVIvJChSRUxTKS92YXIvJChSRUxfVlNOKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVSRUxTJTskKFJFTFMpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JVJFTF9WU04lOyQoUkVMX1ZTTik7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslVVNFUiU7JCRVU0VSO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUhURE9DX1JPT1QlO1wkJElOU1RBTExfRElSLyQoUkVMUykvdmFyLyQoUkVMX1ZTTikvd3d3L2h0ZG9jcztnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVNSE9TVCU7XGBob3N0bmFtZVxgO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUJST0FEQ0FTVF9BRERSRVNTJTskKEJST0FEQ0FTVF9BRERSRVNTKTtnXCIgXFwiID4+ICRACisJQGVjaG8gIiAgICAgICAgLWUgXCJzOyVJTlNUQUxMX0RJUiU7XCQkSU5TVEFMTF9ESVI7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQ09OVEFDVF9OT0RFJTskKENPTlRBQ1RfTk9ERSk7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslSE9TVE5BTUUlO1xgaG9zdG5hbWUgLS1sb25nXGA7Z1wiIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAgIC1lIFwiczslQVBQX05BTUUlOyQoQVBQX05BTUUpO2dcIiBcXCIgPj4gJEAKKwlAZWNobyAiICAgICAgICAtZSBcInM7JUFQUF9WRVJTSU9OJTskKEFQUF9WRVJTSU9OKTtnXCIgXFwiID4+ICRACisJQGVjaG8gJyAgICAgICAgJCQxID4gJCQyJyA+PiAkQAorCUBlY2hvICJ9IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlL3lhd3MuY29uZi5zcmMgdmFyLyQoUkVMX1ZTTikvd3d3L2NvbmYveWF3cy5jb25mOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5jb25maWcuc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLmNvbmZpZzsiID4+ICRACisJQGVjaG8gIm11bmdlIHN0YWdlLyQoUkVMUykuc2guc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoOyIgPj4gJEAKKwlAZWNobyAibXVuZ2Ugc3RhZ2UvJChSRUxTKS5yZWwuc3JjIHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnJlbDsiID4+ICRACisJQGVjaG8gImNobW9kICt4IHJlbGVhc2UvJChSRUxfVlNOKS8kKFJFTFMpLnNoOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJjZCAuLjsiID4+ICRACisJQGVjaG8gImZpbmQgJChSRUxTKSB8IGNwaW8gLW8gPiBcJCRJTlNUQUxMX0RJUi8kKFJFTFMpLmNwaW87IiA+PiAkQAorCUBlY2hvICJjZCAtOyIgPj4gJEAKKwlAZWNobyAiY2QgXCQkSU5TVEFMTF9ESVI7ICIgPj4gJEAKKwlAZWNobyAiZWNobyAtbiBcIlVucGFja2VkOiBcIiIgPj4gJEAKKwlAZWNobyAiY3BpbyAtdWlkIDwgJChSRUxTKS5jcGlvOyIgPj4gJEAKKwlAZWNobyAicm0gJChSRUxTKS5jcGlvOyIgPj4gJEAKKwlAZWNobyAiIiA+PiAkQAorCUBlY2hvICJlY2hvIFwicHdkIGlzIFxgcHdkXGBcIjsiID4+ICRACisJQGVjaG8gImNkICQoUkVMUyk7IiA+PiAkQAorCUBlY2hvICIgZXJsIC1weiBidWlsZC8kKFJFTF9WU04pIFxcIiA+PiAkQAorCUBlY2hvICIgICAgICAtbm9zaGVsbCBcXCIgPj4gJEAKKwlAZWNobyAtbiAiICAgICAgLXMgZnNfbGliIHNfYXBwbHkgZnNfYm9vdF9zbWl0aGUgbWFrZV9zY3JpcHRfYW5kX2Jvb3QgXCJbXFxcIiQoRVJMX1JVTl9UT1ApLypcXFwiLCAgXFxcImxpYi9cXFwiXS4gXCIgIiA+PiAkQAorCUBlY2hvIC1uICAgICAgICAiXCJcXFwic3RhZ2UvJCQoYmFzZW5hbWUgYHB3ZGApLnJlbC5zcmNcXFwiLiBcIiAiID4+ICRACisJQGVjaG8gLW4gICAgICAgICJcIltsb2NhbF0uIFwiICIgPj4gJEAKKwlAZWNobyAgICAgICAgICAgIi1zIGluaXQgc3RvcCB8IGVncmVwICcqdGVybWluYXRlKnxFUlJPUiciID4+ICRACisJQGVjaG8gImlmIFsgXCQkPyAtZXEgMCBdOyB0aGVuIiA+PiAkQAorCUBlY2hvICJlY2hvIFwiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cIjsiID4+ICRACisJQGVjaG8gImVjaG8gXCJTVEFHRSBGQUlMVVJFIFwkJD8gIC0gU2lsZW5jZSB0aGUgZGlzY29yZC5cIjsiID4+ICRACisJQGVjaG8gImVjaG8gXCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVwiOyIgPj4gJEAKKwlAZWNobyAiZXhpdCAxOyIgPj4gJEAKKwlAZWNobyAiZmkiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAibXYgJChSRUxTKS5yZWwgJChSRUxTKS5zY3JpcHQgJChSRUxTKS5ib290IHJlbGVhc2UvJChSRUxfVlNOKTsiID4+ICRACisJQGVjaG8gIiIgPj4gJEAKKwlAZWNobyAicm0gLXIgc3RhZ2U7IiA+PiAkQAorCUBlY2hvICJybSAtciBidWlsZDsiID4+ICRACisJQGVjaG8gImNkIC07IiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gImNoZ3JwIC1SIGVydHMgJChSRUxTKTsgIiA+PiAkQAorCUBlY2hvICJjaG1vZCAtUiA3NzUgJChSRUxTKTsgIiA+PiAkQAorCUBlY2hvICJjZCAtIiA+PiAkQAorCUBlY2hvICIiID4+ICRACisJQGVjaG8gInJtIC1mIC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyIgPj4gJEAKKwlAZWNobyAibG4gLXMgXCQkSU5TVEFMTF9ESVIvJChSRUxTKS9yZWxlYXNlLyQoUkVMX1ZTTikvJChSRUxTKS5zaCAvdXNyL2xvY2FsL2Jpbi8kKEFQUF9OQU1FKTsiID4+ICRACisJQGVjaG8gImNoZ3JwIC1SIGVydHMgL3Vzci9sb2NhbC9iaW4vJChBUFBfTkFNRSk7ICIgPj4gJEAKKwlAZWNobyAiY2htb2QgLVIgNzc1IC91c3IvbG9jYWwvYmluLyQoQVBQX05BTUUpOyAiID4+ICRACisJQGVjaG8gInJtIFwkJElOU1RBTExfRElSLyQoUkVMUykvaW5zdGFsbC5zaDsiID4+ICRACisJQGVjaG8gImVjaG8gLW4gJCQnXGVbMDszMm0nIiA+PiAkQAorCUBlY2hvICJlY2hvIFwiJChBUFBfTkFNRSkgaW5zdGFsbGF0aW9uIHRvIFwkJElOU1RBTExfRElSIGNvbXBsZXRlLlwiIiA+PiAkQAorCUBlY2hvICJlY2hvIC1uICQkJ1xlWzBtJyIgPj4gJEAKKwljaG1vZCAreCAkQAorCQkKKworc3RhZ2U6ICQoUkVMUykKKwljZCAkKFJFTFMpOyBcCisJLi9pbnN0YWxsLnNoOyBcCisJY2QgLQorCiskKFJFTFMpL3Zhci8kKFJFTF9WU04pL3d3dy9jb25mL21pbWUudHlwZXM6IC4uLy4uL2J1aWxkL21pbWUudHlwZXMKKwljcCAkPCAkQAorCiskKFJFTFMpLSQoTE9DQVRJT04pLSQoUkVMX1ZTTikudGd6OiAkKFJFTFMpCisJdGFyIC16Y3ZmICRAICQ8CisKKyQoUkVMUykvcmVsZWFzZS8kKFJFTF9WU04pL2NsZWFuX3JlbGVhc2U6IC4uLy4uL3Rvb2xzL3V0aWxpdGllcy9jbGVhbl9yZWxlYXNlCisJY3AgJDwgJEAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5jb25maWcuc3JjIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5jb25maWcuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MDFjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLmNvbmZpZy5zcmMKQEAgLTAsMCArMSwyNiBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KKyUlJSBQYXJhbWV0ZXIgc2V0dGluZ3MgZm9yIGFwcHMgb24gJUFQUF9OQU1FJQorJSUlIFdhcm5pbmcgLSB0aGlzIGNvbmZpZyBmaWxlICptdXN0KiBlbmQgd2l0aCA8ZG90Pjx3aGl0ZXNwYWNlPgorCislJSB3cml0ZSBsb2cgZmlsZXMgdG8gc2FzbF9kaXIKK1sKKyB7c2FzbCwKKyAgWworICAge3Nhc2xfZXJyb3JfbG9nZ2VyLCB7ZmlsZSwgIiVMT0dfT1RQJS9zYXNsX2xvZyJ9fQorICBdfSwKKworCisge2dhcywKKyAgWworICAge21vZF9zcGVjcywgW3tlbHdyYXAsIHtmc19lbHdyYXBfaCwgc3RhcnRfbGlua319XX0sCisKKyAgICUgZWx3cmFwIGNvbmZpZy4KKyAgIHtlcnJfbG9nLCAiJUxPR19PVFAlL2Vycl9sb2cifSwKKyAgIHtlcnJfbG9nX3dyYXBfaW5mbywge3tlcnIsNTAwMDAwMCwxMH0se3Nhc2wsNTAwMDAwMCwxMH19fSwgCisgICB7ZXJyX2xvZ190dHksIHRydWV9ICUgTG9nIHRvIHRoZSBzY3JlZW4KKyAgIF19LAorCisgeyVBUFBfTkFNRSUsCisgIFsKKyAgXX0KK10uIApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5yZWwuc3JjIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdGhyaWZ0X3JlbC5yZWwuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMWQyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC90aHJpZnRfcmVsLnJlbC5zcmMKQEAgLTAsMCArMSwxNCBAQAorJSUlIC0qLSBtb2RlOmVybGFuZyAtKi0KK3tyZWxlYXNlLCAKKyB7InRocmlmdF9yZWwiLCAiJVJFTF9WU04lIn0sCisgZXJ0cywKKyBbCisgIGtlcm5lbCwKKyAgc3RkbGliLAorICBzYXNsLAorICBmc2xpYiwKKyAgZ2FzLAorICB0aHJpZnQKKyBdCit9LiAKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdnNuLm1rIGIvbGliL2VybC90b29scy8uYXBwZ2VuL3RocmlmdF9yZWwvdnNuLm1rCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhYzhlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC92c24ubWsKQEAgLTAsMCArMSBAQAorUkVMX1ZTTj0xLjAKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvLmFwcGdlbi90aHJpZnRfcmVsL3lhd3MuY29uZi5zcmMgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC95YXdzLmNvbmYuc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTdhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzLy5hcHBnZW4vdGhyaWZ0X3JlbC95YXdzLmNvbmYuc3JjCkBAIC0wLDAgKzEsMTY2IEBACisKKyMgY29uZiBmb3IgeWF3cworCisKKyMgZmlyc3Qgd2UgaGF2ZSBhIHNldCBvZiBnbG9iYWxzCisjIFRoYXQgYXBwbHkgdG8gYWxsIHZpcnR1YWwgc2VydmVycworCisKKyMgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBsb2dmaWxlcyBmb3IKKyMgYWxsIHZpcnR1YWwgc2VydmVycyB3aWxsIGJlIHdyaXR0ZW4KKworbG9nZGlyID0gL3Zhci9sb2cveWF3cworCisjIFRoaXMgdGhlIHBhdGggdG8gYSBkaXJlY3Rvcnkgd2hlcmUgYWRkaXRpb25hbAorIyBiZWFtIGNvZGUgY2FuIGJlIHBsYWNlZC4gVGhlIGRhZW1vbiB3aWxsIGFkZCB0aGlzCisjIGRpcmVjdG9yeSB0byBpdHMgc2VhcmNoIHBhdGgKKworZWJpbl9kaXIgPSAvdmFyL3lhd3MvZWJpbgorCisKKyMgVGhpcyBpcyBhIGRpcmVjdG9yeSB3aGVyZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyAuaHJsCisjIGZpbGVzIGNhbiBiZSBwbGFjZWQuIGFwcGxpY2F0aW9uIHNwZWNpZmlnIC55YXdzIGNvZGUgY2FuCisjIHRoZW4gaW5jbHVkZSB0aGVzZSAuaHJsIGZpbGVzCisKK2luY2x1ZGVfZGlyID0gL3Zhci95YXdzL2luY2x1ZGUKKworCisKKworCisjIFRoaXMgaXMgYSBkZWJ1ZyB2YXJpYWJsZSwgcG9zc2libGUgdmFsdWVzIGFyZSBodHRwIHwgdHJhZmZpYyB8IGZhbHNlCisjIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSB0cmFjZSAocG9zc2libHkgdG8gdGhlIHR0eSkgd2hpbGUKKyMgaW52b2tpbmcgeWF3cyBmcm9tIHRoZSBzaGVsbCBhcyBpbgorIyB5YXdzIC1pIC1UIC14IChzZWUgbWFuIHlhd3MpCisKK3RyYWNlID0gZmFsc2UKKworCisKKworCisjIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgeWF3cyBzdGFydCBhZGRpdGlvbmFsIAorIyBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb2RlIGF0IHN0YXJ0dXAKKyMgCisjIHJ1bm1vZCA9IG15bW9kdWxlCisKKworIyBCeSBkZWZhdWx0IHlhd3Mgd2lsbCBjb3B5IHRoZSBlcmxhbmcgZXJyb3JfbG9nIGFuZAorIyBlbmQgd3JpdGUgaXQgdG8gYSB3cmFwIGxvZyBjYWxsZWQgcmVwb3J0LmxvZyAoaW4gdGhlIGxvZ2RpcikKKyMgdGhpcyBmZWF0dXJlIGNhbiBiZSB0dXJuZWQgb2ZmLiBUaGlzIHdvdWxkIHR5cGljYWxseQorIyBiZSB0aGUgY2FzZSB3aGVuIHlhd3MgcnVucyB3aXRoaW4gYW5vdGhlciBsYXJnZXIgYXBwCisKK2NvcHlfZXJyb3JfbG9nID0gdHJ1ZQorCisKKyMgTG9ncyBhcmUgd3JhcCBsb2dzCisKK2xvZ193cmFwX3NpemUgPSAxMDAwMDAwCisKKworIyBQb3NzaWJseSByZXNvbHZlIGFsbCBob3N0bmFtZXMgaW4gbG9nZmlsZXMgc28gd2ViYWxpemVyCisjIGNhbiBwcm9kdWNlIHRoZSBuaWNlIGdlb2dyYXBoeSBwaWVjaGFydAorCitsb2dfcmVzb2x2ZV9ob3N0bmFtZSA9IGZhbHNlCisKKworCisjIGZhaWwgY29tcGxldGVseSBvciBub3QgaWYgeWF3cyBmYWlscyAKKyMgdG8gYmluZCBhIGxpc3RlbiBzb2NrZXQKK2ZhaWxfb25fYmluZF9lcnIgPSB0cnVlCisKKworCisjIElmIHlhd3MgaXMgc3RhcnRlZCBhcyByb290LCBpdCBjYW4sIG9uY2UgaXQgaGFzIG9wZW5lZAorIyBhbGwgcmVsZXZhbnQgc29ja2V0cyBmb3IgbGlzdGVuaW5nLCBjaGFuZ2UgdGhlIHVpZCB0byBhIAorIyB1c2VyIHdpdGggbG93ZXIgYWNjZXNzcmlnaHRzIHRoYW4gcm9vdCAKKworIyB1c2VybmFtZSA9IG5vYm9keQorCisKKyMgSWYgSFRUUCBhdXRoIGlzIHVzZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBzcGVjaWZpYworIyBhdXRoIGxvZy4KKworYXV0aF9sb2cgPSB0cnVlCisKKworIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgbXVsdGlwbGUgeWF3cyBzeXN0ZW1zIG9uIHRoZSBzYW1lIAorIyBob3N0LCB3ZSBuZWVkIHRvIGdpdmUgZWFjaCB5YXdzIHN5c3RlbSBhbiBpbmRpdmlkdWFsCisjIG5hbWUuIFlhd3Mgd2lsbCB3cml0ZSBhIG51bWJlciBvZiBydW50aW1lIGZpbGVzIHVuZGVyCisjIC90bXAveWF3cy8ke2lkfQorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdCIKKworCisjIGlkID0gbXluYW1lCisKKworIyBlYXJsaWVyIHZlcnNpb25zIG9mIFlhd3MgcGlja2VkIHRoZSBmaXJzdCB2aXJ0dWFsIGhvc3QKKyMgaW4gYSBsaXN0IG9mIGhvc3RzIHdpdGggdGhlIHNhbWUgSVAvUE9SVCB3aGVuIHRoZSBIb3N0OgorIyBoZWFkZXIgZG9lc24ndCBtYXRjaCBhbnkgbmFtZSBvbiBhbnkgSG9zdAorIyBUaGlzIGlzIG9mdGVuIG5pY2UgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgYnV0IG5vdAorIyBhY2NlcHRhYmxlIGluIHJlYWwgbGl2ZSBob3N0aW5nIHNjZW5hcmlvcworCitwaWNrX2ZpcnN0X3ZpcnRob3N0X29uX25vbWF0Y2ggPSB0cnVlCisKKworIyBBbGwgdW5pY2VzIGFyZSBicm9rZW4gc2luY2UgaXQncyBub3QgcG9zc2libGUgdG8gYmluZCB0bworIyBhIHByaXZpbGVnZWQgcG9ydCAoPCAxMDI0KSB1bmxlc3MgdWlkPT0wCisjIFRoZXJlIGlzIGEgY29udHJpYiBpbiBqdW5nZXJsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIGJ5IG1lYW5zIAorIyBvZiBhbiBleHRlcm5hbCBzZXR1aWQgcm9vdCBwcm9ncmFtbSBjYWxsZWQgZmRzcnYgdG8gbGlzdGVuIHRvCisjIHRvIHByaXZpbGVnZWQgcG9ydC4KKyMgSWYgd2UgdXNlIHRoaXMgZmVhdHVyZSwgaXQgcmVxdWlyZXMgZmRzcnYgdG8gYmUgcHJvcGVybHkgaW5zdGFsbGVkLgorIyBEb2Vzbid0IHlldCB3b3JrIHdpdGggU1NMLgorCit1c2VfZmRzcnYgPSBmYWxzZQorCisKKworCisjIGVuZCB0aGVuIGEgc2V0IG9mIHZpcnR1YWwgc2VydmVycworIyBGaXJzdCB0d28gdmlydGhvc3RlZCBzZXJ2ZXJzIG9uIHRoZSBzYW1lIElQICgwLjAuMC4wKQorIyBpbiB0aGlzIGNhc2UsIGJ1dCBhbiBleHBsaWNpdCBJUCBjYW4gYmUgZ2l2ZW4gYXMgd2VsbAorCis8c2VydmVyIGNvcmUubWFydGluamxvZ2FuLmNvbT4KKwlwb3J0ID0gODAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZG9jcm9vdCA9IC92YXIveWF3cy93d3cKKwlhcmdfcmV3cml0ZV9tb2QgPSBwd3JfYXJnX3Jld3JpdGVfbW9kCisJYXBwbW9kcyA9IDxwd3IsIHB3cl9tYWluX2NvbnRyb2xsZXJfYXBwbW9kPgorPC9zZXJ2ZXI+CisKKzxzZXJ2ZXIgbG9jYWxob3N0PgorCXBvcnQgPSA4MAorCWxpc3RlbiA9IDAuMC4wLjAKKwlkb2Nyb290ID0gL3RtcAorCWRpcl9saXN0aW5ncyA9IHRydWUKKwlkYXYgPSB0cnVlCisJPGF1dGg+CisJCXJlYWxtID0gZm9vYmFyCisJCWRpciA9IC8KKwkJdXNlciA9IGZvbzpiYXIKKwkJdXNlciA9IGJhejpiYXIKKwk8L2F1dGg+Cis8L3NlcnZlcj4KKworCisKKyMgQW5kIHRoZW4gYW4gc3NsIHNlcnZlcgorCis8c2VydmVyIGNvcmUubWFydGluamxvZ2FuLmNvbT4KKwlwb3J0ID0gNDQzCisJZG9jcm9vdCA9IC90bXAKKwlsaXN0ZW4gPSAwLjAuMC4wCisJZGlyX2xpc3RpbmdzID0gdHJ1ZQorCTxzc2w+ICAKKwkgICAgICAgIGtleWZpbGUgPSAvdXNyL2xvY2FsL3lhd3MvZXRjL3lhd3Mta2V5LnBlbQorCSAgICAgICAgY2VydGZpbGUgPSAvdXNyL2xvY2FsL3lhd3MvZXRjL3lhd3MtY2VydC5wZW0KKwk8L3NzbD4KKzwvc2VydmVyPgorCQkJCQorCQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy9lbWFjcy9lcmxhbmctc3RhcnQuZWwgYi9saWIvZXJsL3Rvb2xzL2VtYWNzL2VybGFuZy1zdGFydC5lbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTgxYjlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy9lbWFjcy9lcmxhbmctc3RhcnQuZWwKQEAgLTAsMCArMSwxMTUgQEAKKzs7IGVybGFuZy1zdGFydC5lbCAtLS0gTG9hZCB0aGlzIGZpbGUgdG8gaW5pdGlhbGl6ZSB0aGUgRXJsYW5nIHBhY2thZ2UuCisKKzs7IENvcHlyaWdodCAoQykgMTk5OCAgRXJpY3Nzb24gVGVsZWNvbSBBQgorCis7OyBBdXRob3I6ICAgQW5kZXJzIExpbmRncmVuCis7OyBWZXJzaW9uOiAgMi4zCis7OyBLZXl3b3JkczogZXJsYW5nLCBsYW5ndWFnZXMsIHByb2Nlc3NlcworOzsgQ3JlYXRlZDogIDE5OTYtMDktMTgKKzs7IERhdGU6ICAgICAxOTk4LTAzLTE2CisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBJbnRyb2R1Y3Rpb246Cis7OyAtLS0tLS0tLS0tLS0KKzs7Cis7OyBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIEVybGFuZy4KKzs7IFRoZSBwYWNrYWdlIHByb3ZpZGVzIGFuIGVkaXRpbmcgbW9kZSB3aXRoIGxvdHMgb2YgYmVsbHMgYW5kCis7OyB3aGlzdGxlcywgY29tcGlsYXRpb24gc3VwcG9ydCwgYW5kIGl0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGUKKzs7IHVzZXIgdG8gc3RhcnQgRXJsYW5nIHNoZWxscyB0aGF0IHJ1biBpbnNpZGUgRW1hY3MuCis7OworOzsgU2VlIHRoZSBFcmxhbmcgZGlzdHJpYnV0aW9uIGZvciBmdWxsIGRvY3VtZW50YXRpb24gb2YgdGhpcyBwYWNrYWdlLgorCis7OyBJbnN0YWxsYXRpb246Cis7OyAtLS0tLS0tLS0tLS0KKzs7Cis7OyBQbGFjZSB0aGlzIGZpbGUgaW4gRW1hY3MgbG9hZCBwYXRoLCBieXRlLWNvbXBpbGUgaXQsIGFuZCBhZGQgdGhlCis7OyBmb2xsb3dpbmcgbGluZSB0byB0aGUgYXBwcm9wcmlhdGUgaW5pdCBmaWxlOgorOzsKKzs7ICAgIChyZXF1aXJlICdlcmxhbmctc3RhcnQpCis7OworOzsgVGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiBjb250YWlucyBtdWNoIG1vcmUgZXh0ZW5zaXZlIGRlc2NyaXB0aW9uIG9mCis7OyB0aGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZS4KKworOzsgUmVwb3J0aW5nIEJ1Z3M6Cis7OyAtLS0tLS0tLS0tLS0tLQorOzsKKzs7IFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIHRoZSBmb2xsb3dpbmcgZW1haWwgYWRkcmVzczoKKzs7ICAgICBzdXBwb3J0QGVybGFuZy5lcmljc3Nvbi5zZQorOzsKKzs7IFBsZWFzZSBzdGF0ZSBhcyBleGFjdGx5IGFzIHBvc3NpYmxlOgorOzsgICAgLSBWZXJzaW9uIG51bWJlciBvZiBFcmxhbmcgTW9kZSAoc2VlIHRoZSBtZW51KSwgRW1hY3MsIEVybGFuZywKKzs7CWFuZCBvZiBhbnkgb3RoZXIgcmVsZXZhbnQgc29mdHdhcmUuCis7OyAgICAtIFdoYXQgdGhlIGV4cGVjdGVkIHJlc3VsdCB3YXMuCis7OyAgICAtIFdoYXQgeW91IGRpZCwgcHJlZmVyYWJseSBpbiBhIHJlcGVhdGFibGUgc3RlcC1ieS1zdGVwIGZvcm0uCis7OyAgICAtIEEgZGVzY3JpcHRpb24gb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0LgorOzsgICAgLSBSZWxldmFudCBwaWVjZXMgb2YgRXJsYW5nIGNvZGUgY2F1c2luZyB0aGUgcHJvYmxlbS4KKzs7ICAgIC0gUGVyc29uYWwgRW1hY3MgY3VzdG9taXNhdGlvbnMsIGlmIGFueS4KKzs7Cis7OyBTaG91bGQgdGhlIEVtYWNzIGdlbmVyYXRlIGFuIGVycm9yLCBwbGVhc2Ugc2V0IHRoZSBlbWFjcyB2YXJpYWJsZQorOzsgYGRlYnVnLW9uLWVycm9yJyB0byBgdCcuICBSZXBlYXQgdGhlIGVycm9yIGFuZCBlbmNsb3NlIHRoZSBkZWJ1ZworOzsgaW5mb3JtYXRpb24gaW4geW91ciBidWctcmVwb3J0LgorOzsKKzs7IFRvIHNldCB0aGUgdmFyaWFibGUgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorOzsgICAgIE0teCBzZXQtdmFyaWFibGUgUkVUIGRlYnVnLW9uLWVycm9yIFJFVCB0IFJFVAorOzs7IENvZGU6CisKKzs7Cis7OyBEZWNsYXJlIGZ1bmN0aW9ucyBpbiAiZXJsYW5nLmVsIi4KKzs7CisKKyhhdXRvbG9hZCAnZXJsYW5nLW1vZGUgImVybGFuZyIgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgRXJsYW5nIGNvZGUuIiB0KQorKGF1dG9sb2FkICdlcmxhbmctdmVyc2lvbiAiZXJsYW5nIiAKKyAgIlJldHVybiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEVybGFuZyBtb2RlLiIgdCkKKyhhdXRvbG9hZCAnZXJsYW5nLXNoZWxsICJlcmxhbmciICJTdGFydCBhIG5ldyBFcmxhbmcgc2hlbGwuIiB0KQorKGF1dG9sb2FkICdydW4tZXJsYW5nICJlcmxhbmciICJTdGFydCBhIG5ldyBFcmxhbmcgc2hlbGwuIiB0KQorCisoYXV0b2xvYWQgJ2VybGFuZy1jb21waWxlICJlcmxhbmciCisgICJDb21waWxlIEVybGFuZyBtb2R1bGUgaW4gY3VycmVudCBidWZmZXIuIiB0KQorCisoYXV0b2xvYWQgJ2VybGFuZy1tYW4tbW9kdWxlICJlcmxhbmciIAorICAiRmluZCBtYW51YWwgcGFnZSBmb3IgTU9EVUxFLiIgdCkKKyhhdXRvbG9hZCAnZXJsYW5nLW1hbi1mdW5jdGlvbiAiZXJsYW5nIgorICAiRmluZCBtYW51YWwgcGFnZSBmb3IgTkFNRSwgd2hlcmUgTkFNRSBpcyBtb2R1bGU6ZnVuY3Rpb24uIiB0KQorCisoYXV0b2xvYWQgJ2VybGFuZy1maW5kLXRhZyAiZXJsYW5nIgorICAiTGlrZSBgZmluZC10YWcnLiAgQ2FwYWJsZSBvZiByZXRyZWl2aW5nIEVybGFuZyBtb2R1bGVzLiIpCisoYXV0b2xvYWQgJ2VybGFuZy1maW5kLXRhZy1vdGhlci13aW5kb3cgImVybGFuZyIKKyAgIkxpa2UgYGZpbmQtdGFnLW90aGVyLXdpbmRvdycuICBDYXBhYmxlIG9mIHJldHJlaXZpbmcgRXJsYW5nIG1vZHVsZXMuIikKKworCis7OworOzsgQXNzb2NpYXRlIGZpbGVzIGV4dGVuc2lvbnMgIi5lcmwiIGFuZCAiLmhybCIgd2l0aCBFcmxhbmcgbW9kZS4KKzs7CisKKyhsZXQgKChhICcoIlxcLmVybFxcJyIgLiBlcmxhbmctbW9kZSkpCisgICAgICAoYiAnKCJcXC5ocmxcXCciIC4gZXJsYW5nLW1vZGUpKSkKKyAgKG9yIChhc3NvYyAoY2FyIGEpIGF1dG8tbW9kZS1hbGlzdCkKKyAgICAgIChzZXRxIGF1dG8tbW9kZS1hbGlzdCAoY29ucyBhIGF1dG8tbW9kZS1hbGlzdCkpKQorICAob3IgKGFzc29jIChjYXIgYikgYXV0by1tb2RlLWFsaXN0KQorICAgICAgKHNldHEgYXV0by1tb2RlLWFsaXN0IChjb25zIGIgYXV0by1tb2RlLWFsaXN0KSkpKQorCisKKzs7Cis7OyBJZ25vcmUgZmlsZXMgZW5kaW5nIGluICIuamFtIiwgIi52ZWUiLCBhbmQgIi5iZWFtIiB3aGVuIHBlcmZvcm1pbmcKKzs7IGZpbGUgY29tcGxldGlvbi4KKzs7CisKKyhsZXQgKChlcmwtZXh0ICcoIi5qYW0iICIudmVlIiAiLmJlYW0iKSkpCisgICh3aGlsZSBlcmwtZXh0CisgICAgKGxldCAoKGNpZSBjb21wbGV0aW9uLWlnbm9yZWQtZXh0ZW5zaW9ucykpCisgICAgICAod2hpbGUgKGFuZCBjaWUgKG5vdCAoc3RyaW5nLWVxdWFsIChjYXIgY2llKSAoY2FyIGVybC1leHQpKSkpCisJKHNldHEgY2llIChjZHIgY2llKSkpCisgICAgICAoaWYgKG51bGwgY2llKQorCSAgKHNldHEgY29tcGxldGlvbi1pZ25vcmVkLWV4dGVuc2lvbnMKKwkJKGNvbnMgKGNhciBlcmwtZXh0KSBjb21wbGV0aW9uLWlnbm9yZWQtZXh0ZW5zaW9ucykpKSkKKyAgICAoc2V0cSBlcmwtZXh0IChjZHIgZXJsLWV4dCkpKSkKKworCis7OworOzsgVGhlIGVuZC4KKzs7CisKKyhwcm92aWRlICdlcmxhbmctc3RhcnQpCisKKzs7IGVybGFuZy1zdGFydC5lbCBlbmRzIGhlcmUuCmRpZmYgLS1naXQgYS9saWIvZXJsL3Rvb2xzL2VtYWNzL2VybGFuZy5lbCBiL2xpYi9lcmwvdG9vbHMvZW1hY3MvZXJsYW5nLmVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU5MTZmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZXJsL3Rvb2xzL2VtYWNzL2VybGFuZy5lbApAQCAtMCwwICsxLDYyOTEgQEAKKzs7ICRJZDogZXJsYW5nLmVsLHYgMS4yMSAyMDA0LzA4LzAzIDIwOjM4OjQzIG1sb2dhbiBFeHAgJAorOzsgZXJsYW5nLmVsIC0tLSBNYWpvciBtb2RlcyBmb3IgZWRpdGluZyBhbmQgcnVubmluZyBFcmxhbmcKKworOzsgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsMjAwMCAgRXJpY3Nzb24gVGVsZWNvbSBBQgorCis7OyBBdXRob3I6ICAgQW5kZXJzIExpbmRncmVuCis7OyBWZXJzaW9uOiAgMi40Cis7OyBLZXl3b3JkczogZXJsYW5nLCBsYW5ndWFnZXMsIHByb2Nlc3NlcworOzsgRGF0ZTogICAgIDIwMDAtMDktMTEKKworOzsgTGFycyBUaG9yc+luJ3MgbW9kaWZpY2F0aW9ucyBvZiAyMDAwLTA2LTA3IGluY2x1ZGVkLgorIAorOzsgVGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlIHdhcyB3cml0dGVuIGJ5IFJvYmVydCBWaXJkaW5nLgorOzsKKzs7IE1vc3Qgc2tlbGV0b25zIGhhcyBiZWVuIHdyaXR0ZW4gYXQgRXJpY3Nzb24gVGVsZWNvbSBieQorOzsgbWFnbnVzQGVyaXguZXJpY3Nzb24uc2UgYW5kIGphbm5lQGVyaXguZXJpY3Nzb24uc2UKKworOzs7IENvbW1lbnRhcnk6CisKKzs7IEludHJvZHVjdGlvbjoKKzs7IC0tLS0tLS0tLS0tLQorOzsKKzs7IFRoaXMgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgRXJsYW5nLgorOzsgVGhlIHBhY2thZ2UgcHJvdmlkZXMgYW4gZWRpdGluZyBtb2RlIHdpdGggbG90cyBvZiBiZWxscyBhbmQKKzs7IHdoaXN0bGVzLCBjb21waWxhdGlvbiBzdXBwb3J0LCBhbmQgaXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHRoZQorOzsgdXNlciB0byBzdGFydCBFcmxhbmcgc2hlbGxzIHRoYXQgcnVuIGluc2lkZSBFbWFjcy4KKzs7Cis7OyBTZWUgdGhlIEVybGFuZyBkaXN0cmlidXRpb24gZm9yIGZ1bGwgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHBhY2thZ2UuCisKKzs7IEluc3RhbGxhdGlvbjoKKzs7IC0tLS0tLS0tLS0tLQorOzsKKzs7IFBsYWNlIHRoaXMgZmlsZSBpbiBFbWFjcyBsb2FkIHBhdGgsIGJ5dGUtY29tcGlsZSBpdCwgYW5kIGFkZCB0aGUKKzs7IGZvbGxvd2luZyBsaW5lIHRvIHRoZSBhcHByb3ByaWF0ZSBpbml0IGZpbGU6Cis7OworOzsgICAgKHJlcXVpcmUgJ2VybGFuZy1zdGFydCkKKzs7Cis7OyBUaGUgZnVsbCBkb2N1bWVudGF0aW9uIGNvbnRhaW5zIG11Y2ggbW9yZSBleHRlbnNpdmUgZGVzY3JpcHRpb24gb2YKKzs7IHRoZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlLgorCis7OyBSZXBvcnRpbmcgQnVnczoKKzs7IC0tLS0tLS0tLS0tLS0tCis7OworOzsgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIGZvbGxvd2luZyBlbWFpbCBhZGRyZXNzOgorOzsgICAgIHN1cHBvcnRAZXJsYW5nLmVyaWNzc29uLnNlCis7OworOzsgUGxlYXNlIHN0YXRlIGFzIGV4YWN0bHkgYXMgcG9zc2libGU6Cis7OyAgICAtIFZlcnNpb24gbnVtYmVyIG9mIEVybGFuZyBNb2RlIChzZWUgdGhlIG1lbnUpLCBFbWFjcywgRXJsYW5nLAorOzsJYW5kIG9mIGFueSBvdGhlciByZWxldmFudCBzb2Z0d2FyZS4KKzs7ICAgIC0gV2hhdCB0aGUgZXhwZWN0ZWQgcmVzdWx0IHdhcy4KKzs7ICAgIC0gV2hhdCB5b3UgZGlkLCBwcmVmZXJhYmx5IGluIGEgcmVwZWF0YWJsZSBzdGVwLWJ5LXN0ZXAgZm9ybS4KKzs7ICAgIC0gQSBkZXNjcmlwdGlvbiBvZiB0aGUgdW5leHBlY3RlZCByZXN1bHQuCis7OyAgICAtIFJlbGV2YW50IHBpZWNlcyBvZiBFcmxhbmcgY29kZSBjYXVzaW5nIHRoZSBwcm9ibGVtLgorOzsgICAgLSBQZXJzb25hbCBFbWFjcyBjdXN0b21pc2F0aW9ucywgaWYgYW55LgorOzsKKzs7IFNob3VsZCB0aGUgRW1hY3MgZ2VuZXJhdGUgYW4gZXJyb3IsIHBsZWFzZSBzZXQgdGhlIGVtYWNzIHZhcmlhYmxlCis7OyBgZGVidWctb24tZXJyb3InIHRvIGB0Jy4gIFJlcGVhdCB0aGUgZXJyb3IgYW5kIGVuY2xvc2UgdGhlIGRlYnVnCis7OyBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1Zy1yZXBvcnQuCis7OworOzsgVG8gc2V0IHRoZSB2YXJpYWJsZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Cis7OyAgICAgTS14IHNldC12YXJpYWJsZSBSRVQgZGVidWctb24tZXJyb3IgUkVUIHQgUkVUCisMCis7OzsgQ29kZToKKworOzsgVmFyaWFibGVzOgorCisoZGVmY29uc3QgZXJsYW5nLXZlcnNpb24gIjIuNCIKKyAgIlRoZSB2ZXJzaW9uIG51bWJlciBvZiBFcmxhbmcgbW9kZS4iKQorCisoZGVmdmFyIGVybGFuZy1yb290LWRpciBuaWwKKyAgIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIEVybGFuZyBzeXN0ZW0gaXMgaW5zdGFsbGVkLgorVGhlIG5hbWUgc2hvdWxkIG5vdCBjb250YWluIHRoZSBlbmRpbmcgc2xhc2guCisKK1Nob3VsZCB0aGlzIHZhcmlhYmxlIGJlIG5pbCwgbm8gbWFudWFsIHBhZ2VzIHdpbGwgc2hvdyB1cCBpbiB0aGUKK0VybGFuZyBtb2RlIG1lbnUuIikKKworKGRlZnZhciBlcmxhbmctbWVudS1pdGVtcyAnKGVybGFuZy1tZW51LWJhc2UtaXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS1za2VsLWl0ZW1zCisJCQkgICAgZXJsYW5nLW1lbnUtc2hlbGwtaXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS1jb21waWxlLWl0ZW1zCisJCQkgICAgZXJsYW5nLW1lbnUtbWFuLWl0ZW1zCisJCQkgICAgZXJsYW5nLW1lbnUtcGVyc29uYWwtaXRlbXMKKwkJCSAgICBlcmxhbmctbWVudS12ZXJzaW9uLWl0ZW1zKQorICAiKkxpc3Qgb2YgbWVudSBpdGVtIGxpc3QgdG8gY29tYmluZSB0byBjcmVhdGUgRXJsYW5kIG1vZGUgbWVudS4KKworRXh0ZXJuYWwgcHJvZ3JhbXMgd2hpY2ggdGVtcG9yYXJ5IGFkZHMgbWVudSBpdGVtcyB0byB0aGUgRXJsYW5kIG1vZGUKK21lbnUgdXNlIHRoaXMgdmFyaWFibGUuICBQbGVhc2UgdXNlIHRoZSBmdW5jdGlvbiBgYWRkLWhvb2snIHRvIGFkZAoraXRlbXMuCisKK1BsZWFzZSBjYWxsIHRoZSBmdW5jdGlvbiBgZXJsYW5nLW1lbnUtaW5pdCcgYWZ0ZXIgZXZlcnkgY2hhbmdlIHRvIHRoaXMKK3ZhcmlhYmxlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcworICAnKCgiSW5kZW50IgorICAgICAoKCJJbmRlbnQgTGluZSIgZXJsYW5nLWluZGVudC1jb21tYW5kKQorICAgICAgKCJJbmRlbnQgUmVnaW9uICIgZXJsYW5nLWluZGVudC1yZWdpb24KKyAgICAgICAoaWYgZXJsYW5nLXhlbWFjcy1wIChtYXJrKSBtYXJrLWFjdGl2ZSkpCisgICAgICAoIkluZGVudCBDbGF1c2UiIGVybGFuZy1pbmRlbnQtY2xhdXNlKQorICAgICAgKCJJbmRlbnQgRnVuY3Rpb24iIGVybGFuZy1pbmRlbnQtZnVuY3Rpb24pCisgICAgICAoIkluZGVudCBCdWZmZXIiIGVybGFuZy1pbmRlbnQtY3VycmVudC1idWZmZXIpKSkKKyAgICAoIkVkaXQiCisgICAgICgoIkZpbGwgQ29tbWVudCIgZXJsYW5nLWZpbGwtcGFyYWdyYXBoKQorICAgICAgKCJDb21tZW50IFJlZ2lvbiIgY29tbWVudC1yZWdpb24KKyAgICAgICAoaWYgZXJsYW5nLXhlbWFjcy1wIChtYXJrKSBtYXJrLWFjdGl2ZSkpCisgICAgICAoIlVuY29tbWVudCBSZWdpb24iIGVybGFuZy11bmNvbW1lbnQtcmVnaW9uCisgICAgICAgKGlmIGVybGFuZy14ZW1hY3MtcCAobWFyaykgbWFyay1hY3RpdmUpKQorICAgICAgbmlsCisgICAgICAoIkJlZ2lubmluZyBvZiBGdW5jdGlvbiIgZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbikKKyAgICAgICgiRW5kIG9mIEZ1bmN0aW9uIiBlcmxhbmctZW5kLW9mLWZ1bmN0aW9uKQorICAgICAgKCJNYXJrIEZ1bmN0aW9uIiBlcmxhbmctbWFyay1mdW5jdGlvbikKKyAgICAgIG5pbAorICAgICAgKCJCZWdpbm5pbmcgb2YgQ2xhdXNlIiBlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKyAgICAgICgiRW5kIG9mIENsYXVzZSIgZXJsYW5nLWVuZC1vZi1jbGF1c2UpCisgICAgICAoIk1hcmsgQ2xhdXNlIiBlcmxhbmctbWFyay1jbGF1c2UpCisgICAgICBuaWwKKyAgICAgICgiTmV3IENsYXVzZSIgZXJsYW5nLWdlbmVyYXRlLW5ldy1jbGF1c2UpCisgICAgICAoIkNsb25lIEFyZ3VtZW50cyIgZXJsYW5nLWNsb25lLWFyZ3VtZW50cykpKQorICAgICgiU3ludGF4IEhpZ2hsaWdodGluZyIKKyAgICAgKCgiTGV2ZWwgMyIgZXJsYW5nLWZvbnQtbG9jay1sZXZlbC0zKQorICAgICAgKCJMZXZlbCAyIiBlcmxhbmctZm9udC1sb2NrLWxldmVsLTIpCisgICAgICAoIkxldmVsIDEiIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMSkKKyAgICAgICgiT2ZmIiBlcmxhbmctZm9udC1sb2NrLWxldmVsLTApKSkKKyAgICAoIlRBR1MiCisgICAgICgoIkZpbmQgVGFnIiBmaW5kLXRhZykKKyAgICAgICgiRmluZCBOZXh0IFRhZyIgZXJsYW5nLWZpbmQtbmV4dC10YWcpCisgICAgICA7KCJGaW5kIFJlZ2V4cCIgZmluZC10YWctcmVnZXhwKQorICAgICAgKCJDb21wbGV0ZSBXb3JkIiBlcmxhbmctY29tcGxldGUtdGFnKQorICAgICAgKCJUYWdzIEFwcm9wb3MiIHRhZ3MtYXByb3BvcykKKyAgICAgICgiU2VhcmNoIEZpbGVzIiB0YWdzLXNlYXJjaCkpKSkKKyAgIipEZXNjcmlwdGlvbiBvZiBtZW51IHVzZWQgaW4gRXJsYW5nIG1vZGUuCisKK1RoaXMgdmFyaWFibGUgbXVzdCBiZSBhIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUgZWl0aGVyIG5pbCByZXByZXNlbnRpbmcKK2EgaG9yaXNvbnRhbCBsaW5lIG9yIGEgbGlzdCB3aXRoIHR3byBvciB0aHJlZSBlbGVtZW50cy4gIFRoZSBmaXJzdCBpcwordGhlIG5hbWUgb2YgdGhlIG1lbnUgaXRlbSwgdGhlIHNlY29uZCBpcyB0aGUgZnVuY3Rpb24gdG8gY2FsbCwgb3IgYQorc3VibWVudSwgb24gdGhlIHNhbWUgc2FtZSBmb3JtIGFzIElURU1TLiAgVGhlIHRoaXJkIG9wdGlvbmFsIGFyZ3VtZW50CitpcyBhbiBleHByZXNzaW9uIHdoaWNoIGlzIGV2YWx1YXRlZCBldmVyeSB0aW1lIHRoZSBtZW51IGlzIGRpc3BsYXllZC4KK1Nob3VsZCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZSB0byBuaWwgdGhlIG1lbnUgaXRlbSBpcyBnaG9zdGVkLgorCitFeGFtcGxlOgorICAgICcoKFwiRnVuYzFcIiBmdW5jdGlvbi1vbmUpCisgICAgICAoXCJTdWJJdGVtXCIKKyAgICAgICAoKFwiWWVsbG93XCIgZnVuY3Rpb24teWVsbG93KQorICAgICAgICAoXCJCbHVlXCIgZnVuY3Rpb24tYmx1ZSkpKQorICAgICAgbmlsCisgICAgICAoXCJSZWdpb24gRnVudGlvblwiIHNwb29rLWZ1bmN0aW9uIG1pZG5pZ2h0LXZhcmlhYmxlKSkKKworQ2FsbCB0aGUgZnVuY3Rpb24gYGVybGFuZy1tZW51LWluaXQnIGFmdGVyIG1vZGlmeWluZyB0aGlzIHZhcmlhYmxlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtc2hlbGwtaXRlbXMKKyAgJyhuaWwKKyAgICAoIlNoZWxsIgorICAgICAoKCJTdGFydCBOZXcgU2hlbGwiIGVybGFuZy1zaGVsbCkKKyAgICAgICgiRGlzcGxheSBTaGVsbCIgICBlcmxhbmctc2hlbGwtZGlzcGxheSkpKSkKKyAgIipEZXNjcmlwdGlvbiBvZiB0aGUgU2hlbGwgbWVudSB1c2VkIGJ5IEVybGFuZyBtb2RlLgorCitQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBlcmxhbmctbWVudS1iYXNlLWl0ZW1zJy4iKQorCisoZGVmdmFyIGVybGFuZy1tZW51LWNvbXBpbGUtaXRlbXMKKyAgJygoIkNvbXBpbGUiCisgICAgICgoIkNvbXBpbGUgQnVmZmVyIiBlcmxhbmctY29tcGlsZSkKKyAgICAgICgiRGlzcGxheSBSZXN1bHQiIGVybGFuZy1jb21waWxlLWRpc3BsYXkpCisgICAgICAoIk5leHQgRXJyb3IiICAgICBlcmxhbmctbmV4dC1lcnJvcikpKSkKKyAgIipEZXNjcmlwdGlvbiBvZiB0aGUgQ29tcGlsZSBtZW51IHVzZWQgYnkgRXJsYW5nIG1vZGUuCisKK1BsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgYGVybGFuZy1tZW51LWJhc2UtaXRlbXMnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtdmVyc2lvbi1pdGVtcworICAnKG5pbAorICAgICgiVmVyc2lvbiIgZXJsYW5nLXZlcnNpb24pKQorICAiKkRlc2NyaXB0aW9uIG9mIHRoZSB2ZXJzaW9uIG1lbnUgdXNlZCBpbiBFcmxhbmcgbW9kZS4iKQorCisoZGVmdmFyIGVybGFuZy1tZW51LXBlcnNvbmFsLWl0ZW1zIG5pbAorICAiKkRlc2NyaXB0aW9uIG9mIHBlcnNvbmFsIG1lbnUgaXRlbXMgdXNlZCBpbiBFcmxhbmcgbW9kZS4KKworUGxlYXNlIHNlZSB0aGUgdmFyaWFibGUgYGVybGFuZy1tZW51LWJhc2UtaXRlbXMnIGZvciBhIGRlc2NyaXB0aW9uCitvZiB0aGUgZm9ybWF0LiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1lbnUtbWFuLWl0ZW1zIG5pbAorICAiVGhlIG1lbnUgY29udGFpbmluZyBtYW4gcGFnZXMuCisKK1RoZSBmb3JtYXQgb2YgdGhlIG1lbnUgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCBgZXJsYW5nLW1lbnUtYmFzZS1pdGVtcycuCitUaGlzIHZhcmlhYmxlIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIEVybGFuZyBtZW51cyBzdG9yZWQgaW4KK2BlcmxhbmctbWVudS1pdGVtcycuIikKKworKGRlZnZhciBlcmxhbmctbWVudS1za2VsLWl0ZW1zICcoKQorICAiRGVzY3JpcHRpb24gb2YgdGhlIG1lbnUgY29udGFpbmluZyB0aGUgc2tlbGV0b24gZW50cmllcy4KK1RoZSBtZW51IGlzIGluIHRoZSBmb3JtIGRlc2NyaWJlZCBieSB0aGUgdmFyaWFibGUgYGVybGFuZy1tZW51LWJhc2UtaXRlbXMnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1vZGUtaG9vayBuaWwKKyAgIipGdW5jdGlvbnMgdG8gcnVuIHdoZW4gRXJsYW5nIG1vZGUgaXMgYWN0aXZhdGVkLgorCitUaGlzIGhvb2sgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBFcmxhbmcgbW9kZS4gIEl0IGlzCitub3JtYWxseSB1c2VkIGJ5IHRoZSB1c2VyIHRvIHBlcnNvbmFsaXNlIHRoZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudC4KK1doZW4gdXNlZCBpbiBhIHNpdGUgaW5pdCBmaWxlLCBpdCBjb3VsZCBiZSB1c2VkIHRvIGN1c3RvbWlzZSBFcmxhbmcKK21vZGUgZm9yIGFsbCB1c2VycyBvbiB0aGUgc3lzdGVtLgorCitUaGUgZnVuY3Rpb25zIGFkZGVkIHRvIHRoaXMgaG9vayBpcyBydW5lZCBldmVyeSB0aW1lIEVybGFuZyBtb2RlIGlzCitzdGFydGVkLiAgU2VlIGFsc28gYGVybGFuZy1sb2FkLWhvb2snLCBhIGhvb2sgd2hpY2ggaXMgcnVuZWQgb25jZSwKK3doZW4gRXJsYW5nIG1vZGUgaXMgbG9hZGVkIGludG8gRW1hY3MsIGFuZCBgZXJsYW5nLXNoZWxsLW1vZGUtaG9vaycKK3doaWNoIGlzIHJ1biBldmVyeSB0aW1lIGEgbmV3IGluZmVyaW9yIEVybGFuZyBzaGVsbCBpcyBzdGFydGVkLgorCitUbyB1c2UgYSBob29rLCBjcmVhdGUgYW4gRW1hY3MgbGlzcCBmdW5jdGlvbiB0byBwZXJmb3JtIHlvdXIgYWN0aW9ucworYW5kIGFkZCB0aGUgZnVuY3Rpb24gdG8gdGhlIGhvb2sgYnkgY2FsbGluZyBgYWRkLWhvb2snLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgYmluZHMgdGhlIGtleSBzZXF1ZW5jZSBDLWMgQy1jIHRvIHRoZSBjb21tYW5kCitgZXJsYW5nLWNvbXBpbGUnIChub3JtYWxseSBib3VuZCB0byBDLWMgQy1rKS4gIFRoZSBleGFtcGxlIGFsc28KK2FjdGl2YXRlcyBGb250IExvY2sgbW9kZSB0byBmb250aWZ5IHRoZSBidWZmZXIgYW5kIGFkZHMgYSBtZW51Citjb250YWluaW5nIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBidWZmZXIuCisKK1RvIHVzZSB0aGUgZXhhbXBsZSwgY29weSB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgYH4vLmVtYWNzJyBmaWxlOgorCisgICAgKGFkZC1ob29rICdlcmxhbmctbW9kZS1ob29rICdteS1lcmxhbmctbW9kZS1ob29rKQorCisgICAgKGRlZnVuIG15LWVybGFuZy1tb2RlLWhvb2sgKCkKKyAgICAgIChsb2NhbC1zZXQta2V5IFwiXFxDLWNcXEMtY1wiICdlcmxhbmctY29tcGlsZSkKKyAgICAgIChpZiB3aW5kb3ctc3lzdGVtCisgICAgICAgICAgKHByb2duCisgICAgICAgICAgICAoc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpCisgICAgICAgICAgICAoZm9udC1sb2NrLW1vZGUgMSkpKQorICAgICAgKGlmIChhbmQgd2luZG93LXN5c3RlbSAoZmJvdW5kcCAnaW1lbnUtYWRkLXRvLW1lbnViYXIpKQorICAgICAgICAgIChpbWVudS1hZGQtdG8tbWVudWJhciBcIkltZW51XCIpKSkiKQorCisoZGVmdmFyIGVybGFuZy1sb2FkLWhvb2sgbmlsCisgICIqRnVuY3Rpb25zIHRvIHJ1biB3aGVuIEVybGFuZyBtb2RlIGlzIGxvYWRlZC4KKworVGhpcyBob29rIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgRXJsYW5nIG1vZGUuICBJdCBpcworbm9ybWFsbHkgdXNlZCBieSB0aGUgdXNlciB0byBwZXJzb25hbGlzZSB0aGUgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQuCitXaGVuIHVzZWQgaW4gYSBzaXRlIGluaXQgZmlsZSwgaXQgY291bGQgYmUgdXNlZCB0byBjdXN0b21pemUgRXJsYW5nCittb2RlIGZvciBhbGwgdXNlcnMgb24gdGhlIHN5c3RlbS4KKworVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGhvb2sgYW5kIGBlcmxhbmctbW9kZS1ob29rJyBhbmQKK2Blcmxhbmctc2hlbGwtbW9kZS1ob29rJyBpcyB0aGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBob29rCitpcyBvbmx5IGNhbGxlZCBvbmNlLCB3aGVuIHRoZSBFcmxhbmcgbW9kZSBpcyBsb2FkZWQgaW50byBFbWFjcwordGhlIGZpcnN0IHRpbWUuCisKK05hdHVyYWwgYWN0aW9ucyBmb3IgdGhlIGZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIGhvb2sgYXJlIGFjdGlvbnMgd2hpY2gKK29ubHkgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbmNlLCBhbmQgYWN0aW9ucyB3aGljaCBzaG91bGQgYmUgcGVyZm9ybWVkCitiZWZvcmUgc3RhcnRpbmcgRXJsYW5nIG1vZGUuICBGb3IgZXhhbXBsZSwgYSBudW1iZXIgb2YgdmFyaWFibGVzIGFyZQordXNlZCBieSBFcmxhbmcgbW9kZSBiZWZvcmUgYGVybGFuZy1tb2RlLWhvb2snIGlzIHJ1bmVkLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2V0cyB0aGUgdmFyaWFibGUgYGVybGFuZy1yb290LWRpcicgc28gdGhhdCB0aGUKK21hbnVhbCBwYWdlcyBjYW4gYmUgcmV0cmlldmVkIChub3RlIHRoYXQgeW91IG11c3Qgc2V0IHRoZSB2YWx1ZSBvZgorYGVybGFuZy1yb290LWRpcicgdG8gbWF0Y2ggdGhlIGxvYXRpb24gb2YgRXJsYW5nIG9uIHlvdXIgc3lzdGVtKToKKworICAgIChhZGQtaG9vayAnZXJsYW5nLWxvYWQtaG9vayAnbXktZXJsYW5nLWxvYWQtaG9vaykKKworICAgIChkZWZ1biBteS1lcmxhbmctbG9hZC1ob29rICgpCisgICAgICAgKHNldHEgZXJsYW5nLXJvb3QtZGlyIFwiL3Vzci9sb2NhbC9lcmxhbmdcIikpIikKKworKGRlZnZhciBlcmxhbmctbmV3LWZpbGUtaG9vayBuaWwKKyAgIkZ1bmN0aW9ucyB0byBydW4gd2hlbiBhIG5ldyBFcmxhbmcgc291cmNlIGZpbGUgaXMgYmVpbmcgZWRpdGVkLgorCitBIHVzZWZ1bCBmdW5jdGlvbiBpcyBgdGVtcG8tdGVtcGxhdGUtZXJsYW5nLW5vcm1hbC1oZWFkZXInLgorXChUaGlzIGZ1bmN0aW9uIG9ubHkgZXhpc3RzIHdoZW4gdGhlIGB0ZW1wbycgcGFja2FncyBpcyBhdmFpbGFibGUuKSIpCisKKyhkZWZ2YXIgZXJsYW5nLWNoZWNrLW1vZHVsZS1uYW1lICdhc2sKKyAgIipOb24tbmlsIG1lYW5zIGNoZWNrIHRoYXQgbW9kdWxlIG5hbWUgYW5kIGZpbGUgbmFtZSBhZ3JlZXMgd2hlbiBzYXZpbmcuCisKK0lmIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHRoZSBhdG9tIGBhc2snLCB0aGUgdXNlciBpcworcHJvbXB0ZWQuICBJZiB0aGUgdmFsdWUgaXMgdCB0aGUgc291cmNlIGlzIHNpbGVudGx5IGNoYW5nZWQuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMKKyAgJyhlcmxhbmctZWxlY3RyaWMtY29tbWEKKyAgICBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uCisgICAgZXJsYW5nLWVsZWN0cmljLWd0KQorICAiKkxpc3Qgb2YgYWN0aXZhdGVkIGVsZWN0cmljIGNvbW1hbmRzLgorCitUaGUgbGlzdCBzaG91bGQgY29udGFpbiB0aGUgZWxlY3RyaWMgY29tbWFuZHMgd2hpY2ggc2hvdWxkIGJlIGFjdGl2ZS4KK0N1cnJlbnRseSwgdGhlIGF2YWlsYWJsZSBlbGVjdHJpYyBjb21tYW5kcyBhcmU6CisgICAgZXJsYW5nLWVsZWN0cmljLWNvbW1hCisgICAgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbgorICAgIGVybGFuZy1lbGVjdHJpYy1ndAorICAgIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lCisKK1Nob3VsZCB0aGUgdmFyaWFibGUgYmUgYm91bmQgdG8gdCwgYWxsIGVsZWN0cmljIGNvbW1hbmRzCithcmUgYWN0aXZhdGVkLgorCitUbyBkZWFjdGl2YXRlIGFsbCBlbGVjdHJpYyBjb21tYW5kcywgc2V0IHRoaXMgdmFyaWFibGUgdG8gbmlsLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCB0CisgICIqU2V0IHRvIG5vbi1uaWwgdG8gaW5oaWJpdCBuZXdsaW5lIGFmdGVyIGVsZWN0cmljIGNvbW1hbmQuCisKK1RoaXMgaXMgdXNlZnVsIHNpbmNlIGEgbG90IG9mIHBlb3BsZSBwcmVzcyByZXR1cm4gYWZ0ZXIgZXhlY3V0aW5nIGFuCitlbGVjdHJpYyBjb21tYW5kLgorCitJbiBvcmRlciB0byB3b3JrLCB0aGUgY29tbWFuZCBtdXN0IGFsc28gYmUgaW4gdGhlCitsaXN0IGBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0LWxpc3QnLgorCitOb3RlIHRoYXQgY29tbWFuZHMgaW4gdGhpcyBsaXN0IGFyZSByZXF1aXJlZCB0byBzZXQgdGhlIHZhcmlhYmxlCitgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCcgdG8gbmlsIHdoZW4gdGhlIG5ld2xpbmUgc2hvdWxkbid0IGJlCitpbmhpYml0ZWQuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0LWxpc3QKKyAgJyhlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uCisgICAgZXJsYW5nLWVsZWN0cmljLWNvbW1hCisgICAgZXJsYW5nLWVsZWN0cmljLWd0KQorICAiKkNvbW1hbmQgd2hpY2ggY2FuIGluaGliaXQgdGhlIG5leHQgbmV3bGluZS4iKQorCisoZGVmdmFyIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24taW5zZXJ0LWJsYW5rLWxpbmVzIG5pbAorICAiKk51bWJlciBvZiBibGFuayBsaW5lcyBpbnNlcnRlZCBiZWZvcmUgaGVhZGVyLCBvciBuaWwuCisKK1RoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIGJlaGF2aW91ciBvZiBgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbicKK3doZW4gYSBuZXcgZnVuY3Rpb24gaGVhZGVyIGlzIGdlbmVyYXRlZC4gIFdoZW4gbmlsLCBubyBibGFuayBsaW5lIGlzCitpbnNlcnRlZCBiZXR3ZWVuIHRoZSBjdXJyZW50IGxpbmUgYW5kIHRoZSBuZXcgaGVhZGVyLiAgV2hlbiBib3VuZCB0byBhCitudW1iZXIgaXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGJsYW5rIGxpbmVzIHdoaWNoIHNob3VsZCBiZQoraW5zZXJ0ZWQuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uLWNyaXRlcmlhCisgICcoZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcAorICAgIGVybGFuZy1hdC1rZXl3b3JkLWVuZC1wCisgICAgZXJsYW5nLWF0LWVuZC1vZi1mdW5jdGlvbi1wKQorICAiKkxpc3Qgb2YgZnVuY3Rpb25zIGNvbnRyb2xsaW5nIGBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uJy4KK1RoZSBmdW5jdGlvbnMgaW4gdGhpcyBsaXN0IGFyZSBjYWxsZWQsIGluIG9yZGVyLCB3aGVuZXZlciBhIHNlbWljb2xvbgoraXMgdHlwZWQuICBFYWNoIGZ1bmN0aW9uIGluIHRoZSBsaXN0IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywKK2FuZCBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICBuaWwgICAgICAgICAgICAgLS0gbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLCBjb250aW51ZSBjaGVja2luZworICAnc3RvcCAgICAgICAgICAgLS0gZG8gbm90IGNyZWF0ZSBwcm90b3R5cGUgZm9yIG5leHQgbGluZQorICAoYW55dGhpbmcgZWxzZSkgLS0gaW5zZXJ0IHByb3RvdHlwZSwgYW5kIHN0b3AgY2hlY2tpbmcKKworSWYgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLAordGhlbiBubyBwcm90b3R5cGUgaXMgaW5zZXJ0ZWQuCisKK1RoZSB0ZXN0IGlzIHBlcmZvcm1lZCBieSB0aGUgZnVuY3Rpb24gYGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWVsZWN0cmljLWNvbW1hLWNyaXRlcmlhCisgICcoZXJsYW5nLXN0b3Atd2hlbi1pbnNpZGUtYXJndW1lbnQtbGlzdAorICAgIGVybGFuZy1zdG9wLXdoZW4tYXQtZ3VhcmQKKyAgICBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS1wCisgICAgZXJsYW5nLWF0LWtleXdvcmQtZW5kLXAKKyAgICBlcmxhbmctYXQtZW5kLW9mLWZ1bmN0aW9uLXApCisgICIqTGlzdCBvZiBmdW5jdGlvbnMgY29udHJvbGxpbmcgYGVybGFuZy1lbGVjdHJpYy1jb21tYScuCitUaGUgZnVuY3Rpb25zIGluIHRoaXMgbGlzdCBhcmUgY2FsbGVkLCBpbiBvcmRlciwgd2hlbmV2ZXIgYSBjb21tYQoraXMgdHlwZWQuICBFYWNoIGZ1bmN0aW9uIGluIHRoZSBsaXN0IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywKK2FuZCBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICBuaWwgICAgICAgICAgICAgLS0gbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLCBjb250aW51ZSBjaGVja2luZworICAnc3RvcCAgICAgICAgICAgLS0gZG8gbm90IGNyZWF0ZSBwcm90b3R5cGUgZm9yIG5leHQgbGluZQorICAoYW55dGhpbmcgZWxzZSkgLS0gaW5zZXJ0IHByb3RvdHlwZSwgYW5kIHN0b3AgY2hlY2tpbmcKKworSWYgZXZlcnkgZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gZGV0ZXJtaW5hdGlvbiBtYWRlLAordGhlbiBubyBwcm90b3R5cGUgaXMgaW5zZXJ0ZWQuCisKK1RoZSB0ZXN0IGlzIHBlcmZvcm1lZCBieSB0aGUgZnVuY3Rpb24gYGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWVsZWN0cmljLWFycm93LWNyaXRlcmlhCisgICcoZXJsYW5nLW5leHQtbGluZXMtZW1wdHktcAorICAgIGVybGFuZy1hdC1lbmQtb2YtZnVuY3Rpb24tcCkKKyAgIipMaXN0IG9mIGZ1bmN0aW9ucyBjb250cm9sbGluZyB0aGUgYXJyb3cgYXNwZWN0IG9mIGBlcmxhbmctZWxlY3RyaWMtZ3QnLgorVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGxpc3QgYXJlIGNhbGxlZCwgaW4gb3JkZXIsIHdoZW5ldmVyIGEgYD4nCitpcyB0eXBlZC4gIEVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpc3QgaXMgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLAorYW5kIHNob3VsZCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgIG5pbCAgICAgICAgICAgICAtLSBubyBkZXRlcm1pbmF0aW9uIG1hZGUsIGNvbnRpbnVlIGNoZWNraW5nCisgICdzdG9wICAgICAgICAgICAtLSBkbyBub3QgY3JlYXRlIHByb3RvdHlwZSBmb3IgbmV4dCBsaW5lCisgIChhbnl0aGluZyBlbHNlKSAtLSBpbnNlcnQgcHJvdG90eXBlLCBhbmQgc3RvcCBjaGVja2luZworCitJZiBldmVyeSBmdW5jdGlvbiBpbiB0aGUgbGlzdCBpcyBjYWxsZWQgd2l0aCBubyBkZXRlcm1pbmF0aW9uIG1hZGUsCit0aGVuIG5vIHByb3RvdHlwZSBpcyBpbnNlcnRlZC4KKworVGhlIHRlc3QgaXMgcGVyZm9ybWVkIGJ5IHRoZSBmdW5jdGlvbiBgZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdCcuIikKKworKGRlZnZhciBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1jcml0ZXJpYQorICAnKHQpCisgICIqTGlzdCBvZiBmdW5jdGlvbnMgY29udHJvbGxpbmcgYGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lJy4KKworVGhlIGVsZWN0cmljIG5ld2xpbmUgY29tbWFuZHMgaW5kZW50cyB0aGUgbmV4dCBsaW5lLiAgU2hvdWxkIHRoZQorY3VycmVudCBsaW5lIGJlZ2luIHdpdGggYSBjb21tZW50IHRoZSBjb21tZW50IHN0YXJ0IGlzIGNvcGllZCB0bwordGhlIG5ld2x5IGNyZWF0ZWQgbGluZS4KKworVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGxpc3QgYXJlIGNhbGxlZCwgaW4gb3JkZXIsIHdoZW5ldmVyIGEgY29tbWEKK2lzIHR5cGVkLiAgRWFjaCBmdW5jdGlvbiBpbiB0aGUgbGlzdCBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsCithbmQgc2hvdWxkIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgbmlsICAgICAgICAgICAgIC0tIG5vIGRldGVybWluYXRpb24gbWFkZSwgY29udGludWUgY2hlY2tpbmcKKyAgJ3N0b3AgICAgICAgICAgIC0tIGRvIG5vdCBjcmVhdGUgcHJvdG90eXBlIGZvciBuZXh0IGxpbmUKKyAgKGFueXRoaW5nIGVsc2UpIC0tIHRyaWdnZXIgdGhlIGVsZWN0cmljIGNvbW1hbmQuCisKK0lmIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBsaXN0IGlzIGNhbGxlZCB3aXRoIG5vIGRldGVybWluYXRpb24gbWFkZSwKK3RoZW4gbm8gcHJvdG90eXBlIGlzIGluc2VydGVkLiAgU2hvdWxkIHRoZSBhdG9tIHQgYmUgYSBtZW1iZXIgb2YgdGhlCitsaXN0LCBpdCBpcyB0cmVhdGVkIGFzIGEgZnVuY3Rpb24gdHJpZ2dlcmluZyB0aGUgZWxlY3RyaWMgY29tbWFuZC4KKworVGhlIHRlc3QgaXMgcGVyZm9ybWVkIGJ5IHRoZSBmdW5jdGlvbiBgZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdCcuIikKKworKGRlZnZhciBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS10aHJlc2hvbGQgMgorICAiKk51bWJlciBvZiBibGFuayBsaW5lcyByZXF1aXJlZCB0byBhY3RpdmF0ZSBhbiBlbGVjdHJpYyBjb21tYW5kLgorCitBY3R1YWxseSwgdGhpcyB2YWx1ZSBjb250cm9scyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBmdW5jdGlvbgorYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAnIHdoaWNoIG5vcm1hbGx5IGlzIGEgbWVtYmVyIG9mIHRoZQorY3JpdGVyaWEgbGlzdHMgY29udHJvbGxpbmcgdGhlIGVsZWN0cmljIGNvbW1hbmRzLiAgKFBsZWFzZSBzZWUKK3RoZSB2YXJpYWJsZXMgYGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24tY3JpdGVyaWEnIGFuZAorYGVybGFuZy1lbGVjdHJpYy1jb21tYS1jcml0ZXJpYScuKQorCitUaGUgdmFyaWFibGUgaXMgYm91bmQgdG8gYSB0aHJlc2hvbGQgdmFsdWUsIGEgbnVtYmVyLCByZXByZXNlbnRpbmcgdGhlCitudW1iZXIgb2YgbGluZXMgd2hpY2ggbXVzdCBiZSBlbXB0eS4KKworU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIHplcm8sIGVsZWN0cmljIGNvbW1hbmRzIHdpbGwgYWx3YXlzIGJlCit0cmlnZ2VyZWQgYnkgYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAnLCB1bmxlc3MgaW5oaWJpdGVkIGJ5IG90aGVyCitydWxlcy4KKworU2hvdWxkIHRoaXMgdmFyaWFibGUgYmUgYG5pbCcsIGBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS1wJyB3aWxsIG5ldmVyCit0cmlnZ2VyIGFuIGVsZWN0cmljIGNvbW1hbmQuICBUaGUgc2FtZSBlZmZlY3Qgd291bGQgYmUgcmVhY2hlZCBpZiB0aGUKK2Z1bmN0aW9uIGBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS1wJyB3b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGNyaXRlcmlhCitsaXN0cy4KKworTm90ZSB0aGF0IGV2ZW4gaWYgYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAnIHNob3VsZCBub3QgdHJpZ2dlciBhbgorZWxlY3RyaWMgY29tbWFuZCwgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBjcml0ZXJpYSBsaXN0IGNvdWxkLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW5ldy1jbGF1c2Utd2l0aC1hcmd1bWVudHMgbmlsCisgICIqTm9uLW5pbCBtZWFucyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIGNsb25lZCB3aGVuIGEgY2xhdXNlIGlzIGdlbmVyYXRlZC4KKworQSBuZXcgZnVuY3Rpb24gaGVhZGVyIGNhbiBiZSBnZW5lcmF0ZWQgYnkgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uCitgZXJsYW5nLWdlbmVyYXRlLW5ldy1jbGF1c2UnIGFuZCBieSB1c2Ugb2YgdGhlIGVsZWN0cmljIHNlbWljb2xvbi4iKQorCisoZGVmdmFyIGVybGFuZy1jb21waWxlLXVzZS1vdXRkaXIgdAorICAiKldoZW4gbmlsLCBnbyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc291cmNlIGZpbGUgd2hlbiBjb21waWxpbmcuCisKK1RoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiB0aGUgYG91dGRpcicgb3B0aW9uIG9mIGNvbXBpbGUuICBJZiB0aGUKK291dGRpciBpcyBub3QgaW4gdGhlIGN1cnJlbnQgbG9hZCBwYXRoLCBFcmxhbmcgZG9lc24ndCBsb2FkIHRoZSBvYmplY3QKK21vZHVsZSBhZnRlciBpdCBoYXMgYmVlbiBjb21waWxlZC4KKworVG8gYWN0aXZhdGUgdGhlIHdvcmthcm91bmQsIHBsYWNlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBgfi8uZW1hY3MnIGZpbGU6CisgICAgKHNldHEgZXJsYW5nLWNvbXBpbGUtdXNlLW91dGRpciBuaWwpIikKKworKGRlZnZhciBlcmxhbmctaW5kZW50LWxldmVsIDQKKyAgIipJbmRlbnRhdGlvbiBvZiBFcmxhbmcgY2FsbHMvY2xhdXNlcyB3aXRoaW4gYmxvY2tzLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWluZGVudC1ndWFyZCAyCisgICIqSW5kZW50YXRpb24gb2YgRXJsYW5nIGd1YXJkcy4iKQorCisoZGVmdmFyIGVybGFuZy1hcmd1bWVudC1pbmRlbnQgMgorICAiKkluZGVudGF0aW9uIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBpbiBhIGZ1bmN0aW9uIGNhbGwuCitXaGVuIG5pbCwgaW5kZW50IHRvIHRoZSBjb2x1bW4gYWZ0ZXIgdGhlIGAoJyBvZiB0aGUKK2Z1bmN0aW9uLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXRhYi1hbHdheXMtaW5kZW50IHQKKyAgIipOb24tbmlsIG1lYW5zIFRBQiBpbiBFcmxhbmcgbW9kZSBzaG91bGQgYWx3YXlzIHJlaW5kZW50IHRoZSBjdXJyZW50IGxpbmUsCityZWdhcmRsZXNzIG9mIHdoZXJlIGluIHRoZSBsaW5lIHBvaW50IGlzIHdoZW4gdGhlIFRBQiBjb21tYW5kIGlzIHVzZWQuIikKKworKGRlZnZhciBlcmxhbmctZXJyb3ItcmVnZXhwLWFsaXN0CisgICcoKCJeXFwoW146KCBcdFxuXStcXClbOihdWyBcdF0qXFwoWzAtOV0rXFwpWzopIFx0XSIgLiAoMSAyKSkpCisgICIqUGF0dGVybnMgZm9yIG1hdGNoaW5nIEVybGFuZyBlcnJvcnMuIikKKworKGRlZnZhciBlcmxhbmctbWFuLWluaGliaXQgKGVxIHN5c3RlbS10eXBlICd3aW5kb3dzLW50KQorICAiSW5oaWJpdCB0aGUgY3JlYXRpb24gb2YgdGhlIEVybGFuZyBNYW51YWwgUGFnZXMgbWVudS4KKworVGhlIFdpbmRvd3MgZGlzdHJpYnV0aW9uIG9mIEVybGFuZyBkb2VzIG5vdCBpbmNsdWRlIG1hbiBwYWdlcywgaGVuY2UKK3RoZXJlIGlzIG5vIGlkZWEgdG8gY3JlYXRlIHRoZSBtZW51LiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1hbi1kaXJzCisgICcoKCJNYW4gLSBDb21tYW5kcyIgIi9tYW4vbWFuMSIgdCkKKyAgICAoIk1hbiAtIE1vZHVsZXMiICIvbWFuL21hbjMiIHQpCisgICAgKCJNYW4gLSBVbnN1cHBvcnRlZCIgIi91Yy9tYW4vbWFuMyIgdCkpCisgICIqVGhlIG1hbiBkaXJlY3RvcmllcyBkaXNwbGF5ZWQgaW4gdGhlIEVybGFuZyBtZW51LgorCitFYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIGEgbGlzdCB3aXRoIHRocmVlIGVsZW1lbnRzLCB0aGUgZmlyc3QKK3RoZSBuYW1lIG9mIHRoZSBtZW51LCB0aGUgc2Vjb25kIHRoZSBkaXJlY3RvcnksIGFuZCB0aGUgbGFzdCBhIGZsYWcuCitTaG91bGQgdGhlIGZsYWcgdGhlIG5pbCwgdGhlIGRpcmVjdG9yeSBpcyBhYnNvbHV0ZSwgc2hvdWxkIGl0IGJlIG5vbi1uaWwKK3RoZSBkaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIHZhcmlhYmxlIGBlcmxhbmctcm9vdC1kaXInLiIpCisKKyhkZWZ2YXIgZXJsYW5nLW1hbi1tYXgtbWVudS1zaXplIDIwCisgICIqVGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbnUgaXRlbXMgaW4gb25lIG1lbnUgYWxsb3dlZC4iKQorCisoZGVmdmFyIGVybGFuZy1tYW4tZGlzcGxheS1mdW5jdGlvbiAnZXJsYW5nLW1hbi1kaXNwbGF5CisgICIqRnVuY3Rpb24gdXNlZCB0byBkaXNwbGF5IG1hbiBwYWdlLgorCitUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZmlsZQorY29udGFpbmluZyB0aGUgbWFuIHBhZ2UuICBVc2UgdGhpcyB2YXJpYWJsZSB3aGVuIHRoZSBkZWZhdWx0CitmdW5jdGlvbiwgZXJsYW5nLW1hbi1kaXNwbGF5LCBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtLiIpCisKKyhkZWZjb25zdCBlcmxhbmctYXRvbS1yZWdleHAgIlxcKFthLXpdW2EtekEtWjAtOV9dKlxcfCdbXlxuJ10qW15cXF0nXFwpIgorICAiUmVnZXhwIHdoaWNoIHNob3VsZCBtYXRjaCBhbiBFcmxhbmcgYXRvbS4KKworVGhlIHJlZ2V4cCBtdXN0IGJlIHN1cnJvdW5kZWQgd2l0aCBhIHBhaXIgb2YgcmVnZXhwIHBhcmVudGhlc2VzLiIpCisoZGVmY29uc3QgZXJsYW5nLWF0b20tcmVnZXhwLW1hdGNoZXMgMQorICAiTnVtYmVyIG9mIHJlZ2V4cCBwYXJlbnRoZXNpcyBwYWlycyBpbiBgZXJsYW5nLWF0b20tcmVnZXhwJy4KKworVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBwYXJlbnRoZXNpcyBtYXRjaGVzIGluIGNvbXBsZXggcmVnZXhwcyB3aGljaAorY29udGFpbnMgYGVybGFuZy1hdG9tLXJlZ2V4cCcuIikKKworKGRlZmNvbnN0IGVybGFuZy12YXJpYWJsZS1yZWdleHAgIlxcKFtBLVpfXVthLXpBLVowLTlfXSpcXCkiCisgICJSZWdleHAgd2hpY2ggc2hvdWxkIG1hdGNoIGFuIEVybGFuZyB2YXJpYWJsZS4KKworVGhlIHJlZ2V4cCBtdXN0IGJlIHN1cnJvdW5kZWQgd2l0aCBhIHBhaXIgb2YgcmVnZXhwIHBhcmVudGhlc2lzLiIpCisoZGVmY29uc3QgZXJsYW5nLXZhcmlhYmxlLXJlZ2V4cC1tYXRjaGVzIDEKKyAgIk51bWJlciBvZiByZWdleHAgcGFyZW50aGVzaXMgcGFpcnMgaW4gYGVybGFuZy12YXJpYWJsZS1yZWdleHAnLgorCitUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIG1hdGNoZXMgaW4gY29tcGxleCByZXhlcHMgd2hpY2ggY29udGFpbnMKK2BlcmxhbmctdmFyaWFibGUtcmVnZXhwJy4iKQorCisoZGVmdmFyIGVybGFuZy1kZWZ1bi1wcm9tcHQtcmVnZXhwIChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFxzICooIikKKyAgIipSZWdleHAgd2hpY2ggc2hvdWxkIG1hdGNoIGJlZ2lubmluZyBvZiBhIGNsYXVzZS4iKQorCisoZGVmdmFyIGVybGFuZy1maWxlLW5hbWUtZXh0ZW5zaW9uLXJlZ2V4cCAiXFwuW2VoXXJsJCIKKyAgIipSZWdleHAgd2hpY2ggc2hvdWxkIG1hdGNoIGFuIGVybGFuZyBmaWxlIG5hbWUuCisKK1RoaXMgcmVnZXhwIGlzIHVzZWQgd2hlbiBhbiBFcmxhbmcgbW9kdWxlIG5hbWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlCituYW1lIG9mIGFuIEVybGFuZyBzb3VyY2UgZmlsZS4KKworVGhlIHJlZ2V4cCBzaG91bGQgb25seSBtYXRjaCB0aGUgc2VjdGlvbiBvZiB0aGUgZmlsZSBuYW1lIHdoaWNoIHNob3VsZAorYmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9kdWxlIG5hbWUuCisKK1RvIG1hdGNoIGFsbCBmaWxlcyBzZXQgdGhpcyB2YXJpYWJsZSB0byBcIlxcXFwoXFxcXC4uKlxcXFx8XFxcXCkkXCIuCitUaGUgbWF0Y2hlcyBhbGwgZXhjZXB0IHRoZSBleHRlbnNpb24uICBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgRXJsYW5nCit0YWdzIHN5c3RlbSBzaG91bGQgaW50ZXJwcmV0YXRlIHRhZ3Mgb24gdGhlIGZvcm0gYG1vZHVsZTp0YWcnIGZvcgorZmlsZXMgd3JpdHRlbiBpbiBvdGhlciBsYW5ndWFnZXMgdGhhbiBFcmxhbmcuIikKKworKGRlZnZhciBlcmxhbmctbW9kZS1tYXAgbmlsCisgICIqS2V5bWFwIHVzZWQgaW4gRXJsYW5nIG1vZGUuIikKKyhkZWZ2YXIgZXJsYW5nLW1vZGUtYWJicmV2LXRhYmxlIG5pbAorICAiQWJicmV2IHRhYmxlIGluIHVzZSBpbiBFcmxhbmctbW9kZSBidWZmZXJzLiIpCisoZGVmdmFyIGVybGFuZy1tb2RlLXN5bnRheC10YWJsZSBuaWwKKyAgIlN5bnRheCB0YWJsZSBpbiB1c2UgaW4gRXJsYW5nLW1vZGUgYnVmZmVycy4iKQorCisoZGVmY29uc3QgZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24KKyAgKGlmIChib3VuZHAgJ2VtYWNzLW1ham9yLXZlcnNpb24pCisgICAgICBlbWFjcy1tYWpvci12ZXJzaW9uCisgICAgKHN0cmluZy1tYXRjaCAiXFwoWzAtOV0rXFwpXFwuXFwoWzAtOV0rXFwpIiBlbWFjcy12ZXJzaW9uKQorICAgIChzdHJpbmctdG8taW50IChzdWJzdHJpbmcgZW1hY3MtdmVyc2lvbgorCQkJICAgICAgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkpCisgICJNYWpvciB2ZXJzaW9uIG51bWJlciBvZiBFbWFjcy4iKQorCisoZGVmY29uc3QgZXJsYW5nLWVtYWNzLW1pbm9yLXZlcnNpb24KKyAgKGlmIChib3VuZHAgJ2VtYWNzLW1pbm9yLXZlcnNpb24pCisgICAgICBlbWFjcy1taW5vci12ZXJzaW9uCisgICAgKHN0cmluZy1tYXRjaCAiXFwoWzAtOV0rXFwpXFwuXFwoWzAtOV0rXFwpIiBlbWFjcy12ZXJzaW9uKQorICAgIChzdHJpbmctdG8taW50IChzdWJzdHJpbmcgZW1hY3MtdmVyc2lvbgorCQkJICAgICAgKG1hdGNoLWJlZ2lubmluZyAyKSAobWF0Y2gtZW5kIDIpKSkpCisgICJNaW5vciB2ZXJzaW9uIG51bWJlciBvZiBFbWFjcy4iKQorCisoZGVmY29uc3QgZXJsYW5nLXhlbWFjcy1wIChzdHJpbmctbWF0Y2ggIkx1Y2lkXFx8WEVtYWNzIiBlbWFjcy12ZXJzaW9uKQorICAiTm9uLW5pbCB3aGVuIHJ1bm5pbmcgdW5kZXIgWEVtYWNzIG9yIEx1Y2lkIEVtYWNzLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXhlbWFjcy1wb3B1cC1tZW51ICcoIkVybGFuZyBNb2RlIENvbW1hbmRzIiAuIG5pbCkKKyAgIkNvbW1vbiBwb3B1cCBtZW51IGZvciBhbGwgYnVmZmVycyBpbiBFcmxhbmcgbW9kZS4KKworVGhpcyB2YXJpYWJsZSBpcyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkIGV2ZXJ5IHRpbWUgdGhlIEVybGFuZyBtZW51CitpcyBtb2RpZmllZC4gIFRoZSBlZmZlY3QgaXMgdGhhdCBhbGwgY2hhbmdlcyB0YWtlIGVmZmVrdCBpbiBhbGwKK2J1ZmZlcnMgaW4gRXJsYW5nIG1vZGUsIGp1c3QgbGlrZSB1bmRlciBHTlUgRW1hY3MuCisKK05ldmVyIEVWRVIgc2V0IHRoaXMgdmFyaWFibGUhIikKKworDAorOzsgVGVtcG8gc2tlbGV0b24gdGVtcGxhdGVzOgorCisoZGVmdmFyIGVybGFuZy1za2VsCisgICcoKCJJZiIgICAgICAgICAgICAiaWYiICAgICAgICAgICAgZXJsYW5nLXNrZWwtaWYpCisgICAgKCJDYXNlIiAgICAgICAgICAiY2FzZSIgICAgICAgICAgZXJsYW5nLXNrZWwtY2FzZSkKKyAgICAoIlJlY2VpdmUiICAgICAgICJyZWNlaXZlIiAgICAgICBlcmxhbmctc2tlbC1yZWNlaXZlKQorICAgICgiUmVjZWl2ZSBBZnRlciIgImFmdGVyIiAgICAgICAgIGVybGFuZy1za2VsLXJlY2VpdmUtYWZ0ZXIpCisgICAgKCJSZWNlaXZlIExvb3AiICAibG9vcCIgICAgICAgICAgZXJsYW5nLXNrZWwtcmVjZWl2ZS1sb29wKQorICAgICgiTW9kdWxlIiAgICAgICAgIm1vZHVsZSIgICAgICAgIGVybGFuZy1za2VsLW1vZHVsZSkKKyAgICAoIkF1dGhvciIgICAgICAgICJhdXRob3IiICAgICAgICBlcmxhbmctc2tlbC1hdXRob3IpCisgICAgKCkKKyAgICAoIlNtYWxsIEhlYWRlciIgICJzbWFsbC1oZWFkZXIiCisgICAgIGVybGFuZy1za2VsLXNtYWxsLWhlYWRlciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJOb3JtYWwgSGVhZGVyIiAibm9ybWFsLWhlYWRlciIKKyAgICAgZXJsYW5nLXNrZWwtbm9ybWFsLWhlYWRlciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJMYXJnZSBIZWFkZXIiICAibGFyZ2UtaGVhZGVyIgorICAgICBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgpCisgICAgKCJTbWFsbCBTZXJ2ZXIiICAgInNtYWxsLXNlcnZlciIKKyAgICAgZXJsYW5nLXNrZWwtc21hbGwtc2VydmVyIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoKQorICAgICgiQXBwbGljYXRpb24iICJhcHBsaWNhdGlvbiIKKyAgICAgZXJsYW5nLXNrZWwtYXBwbGljYXRpb24gZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiR2VuZXJhbCBUY3AgUmVjZWl2ZSIgImZzX2dlbl90Y3BfcmVjdiIKKyAgICAgZXJsYW5nLXNrZWwtZnMtZ2VuLXRjcC1yZWN2IGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIlRlc3QgU3VpdGUiICJ0ZXN0LXN1aXRlIgorICAgICBlcmxhbmctc2tlbC10ZXN0LXN1aXRlIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIlRjcCBHYXRld2F5IiAiZnNfdGNwX2dhdGV3YXkiCisgICAgIGVybGFuZy1za2VsLWZzLXRjcC1nYXRld2F5IGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIkVkb2MgZnVuY3Rpb24iICJmc19lZG9jX2hlYWRlciIKKyAgICAgZXJsYW5nLXNrZWwtZnMtZWRvYy1oZWFkZXIgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiREIgSW5pdGlhbGl6ZSIgImZzX2RiX2luaXQiCisgICAgIGVybGFuZy1za2VsLWZzLWRiLWluaXQgZXJsYW5nLXNrZWwtaGVhZGVyKQorICAgICgiZ2VuX2xlYWRlciIgImdlbmVyaWMtbGVhZGVyIgorICAgICBlcmxhbmctc2tlbC1nZW5lcmljLWxlYWRlciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJTdXBlcnZpc29yIiAic3VwZXJ2aXNvciIKKyAgICAgZXJsYW5nLXNrZWwtc3VwZXJ2aXNvciBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJzdXBlcnZpc29yX2JyaWRnZSIgInN1cGVydmlzb3ItYnJpZGdlIgorICAgICBlcmxhbmctc2tlbC1zdXBlcnZpc29yLWJyaWRnZSBlcmxhbmctc2tlbC1oZWFkZXIpCisgICAgKCJnZW5fc2VydmVyIiAiZ2VuZXJpYy1zZXJ2ZXIiCisgICAgIGVybGFuZy1za2VsLWdlbmVyaWMtc2VydmVyIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoImdlbl9ldmVudCIgImdlbi1ldmVudCIKKyAgICAgZXJsYW5nLXNrZWwtZ2VuLWV2ZW50IGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoImdlbl9mc20iICJnZW4tZnNtIgorICAgICBlcmxhbmctc2tlbC1nZW4tZnNtIGVybGFuZy1za2VsLWhlYWRlcikKKyAgICAoIkxpYnJhcnkgbW9kdWxlIiAiZ2VuLWxpYiIKKyAgICAgZXJsYW5nLXNrZWwtbGliIGVybGFuZy1za2VsLWhlYWRlcikKKwkoIkNvcmJhIGNhbGxiYWNrIiAiZ2VuLWNvcmJhLWNiIgorICAgICBlcmxhbmctc2tlbC1jb3JiYS1jYWxsYmFjayBlcmxhbmctc2tlbC1oZWFkZXIpKQorICAiKkRlc2NyaXB0aW9uIG9mIGFsbCBza2VsZXRvbnMgdGVtcGxhdGVzLgorQm90aCBmdW5jdGlvbnMgYW5kIG1lbnUgZW50cmllcyB3aWxsIGJlIGNyZWF0ZWQuCisKK0VhY2ggZW50cnkgaW4gYGVybGFuZy1za2VsJyBzaG91bGQgYmUgYSBsaXN0IHdpdGggdGhyZWUgb3IgZm91cgorZWxlbWVudHMsIG9yIHRoZSBlbXB0eSBsaXN0LgorCitUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgbmFtZSB3aGljaCBzaG93cyB1cCBpbiB0aGUgbWVudS4gIFRoZSBzZWNvbmQKK2lzIHRoZSBgdGVtcG8nIGlkZW50ZmllciAoVGhlIHN0cmluZyBcImVybGFuZy1cIiB3aWxsIGJlIGFkZGVkIGluCitmcm9udCBvZiBpdCkuICBUaGUgdGhpcmQgaXMgdGhlIHNrZWxldG9uIGRlc2NyaXB0b3IsIGEgdmFyaWFibGUKK2NvbnRhaW5pbmcgYHRlbXBvJyBhdHRyaWJ1dGVzIGFzIGRlc2NyaWJlZCBpbiB0aGUgZnVuY3Rpb24KK2B0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiAgVGhlIG9wdGlvbmFsIGZvdXJ0aCBlbGVtZW50cyBkZW5vdGVzIGEKK2Z1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgbWVudSBpcyBzZWxlY3RlZC4KKworRnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gZXZlcnkgdGVtcGxhdGUgd2lsbCBiZSBjcmVhdGVkLiAgVGhlIG5hbWUKK29mIHRoZSBmdW5jdGlvbiB3aWxsIGJlIGB0ZW1wby10ZW1wbGF0ZS1lcmxhbmctWCcgd2hlcmUgYFgnIGlzIHRoZQordGVtcG8gaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgZWxlbWVudHMKK2luIHRoaXMgbGlzdC4KKworQSBsaXN0IHdpdGggemVybyBlbGVtZW50cyBtZWFucyB0aGF0IHRoZSBhIGhvcmlzb250YWwgbGluZSBzaG91bGQKK2JlIHBsYWNlZCBpbiB0aGUgbWVudS4iKQorCis7OyBJbiBYRW1hY3MgYHVzZXItbWFpbC1hZGRyZXNzJyByZXR1cm5zICJ4QHkueiAoRm9vIEJhcikiIEFSR0ghCis7OyBXaGF0J3Mgd3Jvbmcgd2l0aCB0aGF0PyBSRkMgODIyIHNheXMgaXQncyBsZWdhbC4gICBbc3ZlcmtlcnddCisoZGVmdmFyIGVybGFuZy1za2VsLW1haWwtYWRkcmVzcworICAoY29uY2F0ICh1c2VyLWxvZ2luLW5hbWUpICJAIgorCSAgKG9yIChhbmQgKGJvdW5kcCAnbWFpbC1ob3N0LWFkZHJlc3MpCisJCSAgIChzeW1ib2wtdmFsdWUgJ21haWwtaG9zdC1hZGRyZXNzKSkKKwkgICAgICAoc3lzdGVtLW5hbWUpKSkKKyAgIk1haWwgYWRkcmVzcyBvZiB0aGUgdXNlci4iKQorCis7OyBFeHByZXNzaW9uIHRlbXBsYXRlczoKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtY2FzZQorICAnKChlcmxhbmctc2tlbC1za2lwLWJsYW5rKSBvID4KKyAgICAiY2FzZSAiIHAgIiBvZiIgbj4gcCAiXyAtPiIgbj4gcCAib2siIG4+ICJlbmQiIHApCisgICIqVGhlIHNrZWxldG9uIG9mIGEgYGNhc2UnIGV4cHJlc3Npb24uCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWlmCisgICcoKGVybGFuZy1za2VsLXNraXAtYmxhbmspIG8gPgorICAgICJpZiIgIG4+IHAgIiAtPiIgbj4gcCAib2siIG4+ICJlbmQiIHApCisgICJUaGUgc2tlbGV0b24gb2YgYW4gYGlmJyBleHByZXNzaW9uLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1yZWNlaXZlCisgICcoKGVybGFuZy1za2VsLXNraXAtYmxhbmspIG8gPgorICAgICJyZWNlaXZlIiBuPiBwICJfIC0+IiBuPiBwICJvayIgbj4gImVuZCIgcCkKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBgcmVjZWl2ZScgZXhwcmVzc2lvbi4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtcmVjZWl2ZS1hZnRlcgorICAnKChlcmxhbmctc2tlbC1za2lwLWJsYW5rKSBvID4KKyAgICAicmVjZWl2ZSIgbj4gcCAiXyAtPiIgbj4gcCAib2siIG4+ICJhZnRlciAiIHAgIlQgLT4iIG4+CisgICAgcCAib2siIG4+ICJlbmQiIHApCisgICIqVGhlIHNrZWxldG9uIG9mIGEgYHJlY2VpdmUnIGV4cHJlc3Npb24gd2l0aCBhbiBgYWZ0ZXInIGNsYXVzZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtcmVjZWl2ZS1sb29wCisgICcoJiBvICJsb29wKCIgcCAiKSAtPiIgbj4gInJlY2VpdmUiIG4+IHAgIl8gLT4iIG4+CisgICAgICAibG9vcCgiIHAgIikiIG4+ICJlbmQuIikKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBzaW1wbGUgYHJlY2lldmUnIGxvb3AuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisKKzs7IEF0dHJpYnV0ZSB0ZW1wbGF0ZXMKKworKGRlZnZhciBlcmxhbmctc2tlbC1tb2R1bGUKKyAgJygmICItbW9kdWxlKCIKKyAgICAgIChlcmxhbmctYWRkLXF1b3Rlcy1pZi1uZWVkZWQgKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lKSkKKyAgICAgICIpLiIgbikKKyAgIipUaGUgc2tlbGV0b24gb2YgYSBgbW9kdWxlJyBhdHRyaWJ1dGUuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWF1dGhvcgorICAnKCYgIi1hdXRob3IoJyIgZXJsYW5nLXNrZWwtbWFpbC1hZGRyZXNzICInKS4iIG4pCisgICIqVGhlIHNrZWxldG9uIG9mIGEgYGF1dGhvcicgYXR0cmlidXRlLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC12YyBuaWwKKyAgIipUaGUgc2tlbGV0b24gdGVtcGxhdGUgdG8gZ2VuZXJhdGUgYSB2ZXJzaW9uIGNvbnRyb2wgYXR0cmlidXRlLgorVGhlIGRlZmF1bHQgaXMgdG8gaW5zZXJ0IG5vdGhpbmcuICBFeGFtcGxlIG9mIHVzYWdlOgorCisgICAgKHNldHEgZXJsYW5nLXNrZWwtdmMgJygmIFwiLXJjcyhcXFwiJFxJZDogJCBcXFwiKS5cIikgbikKKworUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1leHBvcnQKKyAgJygmICItZXhwb3J0KFsiIG4+ICJdKS4iIG4pCisgICIqVGhlIHNrZWxldG9uIG9mIGFuIGBleHBvcnQnIGF0dHJpYnV0ZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtaW1wb3J0CisgICcoJiAiJSUtaW1wb3J0KE1vZHVsZSwgW0Z1bmN0aW9uL0FyaXR5LCAuLi5dKS4iIG4pCisgICIqVGhlIHNrZWxldG9uIG9mIGFuIGBpbXBvcnQnIGF0dHJpYnV0ZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtY29tcGlsZSBuaWwKKzs7ICAnKCYgIiUlLWNvbXBpbGUoZXhwb3J0X2FsbCkuIiBuKQorICAiKlRoZSBza2VsZXRvbiBvZiBhIGBjb21waWxlJyBhdHRyaWJ1dGUuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisKKzs7IENvbW1lbnQgdGVtcGxhdGVzLgorCisoZGVmdmFyIGVybGFuZy1za2VsLWRhdGUtZnVuY3Rpb24gJ2VybGFuZy1za2VsLWRkLW1tbS15eXl5CisgICIqRnVuY3Rpb24gd2hpY2ggcmV0dXJucyBkYXRlIHN0cmluZy4KK0xvb2sgaW4gdGhlIG1vZHVsZSBgdGltZS1zdGFtcCcgZm9yIGEgYmF0dGVyeSBvZiBmdW5jdGlvbnMuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1jb3B5cmlnaHQtY29tbWVudCAnKCkKKyAgIipUaGUgdGVtcGxhdGUgZm9yIGEgY29weXJpZ2h0IGxpbmUgaW4gdGhlIGhlYWRlciwgbm9ybWFsbHkgZW1wdHkuCitUaGlzIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCB0byBhIGB0ZW1wbycgdGVtcGxhdGUsIGZvciBleGFtcGxlOgorICAnKCYgXCIlJSUgQ29weXJpZ2h0IChDKSAyMDAwLCBZb3lvZHluZSwgSW5jLlwiIG4pCisKK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtY3JlYXRlZC1jb21tZW50CisgICcoJiAiJSUlIENyZWF0ZWQgOiAiIChmdW5jYWxsIGVybGFuZy1za2VsLWRhdGUtZnVuY3Rpb24pICIgYnkgIgorICAgICAgKHVzZXItZnVsbC1uYW1lKSAiIDwiIGVybGFuZy1za2VsLW1haWwtYWRkcmVzcyAiPiIgbikKKyAgIipUaGUgdGVtcGxhdGUgZm9yIHRoZSBcIkNyZWF0ZWQ6XCIgY29tbWVudCBsaW5lLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtYXV0aG9yLWNvbW1lbnQKKyAgJygmICIlJSUgQXV0aG9yICA6ICIgKHVzZXItZnVsbC1uYW1lKSAiIDwiIGVybGFuZy1za2VsLW1haWwtYWRkcmVzcyAiPiIgbikKKyAgIipUaGUgdGVtcGxhdGUgZm9yIGNyZWF0aW5nIHRoZSBcIkF1dGhvcjpcIiBsaW5lIGluIHRoZSBoZWFkZXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWZpbGUtY29tbWVudAorICAnKCYgIiUlJSBGaWxlICAgIDogIiAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBidWZmZXItZmlsZS1uYW1lKSBuKQorICAiKlRoZSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgdGhlIFwiTW9kdWxlOlwiIGxpbmUgaW4gdGhlIGhlYWRlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtc21hbGwtaGVhZGVyCisgICcobyAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1tb2R1bGUpCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVybGFuZy1za2VsLWF1dGhvcikKKyAgICAgIG4KKyAgICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWNvbXBpbGUKKzs7CQkJICAgZXJsYW5nLXNrZWwtZXhwb3J0CisJCQkgICBlcmxhbmctc2tlbC12YykpCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgc21hbGwgaGVhZGVyIHdpdGhvdXQgYW55IGNvbW1lbnRzLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1ub3JtYWwtaGVhZGVyCisgICcobyAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jb3B5cmlnaHQtY29tbWVudAorCQkJICAgZXJsYW5nLXNrZWwtZmlsZS1jb21tZW50CisJCQkgICBlcmxhbmctc2tlbC1hdXRob3ItY29tbWVudCkKKyAgICAgICIlJSUgRGVzY3JpcHRpb24gOiAiIHAgbgorICAgICAgKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtY3JlYXRlZC1jb21tZW50KSBuCisgICAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1zbWFsbC1oZWFkZXIpIG4pCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgbm9ybWFsIGhlYWRlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyCisgICcobyAiJSUlICRJZDogZXJsYW5nLmVsLHYgMS4yMSAyMDA0LzA4LzAzIDIwOjM4OjQzIG1sb2dhbiBFeHAgJCIgbiAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yKQorICAgICAgKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtY29weXJpZ2h0LWNvbW1lbnQKKwkJCSAgIGVybGFuZy1za2VsLWZpbGUtY29tbWVudAorCQkJICAgZXJsYW5nLXNrZWwtYXV0aG9yLWNvbW1lbnQpCisJICAiJSUlIiBuCisgICAgICAiJSUlIEBkb2MgICIgcCBuIAorCSAgIiUlJSBAZW5kIiBuCisJICAiJSUlIiBuCisgICAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jcmVhdGVkLWNvbW1lbnQpCisgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yKSAKKyAgICAgIChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLXNtYWxsLWhlYWRlcikgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhIGxhcmdlIGhlYWRlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworOzsgU2VydmVyIHRlbXBsYXRlcy4KKworKGRlZnZhciBlcmxhbmctc2tlbC1zbWFsbC1zZXJ2ZXIKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgSW5jbHVkZSBmaWxlcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoW3N0YXJ0X2xpbmsvMF0pLiIgbiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbaW5pdC8xXSkuIiBuIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBUaGUgc3RhcnRpbmcgcG9pbnQuIiBuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoKSAtPiB7b2ssIFBpZH0iIG4KKyAgICAiJSUgQGVuZCIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhcnRfbGluaygpIC0+IiBuPgorICAgICJwcm9jX2xpYjpzdGFydF9saW5rKD9NT0RVTEUsIGluaXQsIFtzZWxmKCldKS4iIG4gbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRGVzY3JpcHRpb246IEluaXRpYWxpemVzIHRoaXMgc2VydmVyLiIgbgorICAgICIlJSBWYXJpYWJsZXM6IiBuCisgICAgIiUlICBGcm9tIC0gVGhlIHBpZCBvZiB0aGUgcGFyZW50IHByb2Nlc3MuIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KEZyb20pIC0+IiBuPgorICAgICJyZWdpc3Rlcig/U0VSVkVSLCBzZWxmKCkpLCIgbj4KKyAgICAicHJvY19saWI6aW5pdF9hY2soRnJvbSwge29rLCBzZWxmKCl9KSwiIG4+CisgICAgImxvb3AoRnJvbSkuIiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICJsb29wKEZyb20pIC0+IiBuPgorICAgICJyZWNlaXZlIiBuPgorICAgIHAgIl8gLT4iIG4+CisgICAgImxvb3AoRnJvbSkiIG4+CisgICAgImVuZC4iCisgICAgKQorICAiKlRlbXBsYXRlIG9mIGEgc21hbGwgc2VydmVyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworOzsgQmVoYXZpb3VyIHRlbXBsYXRlcy4KKworKGRlZnZhciBlcmxhbmctc2tlbC1hcHBsaWNhdGlvbgorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiLWJlaGF2aW91cihhcHBsaWNhdGlvbikuIiBuCisgCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgSW5jbHVkZSBmaWxlcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAKKyAgICAJInN0YXJ0LzIsIiBuPgorCSJzaHV0ZG93bi8wLCIgbj4KKwkic3RvcC8xIiBuPgorCSJdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY29yZHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFuIGVybGFuZyBhcHBsaWNhdGlvbi4iIG4KKyAgICAiJSUgQHNwZWMgc3RhcnQoVHlwZSwgU3RhcnRBcmdzKSAtPiB7b2ssIFBpZH0gfCB7b2ssIFBpZCwgU3RhdGV9IHwge2Vycm9yLCBSZWFzb259IiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInN0YXJ0KFR5cGUsIFN0YXJ0QXJncykgLT4iIG4+CisgICAgImNhc2UgIihlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZSkiX3N1cDpzdGFydF9saW5rKFN0YXJ0QXJncykgb2YiIG4+CisgICAgIntvaywgUGlkfSAtPiAiIG4+CisgICAgIntvaywgUGlkfTsiIG4+CisgICAgIkVycm9yIC0+IiBuPgorICAgICJFcnJvciIgbj4KKyAgICAiZW5kLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgQ2FsbGVkIHRvIHNodWRvd24gdGhlICIoZXJsYW5nLWdldC1tb2R1bGUtZnJvbS1maWxlLW5hbWUpIiBhcHBsaWNhdGlvbi4iIG4KKyAgICAiJSUgQHNwZWMgc2h1dGRvd24oKSAtPiBvayAibgorICAgICIlJSBAZW5kIm4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInNodXRkb3duKCkgLT4iIG4+CisgICAgImFwcGxpY2F0aW9uOnN0b3AoIihlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZSkiKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBDYWxsZWQgdXBvbiB0aGUgdGVybWludGlvbiBvZiBhbiBhcHBsaWNhdGlvbi4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInN0b3AoU3RhdGUpIC0+IiBuPgorICAgICJvay4iIG4KKyAgICBuCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhbiBhcHBsaWNhdGlvbiBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCis7OyBNYXJ0aW5zIHdvcmsKKworOzsgdGVzdCBzZXJ2ZXIgdGVzdCBzdWl0ZSB0ZW1wbGF0ZQorKGRlZnZhciBlcmxhbmctc2tlbC10ZXN0LXN1aXRlCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtY29weXJpZ2h0LWNvbW1lbnQKKwkJCSAgIGVybGFuZy1za2VsLWZpbGUtY29tbWVudAorCQkJICAgZXJsYW5nLXNrZWwtYXV0aG9yLWNvbW1lbnQpCisgICAgIiUlJSIgbgorICAgICIlJSUgQGRvYyAgIiBwIG4gCisgICAgIiUlJSA8cD5BIHRlc3Qgc3BlYyBjb25zaXN0cyBvZiB0aGUgdGVzdCBzZXJ2ZXIgcmVxdWlyZWQgZnVuY3Rpb25zIGFzIGRldGFpbGVkIiBuCisgICAgIiUlJSBieSB0aGUgY29tbWVudHMgZm9yIHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBmdXJ0aGVyIGRvd24gaW4gdGhpcyIgbgorICAgICIlJSUgZmlsZS4gVGhlIHJlc3Qgb2YgYSB0ZXN0IHN1aXRlIGNvbnNpc3RzIG9mIHVzZXIgZGVmaW5lZCBDYXNlIGZ1bmN0aW9ucyIgbgorICAgICIlJSUgYXMgcmVmZXJlbmNlZCBieSB0aGUgc3VpdGUgY2xhdXNlIG9mIHRoZSBhbGwvMSBmdW5jdGlvbiBhbmQgIm4KKyAgICAiJSUlIGRlc2NyaWJlZCBiZWxvdy48L3A+Im4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxzdHJvbmc+IgorICAgICIlJSUgQ2FzZShkb2MpICAgIC0+IFtEZWNyaXB0aW9uXSIgbgorICAgICIlJSUgQ2FzZShzdWl0ZSkgIC0+IFtdIHwgVGVzdFNwZWMgfCB7c2tpcCwgQ29tbWVudH0iIG4KKyAgICAiJSUlIENhc2UoQ29uZmlnKSAtPiB7c2tpcCwgQ29tbWVudH0gfCB7Y29tbWVudCwgQ29tbWVudH0gfCBPayIgbgorICAgICIlJSUgPC9zdHJvbmc+PHByZT4ibgorICAgICIlJSUibgorICAgICIlJSUgVmFyaWFibGVzOiIgbgorICAgICIlJSUgIERlc2NyaXB0aW9uIC0gU2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QgY2FzZSBUZXN0U3BlYyIgbgorICAgICIlJSUgIENvbW1lbnQgLSBUaGlzIGNvbW1lbnQgd2lsbCBiZSBwcmludGVkIG9uIHRoZSBIVE1MIHJlc3VsdCBwYWdlICIgbgorICAgICIlJSUibgorICAgICIlJSUgVHlwZXM6IiBuCisgICAgIiUlJSAgRGVzY3JpcHRpb24gPSBzdHJpbmcoKSIgbgorICAgICIlJSUgIFRlc3RTcGVjID0gbGlzdCgpIiBuCisgICAgIiUlJSAgT2sgPSB0ZXJtKCkiIG4KKyAgICAiJSUlICBDb21tZW50ID0gc3RyaW5nKCkiIG4KKyAgICAiJSUlICBDb25maWcgPSB0ZXJtKCkiIG4KKyAgICAiJSUlIDwvcHJlPiIgbgorICAgICIlJSUgPHA+VGhlIGRvY3VtZW50YXRpb24gY2xhdXNlIChhcmd1bWVudCBkb2MpIGNhbiBiZSB1c2VkIGZvciIgbgorICAgICIlJSUgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgdGVzdCBkb2N1bWVudGF0aW9uIG9yIHRlc3QgZGVzY3JpcHRpb25zLjwvcD4iIG4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxwPlRoZSBzcGVjaWZpY2F0aW9uIGNsYXVzZSAoYXJndW1lbnQgc3BlYykgc2hhbGwgcmV0dXJuIGFuIGVtcHR5IiBuIAorICAgICIlJSUgbGlzdCwgdGhlIHRlc3Qgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIHRlc3QgY2FzZSBvciB7c2tpcCxDb21tZW50fS4iIG4KKyAgICAiJSUlIFRoZSBzeW50YXggb2YgYSB0ZXN0IHNwZWNpZmljYXRpb24gaXMgZGVzY3JpYmVkIGluIHRoZSByZWZlcmVuY2UgIiBuCisgICAgIiUlJSBtYW51YWwgZm9yIHRoZSBUZXN0IFNlcnZlciBhcHBsaWNhdGlvbi48L3A+IiBuCisgICAgIiUlJSJuCisgICAgIiUlJSA8cD5Ob3RlIHRoYXQgdGhlIHNwZWNpZmljYXRpb24gY2xhdXNlIGFsd2F5cyBpcyBleGVjdXRlZCBvbiAibgorICAgICIlJSUgdGhlIGNvbnRyb2xsZXIgaG9zdC48L3A+Im4KKyAgICAiJSUlIm4KKyAgICAiJSUlIDxwPlRoZSBleGVjdXRpb24gY2xhdXNlIChhcmd1bWVudCBDb25maWcpIGlzIG9ubHkgY2FsbGVkIGlmICJuCisgICAgIiUlJSB0aGUgc3BlY2lmaWNhdGlvbiBjbGF1c2UgcmV0dXJucyBhbiBlbXB0eSBsaXN0LiBUaGUgZXhlY3V0aW9uICJuCisgICAgIiUlJSBjbGF1c2UgaXMgdGhlIHJlYWwgdGVzdCBjYXNlLiBIZXJlIHlvdSBtdXN0IGNhbGwgdGhlIGZ1bmN0aW9ucyAibgorICAgICIlJSUgeW91IHdhbnQgdG8gdGVzdCwgYW5kIGRvIHdoYXRldmVyIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSByZXN1bHQuICJuCisgICAgIiUlJSBJZiBzb21ldGluZyBmYWlscywgbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGNyYXNoZXMgb3IgY2FsbCAibgorICAgICIlJSUgdGVzdF9zZXJ2ZXI6ZmFpbC8wLzEgKHdoaWNoIGFsc28gd2lsbCBjYXVzZSB0aGUgcHJvY2VzcyB0byBjcmFzaCkuPC9wPiJuCisgICAgIiUlJSJuCisgICAgIiUlJSA8cD5Zb3UgY2FuIHJldHVybiB7c2tpcCxDb21tZW50fSBpZiB5b3UgZGVjaWRlIG5vdCB0byBydW4gdGhlICJuCisgICAgIiUlJSB0ZXN0IGNhc2UgYWZ0ZXIgYWxsLCBlLmcuIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlIG9uIHRoaXMgcGxhdGZvcm0uPC9wPiJuCisgICAgIiUlJSJuCisgICAgIiUlJSA8cD5Zb3UgY2FuIHJldHVybiB7Y29tbWVudCxDb21tZW50fSBpZiB5b3Ugd2lzaCB0byBwcmludCBzb21lICJuCisgICAgIiUlJSBpbmZvcm1hdGlvbiBpbiB0aGUgJ0NvbW1lbnQnIGZpZWxkIG9uIHRoZSBIVE1MIHJlc3VsdCBwYWdlLjwvcD4ibgorICAgICIlJSUibgorICAgICIlJSUgPHA+SWYgdGhlIGV4ZWN1dGlvbiBjbGF1c2UgcmV0dXJucyBhbnl0aGluZyBlbHNlLCBpdCBpcyBjb25zaWRlcmVkICJuCisgICAgIiUlJSBhIHN1Y2Nlc3MuIDwvcD4ibgorICAgICIlJSUgQGVuZCIgbgorICAgICIlJSUiIG4KKyAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1jcmVhdGVkLWNvbW1lbnQpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvcikgCisgICAgKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtc21hbGwtaGVhZGVyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW5jbHVkZSBmaWxlcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgTWFjcm8gRGVmaW5pdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFRlc3QgU3VpdGUgRXhwb3J0cyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyJuPiJhbGwvMSwibj4iaW5pdF9wZXJfdGVzdGNhc2UvMiwibj4iZmluX3Blcl90ZXN0Y2FzZS8yIm4+Il0pLiIgbiAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBFeHBvcnRzIC0gdGVzdCBjYXNlcyBtdXN0IGJlIGV4cG9ydGVkLiIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyJuPiJdKS4ibgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBUZXN0IFNlcnZlciBGdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0ZXN0IHNwZWNpZmljYXRpb24gZm9yIHRoZSB0ZXN0IHN1aXRlIG1vZHVsZS4ibgorICAgICIlJSA8cHJlPiJuCisgICAgIiUlIFR5cGVzOiJuCisgICAgIiUlICBUZXN0U3BlYyA9IGxpc3QoKSJuCisgICAgIiUlICBDb21tZW50ID0gc3RyaW5nKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIEBzcGVjIGFsbChzdWl0ZSkgLT4gVGVzdFNwZWMgfCB7c2tpcCwgQ29tbWVudH0ibgorICAgICIlJSBAZW5kIm4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImFsbChkb2MpICAgLT4gW107Im4gCisgICAgImFsbChzdWl0ZSkgLT4gW10uIm4gbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGVhY2ggdGVzdCBjYXNlLiJuCisgICAgIiUlIDxwcmU+Im4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIENhc2UgPSBhdG9tKCkibgorICAgICIlJSAgQ29uZmlnID0gTmV3Q29uZmlnID0gdGVybSgpIm4KKyAgICAiJSUibgorICAgICIlJSA8L3ByZT4ibgorICAgICIlJSBAc3BlYyBpbml0X3Blcl90ZXN0Y2FzZShDYXNlLCBDb25maWcpIC0+IE5ld0NvbmZpZyJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdF9wZXJfdGVzdGNhc2UoQ2FzZSwgQ29uZmlnKSAtPiBbXS4ibiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZWFjaCB0ZXN0IGNhc2UuIm4KKyAgICAiJSUgPHByZT4ibgorICAgICIlJSBUeXBlczoibgorICAgICIlJSAgQ2FzZSA9IGF0b20oKSJuCisgICAgIiUlICBDb25maWcgPSB0ZXJtKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIEBzcGVjIGZpbl9wZXJfdGVzdGNhc2UoQ2FzZSwgQ29uZmlnKSAtPiB2b2lkKCkibgorICAgICIlJSBAZW5kIm4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImZpbl9wZXJfdGVzdGNhc2UoQ2FzZSwgQ29uZmlnKSAtPiBvay4ibiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbmRpdmlkdWFsIFRlc3QgQ2FzZSBGdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgLiIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJDYXNlKGRvYykgICAgICAgICAgICAgICAgICAgICAgLT4gW107Im4KKyAgICAiQ2FzZShzdWl0ZSkgICAgICAgICAgICAgICAgICAgIC0+IFtdOyJuCisgICAgIkNhc2UoQ29uZmlnKSB3aGVuIGxpc3QoQ29uZmlnKSAtPiBvay4ibiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIEZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhbiBhcHBsaWNhdGlvbiBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisKKzs7IGZzX3RjcF9nYXRld2F5IHRlbXBsYXRlCisoZGVmdmFyIGVybGFuZy1za2VsLWZzLXRjcC1nYXRld2F5CisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICIlJSBUT0RPIEltcGxlbWVudCB0aGlzIGJlaGF2aW91ciIgbgorICAgICIlJSAtYmVoYXZpb3VyKHRjcF9nYXRld2F5KS4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEluY2x1ZGUgZmlsZXMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJzdGFydF9saW5rLzEsIGluaXQvMCwgc3luY19yZXF1ZXN0LzUsIGFzeW5jX3JlcXVlc3QvNSwgdGVybWluYXRlLzIiIG4KKyAgICAiICAgICAgICBdKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNvcmRzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLXJlY29yZChzdGF0ZSwge30pLiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgZ2F0ZXdheSBzZXJ2ZXIuIm4KKyAgICAiJSUgPHByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEV4cGVjdHM6Im4KKyAgICAiJSUgIFBvcnQgLSBUaGUgcG9ydCBudW1iZXIgdG8gYmluZCB0by4ibgorICAgICIlJSJuCisgICAgIiUlIFR5cGVzOiJuCisgICAgIiUlICBQb3J0ID0gaW50ZWdlcigpIm4KKyAgICAiJSUibgorICAgICIlJSA8L3ByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoUG9ydCkgLT4ge29rLCBwaWQoKX0ibgorICAgICIlJSBAZW5kIm4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInN0YXJ0X2xpbmsoUG9ydCkgLT4iIG4+CisgICAgIkNhbGxCYWNrTW9kdWxlID0gP01PRFVMRSwibj4KKyAgICAiICAgIGZzX3RjcF9nYXRld2F5OnN0YXJ0X2xpbmsoQ2FsbEJhY2tNb2R1bGUsIFBvcnQpLiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIENhbGxiYWNrcyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIEluaXRpYWxpemF0aW9uIHN0YWdlIGZvciBlYWNoIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBnYXRld2F5IHNlcnZlci4ibgorICAgICIlJSA8cHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIFN0YXRlID0gdGVybSgpIm4KKyAgICAiJSUibgorICAgICIlJSA8L3ByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEBzcGVjIGluaXQoKSAtPiB7b2ssIFN0YXRlfSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdCgpIC0+Im4+CisgICAgIntvaywgI3N0YXRle319LiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBDYWxsZWQgd2hlbiB0aGUgc2VydmVyIHJlY2VpdmVzIGEgc3luY3Jvbm91cyByZXF1ZXN0IGZyb20gYSBjbGllbnQuIm4KKyAgICAiJSUgPHByZT4ibgorICAgICIlJSJuCisgICAgIiUlIEV4cGVjdHM6Im4KKyAgICAiJSUgIElEIC0gVGhlIHJlcXVlc3QgSUQgbnVtYmVyIm4KKyAgICAiJSUgIE0gLSBtb2R1bGUgbmFtZSJuCisgICAgIiUlICBGIC0gZnVuY3Rpb24gbmFtZSJuCisgICAgIiUlICBBIC0gTGlzdCBvZiBhcmd1bWVudHMibgorICAgICIlJSAgUmVwbHkgLSBBIG1lc3NhZ2Ugc2VudCBiYWNrIG92ZXIgdGhlIHRjcCBzdHJlYW0gdG8gdGhlIGNsaWVudCJuCisgICAgIiUlIm4KKyAgICAiJSUgVHlwZXM6Im4KKyAgICAiJSUgIElEID0gTSA9IEYgPSBSZXBseSA9IHN0cmluZygpIm4KKyAgICAiJSUgIEEgPSBbc3RyaW5nKCldIm4KKyAgICAiJSUgIFN0YXRlID0gdGVybSgpIm4KKyAgICAiJSUgIFJlcGx5ID0gc3RyaW5nKCkibgorICAgICIlJSJuCisgICAgIiUlIDwvcHJlPiJuCisgICAgIiUlIm4KKyAgICAiJSUgQHNwZWMgc3luY19yZXF1ZXN0KElELCBNLCBGLCBBLCBTdGF0ZSkgLT4ibgorICAgICIlJSB7cmVwbHksIFJlcGx5LCBTdGF0ZX0gfCB7c3RvcCwgUmVwbHksIFJlYXNvbiwgU3RhdGV9IHwge25vcmVwbHksIFN0YXRlfSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3luY19yZXF1ZXN0KElELCBNLCBGLCBBLCBTdGF0ZSkgLT4ibj4KKyAgICAie3JlcGx5LCBcInN5bmMgb2tcIiwgU3RhdGV9LiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBDYWxsZWQgd2hlbiB0aGUgc2VydmVyIHJlY2VpdmVzIGEgYXN5bmNyb25vdXMgcmVxdWVzdCBmcm9tIGEgY2xpZW50LiJuCisgICAgIiUlIDxwcmU+Im4KKyAgICAiJSUibgorICAgICIlJSBFeHBlY3RzOiJuCisgICAgIiUlICBJRCAtIFRoZSByZXF1ZXN0IElEIG51bWJlciJuCisgICAgIiUlICBNIC0gbW9kdWxlIG5hbWUibgorICAgICIlJSAgRiAtIGZ1bmN0aW9uIG5hbWUibgorICAgICIlJSAgQSAtIExpc3Qgb2YgYXJndW1lbnRzIm4KKyAgICAiJSUgIFJlcGx5IC0gQSBtZXNzYWdlIHNlbnQgYmFjayBvdmVyIHRoZSB0Y3Agc3RyZWFtIHRvIHRoZSBjbGllbnQibgorICAgICIlJSJuCisgICAgIiUlIFR5cGVzOiJuCisgICAgIiUlICBJRCA9IE0gPSBGID0gc3RyaW5nKCkibgorICAgICIlJSAgQSA9IFtzdHJpbmcoKV0ibgorICAgICIlJSAgU3RhdGUgPSB0ZXJtKCkibgorICAgICIlJSAgUmVwbHkgPSBzdHJpbmcoKSJuCisgICAgIiUlIm4KKyAgICAiJSUgPC9wcmU+Im4KKyAgICAiJSUibgorICAgICIlJSBAc3BlYyBhc3luY19yZXF1ZXN0KElELCBNLCBGLCBBLCBTdGF0ZSkgLT4ibiAKKyAgICAiJSUge3N0b3AsIFJlYXNvbiwgU3RhdGV9IHwge25vcmVwbHksIFN0YXRlfSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiYXN5bmNfcmVxdWVzdChJRCwgTSwgRiwgQSwgU3RhdGUpIC0+Im4+CisgICAgIntub3JlcGx5LCBTdGF0ZX0uIm4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIENhbGxlZCB1cG9uIHRoZSBzaHV0ZG93biBvZiBhIGNvbm5lY3Rpb24uIm4KKyAgICAiJSUgQHNwZWMgdGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IHZvaWQoKSJuCisgICAgIiUlIEBlbmQibgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+Im4+CisgICAgIm9rLiJuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgZnNfdGNwX2dhdGV3YXkgYmVoYXZpb3VyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworCis7OyBnZW5fdGNwX3JlY3YgdGVtcGxhdGUKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZnMtZ2VuLXRjcC1yZWN2CisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICIlJSBUT0RPIEltcGxlbWVudCB0aGlzIGJlaGF2aW91ciIgbgorICAgICIlJSAtYmVoYXZpb3VyKGdlbl90Y3BfcmVjdikuIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAic3RhcnRfbGluay8wIiBuPiAiXSkuIiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBDYWxsYmFja3MiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJpbml0LzEsIiBuPiAiaGFuZGxlX3BhY2tldC8zLCIgbj4gImhhbmRsZV9jYWxsLzQiIG4+IAorICAgICJoYW5kbGVfaW5mby8zIiBuPiAidGVybWluYXRlLzIiIG4+ICJdKS4iIG4gbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW5jbHVkZSBmaWxlcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQVBJIC0gRXh0ZXJuYWwgRXhwb3J0cyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gCisgICAgInN0YXJ0X2xpbmsvMSIgbj4KKyAgICAiXSkuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgTWFjcm9zIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MgU3RhcnRzIHRoZSBmc19nZW5fdGNwX3JlY3Ygc2VydmVyLiIgbgorICAgICIlJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBQaWR9IiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInN0YXJ0X2xpbmsoKSAtPiIgbj4KKyAgICAiZnNfZ2VuX3RjcF9yZWN2OnN0YXJ0X2xpbmsoQ2FsbGJhY2tNb2R1bGUsID9UQ1BfUE9SVCwgW10sIFtdLCBbXSkuIiBuIG4gbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBGdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKSBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbml0aWFsaXplcyB0aGUgc3RhdGUgZm9yIGEgZ2VuX3RjcF9yZWN2IHNlcnZlci4iIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZX0iIG4KKyAgICAiJSUgU3RhdGUgPSB0ZXJtKCkiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJ7b2ssIFtdfS4iIG4gbiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNlaXZlcyBwYWNrZXRzIGZyb20gdGhlIHNvY2tldC4gQWxzbyByZWNlaXZlcyB0aW1vdXQgbWVzc2FnZXMuIiBuCisgICAgIiUlIFR5cGVzOiIgbgorICAgICIlJSAgU29ja2V0ID0gc29ja2V0KCkiIG4KKyAgICAiJSUgIFBhY2tldCA9IGJpbmFyeSgpIHwgc3RyaW5nKCkuIENhbiBiZSBhbHRlcmVkIGluIFRDUE9wdGlvbnMiIG4KKyAgICAiJSUgIFJlcGx5ID0gYmluYXJ5KCkgfCBzdHJpbmcoKS4gQ2FuIGJlIGFsdGVyZWQgaW4gVENQT3B0aW9ucyIgbgorICAgICIlJSAgU3RhdGUgPSBOZXdTdGF0ZSA9IHRlcm0oKSIgbgorICAgICIlJSAgVGltZW91dCA9IGludGVnZXIoKSBpbiBtaWxpc2Vjb25kcy4iIG4KKyAgICAiJSUgUmV0dXJuczogIiBuCisgICAgIiUlICB7bm9yZXBseSwgTmV3U3RhdGV9IHtub3JlcGx5LCBOZXdTdGF0ZSwgVGltZW91dH0iIG4KKyAgICAiJSUgIHtyZXBseSwgUmVwbHksIE5ld1N0YXRlfSB7cmVwbHksIFJlcGx5LCBOZXdTdGF0ZSwgVGltZW91dH0iIG4KKyAgICAiJSUgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX3BhY2tldChTb2NrZXQsIFBhY2tldCwgU3RhdGUpIC0+IiBuPgorICAgICJ7bm9yZXBseSwgU3RhdGV9LiIgbiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY2VpdmVzIHN5bmMgY2FsbHMgZnJvbSBhIGNsaWVudC4iIG4KKyAgICAiJSUgVmFyaWFibGVzOiIgbgorICAgICIlJSAgUmVwbHkgLSBBIG1lc3NhZ2Ugc2VudCBiYWNrIHRvIHRoZSBjYWxsZXIuIiBuCisgICAgIiUlICIgbgorICAgICIlJSBUeXBlczoiIG4KKyAgICAiJSUgIFNvY2tldCA9IHNvY2tldCgpIiBuCisgICAgIiUlICBNc2cgPSBSZXBseSA9IHRlcm0oKSIgbgorICAgICIlJSAgU3RhdGUgPSBOZXdTdGF0ZSA9IHRlcm0oKSIgbgorICAgICIlJSAgVGltZW91dCA9IGludGVnZXIoKSBpbiBtaWxpc2Vjb25kcy4iIG4KKyAgICAiJSUgUmV0dXJuczogIiBuCisgICAgIiUlICB7bm9yZXBseSwgTmV3U3RhdGV9IHtub3JlcGx5LCBOZXdTdGF0ZSwgVGltZW91dH0iIG4KKyAgICAiJSUgIHtyZXBseSwgUmVwbHksIE5ld1N0YXRlfSB7cmVwbHksIFJlcGx5LCBOZXdTdGF0ZSwgVGltZW91dH0iIG4KKyAgICAiJSUgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlfSB8IHtzdG9wLCBSZWFzb24sIFJlcGx5LCBOZXdTdGF0ZX0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9jYWxsKFNvY2tldCwgRnJvbSwgTXNnLCBTdGF0ZSkgLT4iIG4+CisgICAgIntyZXBseSwgUmVwbHksIFN0YXRlfS4iIG4gbiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBSZWNlaXZlcyBtZXNzYWdlcyBmcm9tIG90aGVyIHByb2Nlc3NlcyBhbmQgdGltZW91dHMuIiBuCisgICAgIiUlIFR5cGVzOiIgbgorICAgICIlJSAgU29ja2V0ID0gc29ja2V0KCkiIG4KKyAgICAiJSUgIE1zZyA9IHRlcm0oKSB8IHRpbWVvdXQiIG4KKyAgICAiJSUgIFN0YXRlID0gTmV3U3RhdGUgPSB0ZXJtKCkiIG4KKyAgICAiJSUgIFRpbWVvdXQgPSBpbnRlZ2VyKCkgaW4gbWlsaXNlY29uZHMuIiBuCisgICAgIiUlIFJldHVybnM6ICIgbgorICAgICIlJSAge25vcmVwbHksIE5ld1N0YXRlfSB7bm9yZXBseSwgTmV3U3RhdGUsIFRpbWVvdXR9IiBuCisgICAgIiUlICB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZX0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9pbmZvKFNvY2tldCwgTXNnLCBTdGF0ZSkgLT4iIG4+CisgICAgIntub3JlcGx5LCBTdGF0ZX0uIiBuIG4gbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQ2FsbGVkIGFmdGVyIGEgc29ja2V0IGNsb3NlcyBvciB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZX0iIG4KKyAgICAiJSUgVHlwZXM6IiBuCisgICAgIiUlICBTb2NrZXQgPSBzb2NrZXQoKSIgbgorICAgICIlJSAgU3RhdGUgPSBOZXdTdGF0ZSA9IHRlcm0oKSIgbgorICAgICIlJSBSZXR1cm5zOiB0ZXJtKCkiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInRlcm1pbmF0ZShTb2NrZXQsIFN0YXRlKSAtPiIgbj4KKyAgICAgICAgIm9rLiIgbiBuIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSUgSW50ZXJuYWwgRnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBmc19nZW5fdGNwX3JlY3YgYmVoYXZpb3VyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworOzsgZnNfZWRvY19oZWFkZXIgdGVtcGxhdGUKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZnMtZWRvYy1oZWFkZXIKKyAgJygoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEBkb2MiIG4KKyAgICAiJSUgPHByZT4iIG4KKyAgICAiJSUgVmFyaWFibGVzOiIgbgorICAgICIlJSBUeXBlczoiIG4KKyAgICAiJSUgPC9wcmU+IHRlcm0oKSIgbgorICAgICIlJSBAc3BlYyIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhbiBlZG9jIGZ1bmN0aW9uIGhlYWRlci4gCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCis7OyBmc19kYl9pbml0IHRlbXBsYXRlCisoZGVmdmFyIGVybGFuZy1za2VsLWZzLWRiLWluaXQKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIiUlIFRPRE8gSW1wbGVtZW50IHRoaXMgYmVoYXZpb3VyIiBuCisgICAgIiUlIC1iZWhhdmlvdXIoZGJfaW5pdCkuIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAic3RhcnRfbGluay8xLCBzdGFydF9saW5rLzMsIGluaXQvMSwgbG9jYWxfaW5pdC8wLCByZW1vdGVfaW5pdC8wIiBuCisJIiAgICAgICAgXSkuIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgTWFjcm9zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBTdGFydHMgdGhlIHNlcnZlci4gIiBuPgorICAgICIlJSA8cHJlPiIgbj4KKyAgICAiJSUgVmFyaWFibGVzOiIgbj4KKyAgICAiJSUgIENhbGxCYWNrTW9kdWxlIC0gVGhlIG1vZHVsZSB0aGF0IGV4aGliaXRzIHRoZSBkYiBpbml0IGJlaGF2aW91ci4iIG4+CisgICAgIiUlICBBcmdzIC0gQSBsaXN0IG9mIGFyZ3VtZW50cyBkZWxpdmVyZWQgdG8gdGhlIENhbGxCYWNrTW9kdWxlOmluaXQvMSBmdW5jdGlvbi4iIG4+CisgICAgIiUlICBPcHRpb25zIC0gQSBsaXN0IG9mIG9wdGlvbnMgZm9yIGZzX2RiX2luaXQuIiBuPgorICAgICIlJSIgbj4KKyAgICAiJSUgVGhlIG9wdGlvbnMgYXJlIGFzIGZvbGxvd3M6IiBuPgorICAgICIlJSAge3NjaGVtYV90eXBlLCBUeXBlfSIgbj4KKyAgICAiJSUiIG4+CisgICAgIiUlIFR5cGVzOiIgbj4KKyAgICAiJSUgIEFyZ3MgPSBsaXN0KCkiIG4+CisgICAgIiUlICBPcHRpb25zID0gbGlzdCgpIiBuPgorICAgICIlJSAgVHlwZSA9IHJhbV9jb3BpZXMgfCBkaXNjX2NvcGllcyB8IGRpc2Nfb25seV9jb3BpZXMiIG4+CisgICAgIiUlIiBuPgorICAgICIlJSA8L3ByZT4iIG4+CisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoQ2FsbEJhY2tNb2R1bGUsIEFyZ3MsIE9wdGlvbnMpIC0+IHtvaywgcGlkKCl9IHwge2Vycm9yLCBSZWFzb259IiBuPgorICAgICIlJSBAZW5kIiBuPgorICAgICIoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIgorICAgICJzdGFydF9saW5rKENhbGxCYWNrTW9kdWxlLCBBcmdzLCBPcHRpb25zKSAtPiIgbj4KKyAgICAicHJvY19saWI6c3RhcnRfbGluayg/TU9EVUxFLCBkYl9pbml0LCBbc2VsZigpLCBDYWxsQmFja01vZHVsZSwgQXJncywgT3B0aW9uc10pLiIgbj4KKyAgICBuCisgICAgIiUlIEBzcGVjIHN0YXJ0X2xpbmsoQ2FsbEJhY2tNb2R1bGUpIC0+IHtvaywgcGlkKCl9IHwge2Vycm9yLCBSZWFzb259IiBuPgorICAgICIlJSBAZXF1aXYgc3RhcnRfbGluayhDYWxsQmFja01vZHVsZSwgW10sIFtdKSIgbj4KKyAgICAic3RhcnRfbGluayhDYWxsQmFja01vZHVsZSkgLT4iIG4+CisgICAgInN0YXJ0X2xpbmsoQ2FsbEJhY2tNb2R1bGUsIFtdLCBbXSkuIiBuPgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBDYWxsYmFja3MiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyIgbgorICAgICIlJSBSZXR1cm5zIGEgbGlzdCBvZiBub2RlcyB0aGF0IGRiX2luaXQgc2hvdWxkIHRyeSB0byByZXBsaWNhdGUgd2l0aC4iIG4KKyAgICAiJSUiIG4KKyAgICAiJSUgPHByZT4iICBuCisgICAgIiUlIFR5cGVzOiIgbgorICAgICIlJSAgREJOb2RlcyA9IFtub2RlKCldIiBuCisgICAgIiUlIDwvcHJlPiIgIG4KKyAgICAiJSUiIG4KKyAgICAiJSUgQHNwZWMgaW5pdChBcmdzKSAtPiB7b2ssIERCTm9kZXN9IHwgbm9faW5pdCIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KEFyZ3MpIC0+IiBuCisgICAgIiAgICB7b2ssIERCTm9kZXNUb1JlcGxpY2F0ZUZyb20gPSBbXX0uIiBuIAorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyIgbgorICAgICIlJSBDcmVhdGVkIGEgc2NoZW1hIGFuZCBzZWVkcyB0aGUgbG9jYWwgZGF0YWJhc2UuIiBuCisgICAgIiUlIFJldHVybnMgYSBsaXN0IG9mIHJlY29yZHMgd2l0aCB0aGVpciBpbml0aWFsIGRhdGEuIiBuCisgICAgIiUlIFRoZXNlIGFyZSB0byBiZSB0aGUgdGFibGVzIGFuZCBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIGRhdGFiYXNlLiIgbgorICAgICIlJSIgbgorICAgICIlJSA8cHJlPiIgbgorICAgICIlJSBSZWNsaXN0ID0gW3JlY29yZCgpXSIgbgorICAgICIlJSBSZWFzb24gPSBhdG9tKCkiIG4KKyAgICAiJSUgPC9wcmU+IiBuCisgICAgIiUlIiBuCisgICAgIiUlIEBzcGVjIGxvY2FsX2luaXQoKSAtPiB7b2ssIFJlY0xpc3R9IHwge2Vycm9yLCBSZWFzb259IiBuCisgICAgIiUlIEBlbmQiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImxvY2FsX2luaXQoKSAtPiIgbgorICAgICIgICAge29rLCBbXX0uIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFB1c2hlcyB0aGUgc2NoZW1hIGFuZCB0aGUgdGFibGUgZGVmaW5pdGlvbnMgdG8gdGhlIG5vZGUiIG4KKyAgICAiJSUgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSBub2RlLiIgbgorICAgICIlJSBOT1RFOiBEbyBub3QgaW5jbHVkZSB0aGUgc2NoZW1hIGluIHRoaXMgbGlzdC4iIG4KKyAgICAiJSUiIG4KKyAgICAiJSUgPHByZT4iIG4KKyAgICAiJSUgVHlwZXMgIiBuCisgICAgIiUlICBOb2RlID0gbm9kZSgpIiBuCisgICAgIiUlICBUYWJsZUxpc3QgPSBbe1RhYmxlLCBUeXBlfV0iIG4KKyAgICAiJSUgICBUYWJsZSA9IGF0b20oKSIgbgorICAgICIlJSAgIFR5cGUgPSByYW1fY29waWVzLCBkaXNjX2NvcGllcyIgbgorICAgICIlJSAgUmVhc29uID0gYXRvbSgpIiBuCisgICAgIiUlIDwvcHJlPiIgbgorICAgICIlJSIgbgorICAgICIlJSBAc3BlYyByZW1vdGVfaW5pdCgpIC0+IHtvaywgVGFibGVMaXN0fSB8IHtlcnJvciwgUmVhc29ufSIgbgorICAgICIlJSBAZW5kIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJyZW1vdGVfaW5pdCgpIC0+IiBuCisgICAgIiAgICB7b2ssIFt7aW5pLCByYW1fY29waWVzfV19LiIgbgorICAgIG4KKyAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBmc19kYl9pbml0IGJlaGF2aW91ci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtc3VwZXJ2aXNvcgorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiLWJlaGF2aW91cihzdXBlcnZpc29yKS4iIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJIiUlIEluY2x1ZGUgZmlsZXMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbj4gInN0YXJ0X2xpbmsvMSIgbgorCSIgICAgICAgIF0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJpbml0LzEiIG4KKwkiICAgICAgICBdKS4iIG4KKwluIAorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgTWFjcm9zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgc3VwZXJ2aXNvci4iIG4KKyAgICAiJSUgQHNwZWMgc3RhcnRfbGluayhTdGFydEFyZ3MpIC0+IHtvaywgcGlkKCl9IHwgRXJyb3IiIG4KKyAgICAiJSUgQGVuZCIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhcnRfbGluayhTdGFydEFyZ3MpIC0+IiBuPgorICAgICJzdXBlcnZpc29yOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10pLiIgbiAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBpbml0LzEiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCAge1N1cEZsYWdzLCAgW0NoaWxkU3BlY119fSB8IiBuCisgICAgIiUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7ZXJyb3IsIFJlYXNvbn0gICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJSZXN0YXJ0U3RyYXRlZ3kgICAgPSBvbmVfZm9yX29uZSwiIG4+CisgICAgIk1heFJlc3RhcnRzICAgICAgICA9IDEwMDAsIiBuPgorICAgICJNYXhUaW1lQmV0UmVzdGFydHMgPSAzNjAwLCIgbj4KKyAgICBuPgorICAgICJTdXBGbGFncyA9IHtSZXN0YXJ0U3RyYXRlZ3ksIE1heFJlc3RhcnRzLCBNYXhUaW1lQmV0UmVzdGFydHN9LCIgbj4KKyAgICBuPgorICAgICJDaGlsZFNwZWNzID0iIG4+CisgICAgIlsiIG4+CisgICAgIntBcHBOYW1lLCIgbj4KKyAgICAie0FwcE5hbWUsIHN0YXJ0X2xpbmssIFtdfSwiIG4+CisgICAgInBlcm1hbmVudCwiIG4+CisgICAgIjEwMDAsIiBuPgorICAgICJ3b3JrZXIsIiBuPgorICAgICJbQXBwTmFtZV19IiBuPgorICAgICJdLCIgbj4KKyAgICAie29rLHtTdXBGbGFncywgQ2hpbGRTcGVjc319LiIgbgorCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGFuIHN1cGVydmlzb3IgYmVoYXZpb3VyLgorUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYHRlbXBvLWRlZmluZS10ZW1wbGF0ZScuIikKKworKGRlZnZhciBlcmxhbmctc2tlbC1zdXBlcnZpc29yLWJyaWRnZQorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiLWJlaGF2aW91cihzdXBlcnZpc29yX2JyaWRnZSkuIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJzdGFydF9saW5rLzAiIG4KKwkiICAgICAgICBdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuPiAiaW5pdC8xLCAiIG4+ICJ0ZXJtaW5hdGUvMiIgbgorCSIgICAgICAgIF0pLiIgbgorCW4gCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorCSItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1yZWNvcmQoc3RhdGUsIHt9KS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBzdGFydF9saW5rLzAiIG4KKyAgICAiJSUgRGVzY3JpcHRpb246IFN0YXJ0cyB0aGUgc3VwZXJ2aXNvciBicmlkZ2UiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisJInN1cGVydmlzb3JfYnJpZGdlOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10pLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBTZXJ2ZXIgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGluaXQvMSIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssICBQaWQsIFN0YXRlfSB8IiBuCisgICAgIiUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge2Vycm9yLCBSZWFzb259ICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaW5pdChbXSkgLT4iIG4+CisgICAgImNhc2UgJ0FNb2R1bGUnOnN0YXJ0X2xpbmsoKSBvZiIgbj4KKyAgICAie29rLCBQaWR9IC0+IiBuPgorICAgICJ7b2ssIFBpZCwgI3N0YXRle319OyIgbj4KKyAgICAiRXJyb3IgLT4iIG4+CisgICAgIkVycm9yIiBuPgorICAgICJlbmQuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogdGVybWluYXRlLzIiIG4KKyAgICAiJSUgUHVycG9zZTogU3luY2hyb25pemVkIHNodXRkb3duIG9mIHRoZSB1bmRlcmx5aW5nIHN1YiBzeXN0ZW0uIiBuCisgICAgIiUlIFJldHVybnM6IGFueSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IiBuPgorICAgICInQU1vZHVsZSc6c3RvcCgpLCIgbj4KKyAgICAib2suIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgKQorICAiKlRoZSB0ZW1wbGF0ZSBvZiBhbiBzdXBlcnZpc29yX2JyaWRnZSBiZWhhdmlvdXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWdlbmVyaWMtc2VydmVyCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKGdlbl9zZXJ2ZXIpLiIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgSW5jbHVkZSBmaWxlcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItZXhwb3J0KFsiIG4+InN0YXJ0X2xpbmsvMCwibj4ic3RvcC8wIm4+Il0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIGdlbl9zZXJ2ZXIgY2FsbGJhY2tzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItZXhwb3J0KFtpbml0LzEsIGhhbmRsZV9jYWxsLzMsIGhhbmRsZV9jYXN0LzIsICIKKyAgICAiaGFuZGxlX2luZm8vMiwgdGVybWluYXRlLzIsIGNvZGVfY2hhbmdlLzNdKS4iIG4gbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgcmVjb3JkIGRlZmluaXRpb25zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItcmVjb3JkKHN0YXRlLCB7fSkuIiBuIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIG1hY3JvIGRlZmluaXRpb25zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0YXJ0cyB0aGUgc2VydmVyLiIgbgorICAgICIlJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4KKyAgICAiJSUgQGVuZCJuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAic3RhcnRfbGluaygpIC0+IiBuPgorICAgICJnZW5fc2VydmVyOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10sIFtdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBAZG9jIFN0b3BzIHRoZSBzZXJ2ZXIuIiBuCisgICAgIiUlIEBzcGVjIHN0b3AoKSAtPiBvayIgbgorICAgICIlJSBAZW5kIm4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICJzdG9wKCkgLT4iIG4+CisgICAgImdlbl9zZXJ2ZXI6Y2FzdCg/U0VSVkVSLCBzdG9wKS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgU2VydmVyIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IGluaXQvMSIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogSW5pdGlhdGVzIHRoZSBzZXJ2ZXIiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7b2ssIFN0YXRlLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIGlnbm9yZSAgICAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbn0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJ7b2ssICNzdGF0ZXt9fS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jdGlvbjogaGFuZGxlX2NhbGwvMyIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgY2FsbCBtZXNzYWdlcyIgbgorICAgICIlJSBSZXR1cm5zOiB7cmVwbHksIFJlcGx5LCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9ICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgU3RhdGV9ICAgfCAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2NhbGwoUmVxdWVzdCwgRnJvbSwgU3RhdGUpIC0+IiBuPgorICAgICJSZXBseSA9IG9rLCIgbj4KKyAgICAie3JlcGx5LCBSZXBseSwgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FzdC8yIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBjYXN0IG1lc3NhZ2VzIiBuCisgICAgIiUlIFJldHVybnM6IHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9jYXN0KHN0b3AsIFN0YXRlKSAtPiIgbj4KKyAgICAie3N0b3AsIG5vcm1hbCwgU3RhdGV9OyIgbgorICAgICJoYW5kbGVfY2FzdChNc2csIFN0YXRlKSAtPiIgbj4KKyAgICAie25vcmVwbHksIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jdGlvbjogaGFuZGxlX2luZm8vMiIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgYWxsIG5vbiBjYWxsL2Nhc3QgbWVzc2FnZXMiIG4KKyAgICAiJSUgUmV0dXJuczoge25vcmVwbHksIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBTdGF0ZX0gICAgICAgICAgICAodGVybWluYXRlLzIgaXMgY2FsbGVkKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2luZm8oSW5mbywgU3RhdGUpIC0+IiBuPgorICAgICJ7bm9yZXBseSwgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiB0ZXJtaW5hdGUvMiIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogU2h1dGRvd24gdGhlIHNlcnZlciIgbgorICAgICIlJSBSZXR1cm5zOiBhbnkgKGlnbm9yZWQgYnkgZ2VuX3NlcnZlcikiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInRlcm1pbmF0ZShSZWFzb24sIFN0YXRlKSAtPiIgbj4KKyAgICAib2suIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogY29kZV9jaGFuZ2UvMyIgbgorICAgICIlJSBQdXJwb3NlOiBDb252ZXJ0IHByb2Nlc3Mgc3RhdGUgd2hlbiBjb2RlIGlzIGNoYW5nZWQiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBOZXdTdGF0ZX0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImNvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGUsIEV4dHJhKSAtPiIgbj4KKyAgICAie29rLCBTdGF0ZX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBnZW5lcmljIHNlcnZlci4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtZ2VuLWV2ZW50CisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorICAgICItYmVoYXZpb3VyKGdlbl9ldmVudCkuIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1leHBvcnQoW3N0YXJ0X2xpbmsvMCwgYWRkX2hhbmRsZXIvMF0pLiIgbgorICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIGdlbl9ldmVudCBjYWxsYmFja3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIi1leHBvcnQoW2luaXQvMSwgaGFuZGxlX2V2ZW50LzIsIGhhbmRsZV9jYWxsLzIsICIKKyAgICAiaGFuZGxlX2luZm8vMiwgdGVybWluYXRlLzIsIGNvZGVfY2hhbmdlLzNdKS4iIG4gbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgUmVjb3JkIERlZmluaXRpb25zIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICItcmVjb3JkKHN0YXRlLCB7fSkuIiBuIG4gCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBNYWNybyBEZWZpbml0aW9ucyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiLWRlZmluZShTRVJWRVIsID9NT0RVTEUpLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBTdGFydHMgdGhlIHNlcnZlciIgbgorICAgICIlJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBQaWR9IHwge2Vycm9yLCB7YWxyZWFkeV9zdGFydGVkLCBQaWR9fSIgbgorICAgICIlJSBAZW5kIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAic3RhcnRfbGluaygpIC0+IiBuPgorICAgICJnZW5fZXZlbnQ6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9KS4gIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyBBZGRzIGFuIGV2ZW50IGhhbmRsZXIiIG4KKyAgICAiJSUgQHNwZWMgYWRkX2hhbmRsZXIoKSAtPiBvayB8IHsnRVhJVCcsIFJlYXNvbn0iIG4KKyAgICAiJSUgQGVuZCIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgImFkZF9oYW5kbGVyKCkgLT4iIG4+CisgICAgImdlbl9ldmVudDphZGRfaGFuZGxlcig/U0VSVkVSLCA/TU9EVUxFLCBbXSkuIiBuIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBTZXJ2ZXIgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGluaXQvMSIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIE90aGVyIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KFtdKSAtPiIgbj4KKyAgICAie29rLCAjc3RhdGV7fX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaGFuZGxlX2V2ZW50LzIiIG4KKyAgICAiJSUgUmV0dXJuczoge29rLCBTdGF0ZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3N3YXBfaGFuZGxlciwgQXJnczEsIFN0YXRlMSwgTW9kMiwgQXJnczJ9IHwiIG4KKyAgICAiJSUgICAgICAgICAgcmVtb3ZlX2hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9ldmVudChFdmVudCwgU3RhdGUpIC0+IiBuPgorICAgICJ7b2ssIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBoYW5kbGVfY2FsbC8yIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgUmVwbHksIFN0YXRlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3dhcF9oYW5kbGVyLCBSZXBseSwgQXJnczEsIFN0YXRlMSwgTW9kMiwgQXJnczJ9IHwiIG4KKyAgICAiJSUgICAgICAgICAge3JlbW92ZV9oYW5kbGVyLCBSZXBseX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfY2FsbChSZXF1ZXN0LCBTdGF0ZSkgLT4iIG4+CisgICAgIlJlcGx5ID0gb2ssIiBuPgorICAgICJ7b2ssIFJlcGx5LCBTdGF0ZX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaGFuZGxlX2luZm8vMiIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIFN0YXRlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3dhcF9oYW5kbGVyLCBBcmdzMSwgU3RhdGUxLCBNb2QyLCBBcmdzMn0gfCIgbgorICAgICIlJSAgICAgICAgICByZW1vdmVfaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiaGFuZGxlX2luZm8oSW5mbywgU3RhdGUpIC0+IiBuPgorICAgICJ7b2ssIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiB0ZXJtaW5hdGUvMiIgbgorICAgICIlJSBQdXJwb3NlOiBTaHV0ZG93biB0aGUgc2VydmVyIiBuCisgICAgIiUlIFJldHVybnM6IGFueSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IiBuPgorICAgICJvay4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBjb2RlX2NoYW5nZS8zIiBuCisgICAgIiUlIFB1cnBvc2U6IENvbnZlcnQgcHJvY2VzcyBzdGF0ZSB3aGVuIGNvZGUgaXMgY2hhbmdlZCIgbgorICAgICIlJSBSZXR1cm5zOiB7b2ssIE5ld1N0YXRlfSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiY29kZV9jaGFuZ2UoT2xkVnNuLCBTdGF0ZSwgRXh0cmEpIC0+IiBuPgorICAgICJ7b2ssIFN0YXRlfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSUgSW50ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBnZW5fZXZlbnQuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisoZGVmdmFyIGVybGFuZy1za2VsLWdlbi1mc20KKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisgICAgIi1iZWhhdmlvdXIoZ2VuX2ZzbSkuIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKyAgICAiLWV4cG9ydChbc3RhcnRfbGluay8wXSkuIiBuCisgICAgbgorICAgICIlJSBnZW5fZnNtIGNhbGxiYWNrcyIgbgorICAgICItZXhwb3J0KFtpbml0LzEsIHN0YXRlX25hbWUvMiwgc3RhdGVfbmFtZS8zLCBoYW5kbGVfZXZlbnQvMywiIG4+CisgICAgImhhbmRsZV9zeW5jX2V2ZW50LzQsIGhhbmRsZV9pbmZvLzMsIHRlcm1pbmF0ZS8zLCBjb2RlX2NoYW5nZS80XSkuIiBuIG4KKyAgICAiLXJlY29yZChzdGF0ZSwge30pLiIgbiAKKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBzdGFydF9saW5rLzAiIG4KKyAgICAiJSUgRGVzY3JpcHRpb246IFN0YXJ0cyB0aGUgc2VydmVyIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAic3RhcnRfbGluaygpIC0+IiBuPgorICAgICJnZW5fZnNtOnN0YXJ0X2xpbmsoe2xvY2FsLCA/U0VSVkVSfSwgP01PRFVMRSwgW10sIFtdKS4iIG4gCisgICAgbgorICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisgICAgIiUlIFNlcnZlciBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogaW5pdC8xIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgU3RhdGVOYW1lLCBTdGF0ZURhdGF9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge29rLCBTdGF0ZU5hbWUsIFN0YXRlRGF0YSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICBpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBTdG9wUmVhc29ufSAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImluaXQoW10pIC0+IiBuPgorICAgICJ7b2ssIHN0YXRlX25hbWUsICNzdGF0ZXt9fS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBTdGF0ZU5hbWUvMiIgbgorICAgICIlJSBSZXR1cm5zOiB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YX0gICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAgICAgICIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAic3RhdGVfbmFtZShFdmVudCwgU3RhdGVEYXRhKSAtPiIgbj4KKyAgICAie25leHRfc3RhdGUsIHN0YXRlX25hbWUsIFN0YXRlRGF0YX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuYzogU3RhdGVOYW1lLzMiIG4KKyAgICAiJSUgUmV0dXJuczoge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7bmV4dF9zdGF0ZSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gICB8IiBuCisgICAgIiUlICAgICAgICAgIHtyZXBseSwgUmVwbHksIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge3JlcGx5LCBSZXBseSwgTmV4dFN0YXRlTmFtZSwgTmV4dFN0YXRlRGF0YSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFJlcGx5LCBOZXdTdGF0ZURhdGF9ICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgInN0YXRlX25hbWUoRXZlbnQsIEZyb20sIFN0YXRlRGF0YSkgLT4iIG4+CisgICAgIlJlcGx5ID0gb2ssIiBuPgorICAgICJ7cmVwbHksIFJlcGx5LCBzdGF0ZV9uYW1lLCBTdGF0ZURhdGF9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGhhbmRsZV9ldmVudC8zIiBuCisgICAgIiUlIFJldHVybnM6IHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhLCBUaW1lb3V0fSB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIE5ld1N0YXRlRGF0YX0gICAgICAgICAgICAgICAgICAgICAgICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfZXZlbnQoRXZlbnQsIFN0YXRlTmFtZSwgU3RhdGVEYXRhKSAtPiIgbj4KKyAgICAie25leHRfc3RhdGUsIFN0YXRlTmFtZSwgU3RhdGVEYXRhfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiBoYW5kbGVfc3luY19ldmVudC80IiBuCisgICAgIiUlIFJldHVybnM6IHtuZXh0X3N0YXRlLCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhfSAgICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGEsIFRpbWVvdXR9ICAgfCIgbgorICAgICIlJSAgICAgICAgICB7cmVwbHksIFJlcGx5LCBOZXh0U3RhdGVOYW1lLCBOZXh0U3RhdGVEYXRhfSAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtyZXBseSwgUmVwbHksIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGEsIFRpbWVvdXR9IHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgTmV3U3RhdGVEYXRhfSAgICAgICAgICAgICAgICAgICAgICAgICAgfCIgbgorICAgICIlJSAgICAgICAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgTmV3U3RhdGVEYXRhfSAgICAgICAgICAgICAgICAgICAgIiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJoYW5kbGVfc3luY19ldmVudChFdmVudCwgRnJvbSwgU3RhdGVOYW1lLCBTdGF0ZURhdGEpIC0+IiBuPgorICAgICJSZXBseSA9IG9rLCIgbj4KKyAgICAie3JlcGx5LCBSZXBseSwgU3RhdGVOYW1lLCBTdGF0ZURhdGF9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGhhbmRsZV9pbmZvLzMiIG4KKyAgICAiJSUgUmV0dXJuczoge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGF9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge25leHRfc3RhdGUsIE5leHRTdGF0ZU5hbWUsIE5leHRTdGF0ZURhdGEsIFRpbWVvdXR9IHwiIG4KKyAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgTmV3U3RhdGVEYXRhfSAgICAgICAgICAgICAgICAgICAgICAgICAiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImhhbmRsZV9pbmZvKEluZm8sIFN0YXRlTmFtZSwgU3RhdGVEYXRhKSAtPiIgbj4KKyAgICAie25leHRfc3RhdGUsIFN0YXRlTmFtZSwgU3RhdGVEYXRhfS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jOiB0ZXJtaW5hdGUvMyIgbgorICAgICIlJSBQdXJwb3NlOiBTaHV0ZG93biB0aGUgZnNtIiBuCisgICAgIiUlIFJldHVybnM6IGFueSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGVOYW1lLCBTdGF0RGF0YSkgLT4iIG4+CisgICAgIm9rLiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmM6IGNvZGVfY2hhbmdlLzQiIG4KKyAgICAiJSUgUHVycG9zZTogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgTmV3U3RhdGUsIE5ld1N0YXRlRGF0YX0iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgImNvZGVfY2hhbmdlKE9sZFZzbiwgU3RhdGVOYW1lLCBTdGF0ZURhdGEsIEV4dHJhKSAtPiIgbj4KKyAgICAie29rLCBTdGF0ZU5hbWUsIFN0YXRlRGF0YX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUlIEludGVybmFsIGZ1bmN0aW9ucyIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgZ2VuX2ZzbS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtbGliCisgICcoKGVybGFuZy1za2VsLWluY2x1ZGUgZXJsYW5nLXNrZWwtbGFyZ2UtaGVhZGVyKQorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwkiJSUgSW5jbHVkZSBmaWxlcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKwluCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuCisJIiAgICAgICAgXSkuIiBuCisgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgSW50ZXJuYWwgZXhwb3J0cyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1leHBvcnQoWyIgbgorCSIgICAgICAgIF0pLiIgbgorCW4gCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBNYWNyb3MiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIFJlY29yZHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBFeHRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgQGRvYyIgbgorICAgICIlJSBAc3BlYyAiIG4KKyAgICAiJSUgQGVuZCAiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBsaWJyYXJ5IG1vZHVsZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworKGRlZnZhciBlcmxhbmctc2tlbC1nZW5lcmljLWxlYWRlcgorICAnKChlcmxhbmctc2tlbC1pbmNsdWRlIGVybGFuZy1za2VsLWxhcmdlLWhlYWRlcikKKyAgICAiLWJlaGF2aW91cihmc19nZW5fbGVhZGVyKS4iIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEluY2x1ZGUgZmlsZXMiIG4KKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiLWV4cG9ydChbIiBuPiJzdGFydF9saW5rLzAsIm4+InN0b3AvMCJuPiJdKS4iIG4KKyAgICAgICAgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIGdlbl9sZWFkZXIgY2FsbGJhY2tzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiLWV4cG9ydChbaW5pdC8xLCIgbj4KKyAgICAgICAgImVsZWN0ZWQvMiwiIG4+CisgICAgICAgICJzdXJyZW5kZXJlZC8zLCIgbj4KKyAgICAgICAgImhhbmRsZV9ET1dOLzMsIiBuPgorICAgICAgICAiaGFuZGxlX2xlYWRlcl9jYWxsLzQsIiBuPgorICAgICAgICAiaGFuZGxlX2xlYWRlcl9jYXN0LzMsIiBuPgorICAgICAgICAiZnJvbV9sZWFkZXIvMywiIG4+CisgICAgICAgICJoYW5kbGVfY2FsbC8zLCIgbj4KKyAgICAgICAgImhhbmRsZV9jYXN0LzIsIiBuPgorICAgICAgICAiaGFuZGxlX2luZm8vMiwiIG4+CisgICAgICAgICJ0ZXJtaW5hdGUvMiwiIG4+CisgICAgICAgICJjb2RlX2NoYW5nZS80IiBuPgorICAgICAgICAiXSkuIiBuPgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSByZWNvcmQgZGVmaW5pdGlvbnMiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiLXJlY29yZChzdGF0ZSwge30pLiIgbiBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIG1hY3JvIGRlZmluaXRpb25zIiBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIi1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS4iIG4KKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgICAgIChlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yIDIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgQGRvYyBTdGFydHMgdGhlIGdlbl9sZWFkZXIuIiBuCisgICAgICAgICIlJSBAc3BlYyBzdGFydF9saW5rKCkgLT4ge29rLCBwaWQoKX0gfCB7ZXJyb3IsIFJlYXNvbn0iIG4KKyAgICAgICAgIiUlIEBlbmQibgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgICAgICJzdGFydF9saW5rKCkgLT4iIG4+CisgICAgICAgICJDYW5kaWRhdGVzID0gW25vZGUoKXxub2RlcygpXSwiIG4+CisgICAgICAgICJXb3JrZXJzICAgID0gW10sIiBuPgorICAgICAgICAiZ2VuX2xlYWRlcjpzdGFydF9saW5rKHtsb2NhbCwgP1NFUlZFUn0sIENhbmRpZGF0ZXMsIFdvcmtlcnMsID9NT0RVTEUsIFtdLCBbXSkuIiBuCisgICAgICAgIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBAZG9jIFN0b3BzIHRoZSBnZW5fbGVhZGVyLiIgbgorICAgICAgICAiJSUgQHNwZWMgc3RvcCgpIC0+IG9rIiBuCisgICAgICAgICIlJSBAZW5kIm4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAgICAgInN0b3AoKSAtPiIgbj4KKyAgICAgICAgImdlbl9sZWFkZXI6Y2FzdCg/U0VSVkVSLCBzdG9wKS4iIG4KKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgU2VydmVyIGZ1bmN0aW9ucyIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICAgICBuCisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRnVuY3Rpb246IGluaXQvMSIgbj4KKyAgICAgICAgIiUlIERlc2NyaXB0aW9uOiBJbml0aWF0ZXMgdGhlIHNlcnZlciIgbj4KKyAgICAgICAgIiUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgIHwiIG4+CisgICAgICAgICIlJSAgICAgICAgICB7b2ssIFN0YXRlLCBUaW1lb3V0fSB8IiBuPgorICAgICAgICAiJSUgICAgICAgICAgaWdub3JlICAgICAgICAgICAgICAgfCIgbj4KKyAgICAgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb259IiBuPgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImluaXQoW10pIC0+IiBuPgorICAgICAgICAie29rLCAjc3RhdGV7fX0uIiBuCisgICAgICAgIG4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIENhbGxlZCB3aGVuIHdlIGJlY29tZSB0aGUgbGVhZGVyLiIgbj4KKyAgICAgICAgIiUlIiBuPgorICAgICAgICAiJSUgZWxlY3RlZChTdGF0ZTo6c3RhdGUoKSwgRTo6ZWxlY3Rpb24oKSkgLT4ge29rLCBCcm9hZGNhc3QsIE5TdGF0ZX0iIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiZWxlY3RlZChTdGF0ZSwgRSkgLT4iIG4+CisgICAgICAgICJCcm9hZGNhc3RUb0FsbENhbmRpZGF0ZXMgPSBbXSwibj4KKyAgICAgICAgIntvaywgQnJvYWRjYXN0VG9BbGxDYW5kaWRhdGVzICwgU3RhdGV9LiIgbgorICAgICAgICBuCisKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBDYWxsZWQgYnkgZWFjaCBjYW5kaWRhdGUgd2hlbiBpdCByZWNvZ25pemVzIGFub3RoZXIgaW5zdGFuY2UgYXMgbGVhZGVyLiIgbj4KKyAgICAgICAgIiUlIFN0cmljdGx5IHNwZWFraW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBjYW5kaWRhdGUgIiBuPgorICAgICAgICAiJSUgYWNrbm93bGVkZ2VzIGEgbGVhZGVyIGFuZCByZWNlaXZlcyBhIFN5bmNoIG1lc3NhZ2UgaW4gcmV0dXJuLiIgbj4KKyAgICAgICAgIiUlIiBuPgorICAgICAgICAiJSUgc3VycmVuZGVyZWQoU3RhdGU6OnN0YXRlKCksIFN5bmNoOjpicm9hZGNhc3QoKSwgRTo6ZWxlY3Rpb24oKSkgLT4ge29rLCBOU3RhdGV9IiBuPgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgInN1cnJlbmRlcmVkKFN0YXRlLCBCQ2FzdEZyb21MZWFkZXJFbGVjdGVkQ2FsbCwgRSkgLT4iIG4+CisgICAgICAgICJ7b2ssIFN0YXRlI3N0YXRle2xlYWRlcl9ub2RlID0gTGVhZGVyTm9kZX19LiJuCisgICAgICAgIG4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIENhbGxlZCBieSB0aGUgbGVhZGVyIHdoZW4gaXQgZGV0ZWN0cyBsb3NzIG9mIGEgY2FuZGlkYXRlIG5vZGUuIiBuPgorICAgICAgICAiJSUgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBicm9hZGNhc3QoKSBvYmplY3QsIHRoaXMgd2lsbCIgbj4KKyAgICAgICAgIiUlIGJlIHNlbnQgdG8gYWxsIGNhbmRpZGF0ZXMsIGFuZCB0aGV5IHdpbGwgcmVjZWl2ZSBpdCBpbiB0aGUgZnVuY3Rpb24iIG4+CisgICAgICAgICIlJSBsaW5rIGZyb21fbGVhZGVyLzMuIGZyb21fbGVhZGVyLzMiIG4+CisgICAgICAgICIlJSIgbj4KKyAgICAgICAgIiUlIGhhbmRsZV9ET1dOKE5vZGU6Om5vZGUoKSwgU3RhdGU6OnN0YXRlKCksIEU6OmVsZWN0aW9uKCkpIC0+IHtvaywgTlN0YXRlfSB8IHtvaywgQnJvYWRjYXN0LCBOU3RhdGV9IiBuPgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImhhbmRsZV9ET1dOKE5vZGUsIFN0YXRlLCBfRSkgLT4iIG4+CisgICAgICAgICJ7b2ssIFN0YXRlfS4iIG4+CisKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSAgaGFuZGxlX2xlYWRlcl9jYWxsKE1zZzo6dGVybSgpLCBGcm9tOjpjYWxsZXJSZWYoKSwgU3RhdGU6OnN0YXRlKCksIEU6OmVsZWN0aW9uKCkpIC0+ICIgbj4KKyAgICAgICAgIiUlICAgIHtyZXBseSwgUmVwbHksIE5TdGF0ZX0gfCIgbj4KKyAgICAgICAgIiUlICAgIHtyZXBseSwgUmVwbHksIEJyb2FkY2FzdCwgTlN0YXRlfSB8IiBuPgorICAgICAgICAiJSUgICAge25vcmVwbHksIHN0YXRlKCl9IHwiIG4+CisgICAgICAgICIlJSAgICB7c3RvcCwgUmVhc29uLCBSZXBseSwgTlN0YXRlfSB8IiBuPgorICAgICAgICAiJSUgICAgY29tbW9uUmVwbHkoKSIgbj4KKyAgICAgICAgIiUlIiBuPgorICAgICAgICAiJSUgQ2FsbGVkIGJ5IHRoZSBsZWFkZXIgaW4gcmVzcG9uc2UgdG8gYSBnZW5fbGVhZGVyOmxlYWRlcl9jYWxsLzIuIGxlYWRlcl9jYWxsKCkuIiBuPgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImhhbmRsZV9sZWFkZXJfY2FsbChNc2csIF9Gcm9tLCBTdGF0ZSwgX0UpIC0+IiBuPgorICAgICAgICAie3JlcGx5LCBSZXBseSA9IFtdLCBTdGF0ZX0uIiBuCisgICAgICAgIG4KKworCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIENhbGxlZCBieSB0aGUgbGVhZGVyIGluIHJlc3BvbnNlIHRvIGEgZ2VuX2xlYWRlcjpsZWFkZXJfY2FzdC8yIGxlYWRlcl9jYXN0KCkiIG4+CisgICAgICAgICIlJSBoYW5kbGVfbGVhZGVyX2Nhc3QoTXNnOjp0ZXJtKCksIFN0YXRlOjp0ZXJtKCksIEU6OmVsZWN0aW9uKCkpIC0+IGNvbW1vblJlcGx5KCkiIG4+CisgICAgICAgICIlJSIgbj4KKyAgICAgICAgIiUlIEJVRzogVGhpcyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLiIgbj4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJoYW5kbGVfbGVhZGVyX2Nhc3QoX01zZywgU3RhdGUsIF9FKSAtPiIgbj4KKyAgICAgICAgIntvaywgU3RhdGV9LiIgbgorICAgICAgICBuCisKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBDYWxsZWQgYnkgZWFjaCBjYW5kaWRhdGUgaW4gcmVzcG9uc2UgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGxlYWRlci4gIiBuPgorICAgICAgICAiJSUgSW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgdGhlIGxlYWRlciBwYXNzZXMgYW4gdXBkYXRlIGZ1bmN0aW9uIHRvIGJlICIgbj4KKyAgICAgICAgIiUlIGFwcGxpZWQgdG8gdGhlIGNhbmRpZGF0ZSdzIHN0YXRlLiAiIG4+CisgICAgICAgICIlJSAiIG4+CisgICAgICAgICIlJSBmcm9tX2xlYWRlcihNc2c6OnRlcm0oKSwgU3RhdGU6OnN0YXRlKCksIEU6OmVsZWN0aW9uKCkpIC0+IHtvaywgTlN0YXRlfSAiIG4+CisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiZnJvbV9sZWFkZXIoTVNHLCBTdGF0ZSwgX0UpIC0+ICIgbj4KKyAgICAgICAgIntvaywgU3RhdGV9LiAiIG4KKyAgICAgICAgbgorCisgICAgICAgIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRnVuY3Rpb246IGhhbmRsZV9jYWxsLzMiIG4KKyAgICAgICAgIiUlIERlc2NyaXB0aW9uOiBIYW5kbGluZyBjYWxsIG1lc3NhZ2VzIiBuCisgICAgICAgICIlJSBSZXR1cm5zOiB7cmVwbHksIFJlcGx5LCBTdGF0ZX0gICAgICAgICAgfCIgbgorICAgICAgICAiJSUgICAgICAgICAge3JlcGx5LCBSZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZX0gICAgICAgICAgICAgICB8IiBuCisgICAgICAgICIlJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9ICAgICAgfCIgbgorICAgICAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgUmVwbHksIFN0YXRlfSAgIHwgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpIiBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImhhbmRsZV9jYWxsKFJlcXVlc3QsIEZyb20sIFN0YXRlKSAtPiIgbj4KKyAgICAgICAgIlJlcGx5ID0gb2ssIiBuPgorICAgICAgICAie3JlcGx5LCBSZXBseSwgU3RhdGV9LiIgbgorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlIEZ1bmN0aW9uOiBoYW5kbGVfY2FzdC8yIiBuCisgICAgICAgICIlJSBEZXNjcmlwdGlvbjogSGFuZGxpbmcgY2FzdCBtZXNzYWdlcyIgbgorICAgICAgICAiJSUgUmV0dXJuczoge25vcmVwbHksIFN0YXRlfSAgICAgICAgICB8IiBuCisgICAgICAgICIlJSAgICAgICAgICB7bm9yZXBseSwgU3RhdGUsIFRpbWVvdXR9IHwiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb24sIFN0YXRlfSAgICAgICAgICAgICh0ZXJtaW5hdGUvMiBpcyBjYWxsZWQpIiBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgImhhbmRsZV9jYXN0KHN0b3AsIFN0YXRlKSAtPiIgbj4KKyAgICAgICAgIntzdG9wLCBub3JtYWwsIFN0YXRlfTsiIG4KKyAgICAgICAgImhhbmRsZV9jYXN0KE1zZywgU3RhdGUpIC0+IiBuPgorICAgICAgICAie25vcmVwbHksIFN0YXRlfS4iIG4KKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBGdW5jdGlvbjogaGFuZGxlX2luZm8vMiIgbgorICAgICAgICAiJSUgRGVzY3JpcHRpb246IEhhbmRsaW5nIGFsbCBub24gY2FsbC9jYXN0IG1lc3NhZ2VzIiBuCisgICAgICAgICIlJSBSZXR1cm5zOiB7bm9yZXBseSwgU3RhdGV9ICAgICAgICAgIHwiIG4KKyAgICAgICAgIiUlICAgICAgICAgIHtub3JlcGx5LCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICAgICAiJSUgICAgICAgICAge3N0b3AsIFJlYXNvbiwgU3RhdGV9ICAgICAgICAgICAgKHRlcm1pbmF0ZS8yIGlzIGNhbGxlZCkiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiaGFuZGxlX2luZm8oSW5mbywgU3RhdGUpIC0+IiBuPgorICAgICAgICAie25vcmVwbHksIFN0YXRlfS4iIG4KKyAgICAgICAgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICIlJSBGdW5jdGlvbjogdGVybWluYXRlLzIiIG4KKyAgICAgICAgIiUlIERlc2NyaXB0aW9uOiBTaHV0ZG93biB0aGUgc2VydmVyIiBuCisgICAgICAgICIlJSBSZXR1cm5zOiBhbnkgKGlnbm9yZWQgYnkgZ2VuX3NlcnZlcikiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IiBuPgorICAgICAgICAib2suIiBuCisgICAgICAgIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICAiJSUgRnVuYzogY29kZV9jaGFuZ2UvMyIgbgorICAgICAgICAiJSUgUHVycG9zZTogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkIiBuCisgICAgICAgICIlJSBSZXR1cm5zOiB7b2ssIE5ld1N0YXRlfSIgbgorICAgICAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgICAgICJjb2RlX2NoYW5nZShPbGRWc24sIFN0YXRlLCBfRSwgX0V4dHJhKSAtPiIgbj4KKyAgICAgICAgIntvaywgU3RhdGV9LiIgbgorICAgICAgICBuCisgICAgICAgIAorICAgICAgICBuCisgICAgICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAgICAgIiUlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICAgICApCisgICIqVGhlIHRlbXBsYXRlIG9mIGEgZ2VuZXJpYyBsZWFkZXIuCitQbGVhc2Ugc2VlIHRoZSBmdW5jdGlvbiBgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJy4iKQorCisKKyhkZWZ2YXIgZXJsYW5nLXNrZWwtY29yYmEtY2FsbGJhY2sKKyAgJygoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1sYXJnZS1oZWFkZXIpCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCSIlJSBJbmNsdWRlIGZpbGVzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorCW4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEV4dGVybmFsIGV4cG9ydHMiIG4KKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpIAorICAgICItZXhwb3J0KFsiIG4+ICJpbml0LzEsICIgbj4gInRlcm1pbmF0ZS8yLCIgbj4gImNvZGVfY2hhbmdlLzMiIG4KKwkiICAgICAgICBdKS4iIG4KKyAgICBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBleHBvcnRzIiBuCisJKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKSAKKyAgICAiLWV4cG9ydChbIiBuCisJIiAgICAgICAgXSkuIiBuCisJbiAKKwkoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIE1hY3JvcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisJbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgUmVjb3JkcyIgbgorCShlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikgCisgICAgIi1yZWNvcmQoc3RhdGUsIHt9KS4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAiJSUgRXh0ZXJuYWwgZnVuY3Rpb25zIiBuCisgICAgKGVybGFuZy1za2VsLWRvdWJsZS1zZXBhcmF0b3IgMikKKyAgICAoZXJsYW5nLXNrZWwtc2VwYXJhdG9yIDIpCisgICAgIiUlIEZ1bmN0aW9uOiBpbml0LzEiIG4KKyAgICAiJSUgRGVzY3JpcHRpb246IEluaXRpYXRlcyB0aGUgc2VydmVyIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgU3RhdGV9ICAgICAgICAgIHwiIG4KKyAgICAiJSUgICAgICAgICAge29rLCBTdGF0ZSwgVGltZW91dH0gfCIgbgorICAgICIlJSAgICAgICAgICBpZ25vcmUgICAgICAgICAgICAgICB8IiBuCisgICAgIiUlICAgICAgICAgIHtzdG9wLCBSZWFzb259IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJpbml0KFtdKSAtPiIgbj4KKyAgICAie29rLCAjc3RhdGV7fX0uIiBuCisgICAgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAiJSUgRnVuY3Rpb246IHRlcm1pbmF0ZS8yIiBuCisgICAgIiUlIERlc2NyaXB0aW9uOiBTaHV0ZG93biB0aGUgc2VydmVyIiBuCisgICAgIiUlIFJldHVybnM6IGFueSAoaWdub3JlZCBieSBnZW5fc2VydmVyKSIgbgorICAgIChlcmxhbmctc2tlbC1zZXBhcmF0b3IgMikKKyAgICAidGVybWluYXRlKFJlYXNvbiwgU3RhdGUpIC0+IiBuPgorICAgICJvay4iIG4KKyAgICBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICIlJSBGdW5jdGlvbjogY29kZV9jaGFuZ2UvMyIgbgorICAgICIlJSBEZXNjcmlwdGlvbjogQ29udmVydCBwcm9jZXNzIHN0YXRlIHdoZW4gY29kZSBpcyBjaGFuZ2VkIiBuCisgICAgIiUlIFJldHVybnM6IHtvaywgTmV3U3RhdGV9IiBuCisgICAgKGVybGFuZy1za2VsLXNlcGFyYXRvciAyKQorICAgICJjb2RlX2NoYW5nZShPbGRWc24sIFN0YXRlLCBFeHRyYSkgLT4iIG4+CisgICAgIntvaywgU3RhdGV9LiIgbgorICAgIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICIlJSBJbnRlcm5hbCBmdW5jdGlvbnMiIG4KKyAgICAoZXJsYW5nLXNrZWwtZG91YmxlLXNlcGFyYXRvciAyKQorICAgICkKKyAgIipUaGUgdGVtcGxhdGUgb2YgYSBsaWJyYXJ5IG1vZHVsZS4KK1BsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uIGB0ZW1wby1kZWZpbmUtdGVtcGxhdGUnLiIpCisKKworDAorOzsgRm9udC1sb2NrIHZhcmlhYmxlcworCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2stbW9kZXJuLXAKKyAgKGNvbmQgKCg+PSBlcmxhbmctZW1hY3MtbWFqb3ItdmVyc2lvbiAyMCkgdCkKKwkoZXJsYW5nLXhlbWFjcy1wICg+PSBlcmxhbmctZW1hY3MtbWlub3ItdmVyc2lvbiAxNCkpCisJKCg9IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDE5KSAoPj0gZXJsYW5nLWVtYWNzLW1pbm9yLXZlcnNpb24gMjkpKQorCSh0IG5pbCkpCisgICJOb24tbmlsIHdoZW4gdGhpcyB2ZXJzaW9uIG9mIEVtYWNzIHVzZXMgYSBtb2Rlcm4gdmVyc2lvbiBvZiBGb250IExvY2suCisKK1RoaXMgaXMgZGV0ZXJtaW5hdGVkIGJ5IGNoZWNraW5nIHRoZSB2ZXJzaW9uIG9mIEVtYWNzIHVzZWQsIHRoZSBhY3R1YWwKK2ZvbnQtbG9jayBjb2RlIGlzIG5vdCBsb2FkZWQuIikKKworCis7OyBUaGUgbmV4dCBmZXcgdmFyaWFibGVzIGRlZmluZSBkaWZmZXJlbnQgRXJsYW5nIGZvbnQtbG9jayBwYXR0ZXJucy4KKzs7IFRoZXkgY291bGQgYmUgYXBwZW5kZWQgdG8gZm9ybSBhIGN1c3RvbSBmb250LWxvY2sgYXBwZWFyZW5jZS4KKzs7Cis7OyBUaGUgZnVuY3Rpb24gYGVybGFuZy1mb250LWxvY2stc2V0LWZhY2UnIGNvdWxkIGJlIHVzZWQgdG8gY2hhbmdlCis7OyB0aGUgZmFjZSBvZiBhIHBhdHRlcm4uCis7OworOzsgTm90ZSB0aGF0IEVybGFuZyBzdHJpbmdzIGFuZCBhdG9tcyBhcmUgaGlnaHRsaWdodGVkIHdpdGggdXNpbmcKKzs7IHN5bnRhY3RpeCBhbmFseXNpcy4KKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWZ1bmMKKyAgKGxpc3QKKyAgIChsaXN0IChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFxzICooIikKKwkgMSAnZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSB0KSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBhIGZ1bmN0aW9uIGhlYWRlci4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZG9sbGFyCisgIChsaXN0CisgICAobGlzdCAiXFwoXFwkXFwoW15cXF1cXHxcXFxcXFwoW14wLTdeXG5dXFx8WzAtN10rXFx8XFxeW2EtekEtWl1cXClcXClcXCkiCisJIDEgJ2ZvbnQtbG9jay1zdHJpbmctZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgbnVtYmVycyBpbiBhc2NpaS1mb3JtIChlLmcuICRBKS4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtYXJyb3cKKyAgKGxpc3QKKyAgIChsaXN0ICJcXCgtPlxcfDotXFwpXFwoXFxzIFxcfCRcXCkiIDIgJ2ZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIGNsYXVzZSBhcnJvdy4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtbGMKKyAgKGxpc3QKKyAgIChsaXN0ICJcXCg8LVxcKVxcKFxccyBcXHwkXFwpIiAxICdmb250LWxvY2sta2V5d29yZC1mYWNlKQorICAgKGxpc3QgIlxcKHx8XFwpXFwoXFxzIFxcfCRcXCkiIDEgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIGxpc3QgY29tcHJlaGVuc2lvbiBvcGVyYXRvcnMuIikKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWtleXdvcmRzCisgIChsaXN0CisgICAobGlzdCAoY29uY2F0ICJcXDxcXChhZnRlclxcfGJlZ2luXFx8Y1xcKGF0Y2hcXHxhc2VcXClcXHxlbmRcXHxmdW5cXHxpZiIKKwkJICJcXHxvZlxcfHJlY2VpdmVcXHx3aGVuXFx8cXVlcnlcXClcXChbXmEtekEtWjAtOV9dXFx8JFxcKSIpCisJIDEgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIEVybGFuZyBrZXl3b3Jkcy4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtYXR0cgorICAobGlzdAorICAgIChsaXN0IChjb25jYXQgIl5cXCgtIiBlcmxhbmctYXRvbS1yZWdleHAgIlxcKVxccyAqXFwoXFwuXFx8KFxcKSIpCisJICAxICdmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBhdHRyaWJ1ZXMuIikKKworKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLXF1b3RlcworICAobGlzdAorICAgIChsaXN0ICJgXFwoWy0rYS16QS1aMC05XzoqXVstK2EtekEtWjAtOV86Kl0rXFwpJyIKKwkgIDEKKwkgIChpZiBlcmxhbmctZm9udC1sb2NrLW1vZGVybi1wCisJICAgICAgJ2ZvbnQtbG9jay1yZWZlcmVuY2UtZmFjZQorCSAgICAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSkKKwkgIHQpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIHdvcmRzIGluIHNpbmdsZSBxdW90ZXMgaW4gY29tbWVudHMuCisKK1RoaXMgaXMgbm90IHRoZSBrZXl3b3JkIGhpZ2h0bGlnaHRpbmcgRXJsYW5nIHN0cmluZ3MgYW5kIGF0b21zLCB0aGV5CithcmUgaGlnaGxpZ2h0ZWQgYnkgc3ludGFjdGljIGFuYWx5c2lzLiIpCisKKzs7IE5vdGU6IFRoZSBndWFyZCBgZmxvYXQnIGNvbGxpZGVzIHdpdGggdGhlIGJpZiBgZmxvYXQnLgorKGRlZnZhciBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWd1YXJkcworICAobGlzdAorICAgKGxpc3QKKworICAgIDs7IFhYWDogCis7ICAgICAoY29uY2F0ICJcXDwiCis7IAkgICAgKHJlZ2V4cC1vcHQgJygiYXRvbSIgImJpbmFyeSIgImNvbnN0YW50IiAiZmxvYXQiICJpbnRlZ2VyIiAibGlzdCIgCis7IAkJCSAgIm51bWJlciIgInBpZCIgInBvcnQiICJyZWZlcmVuY2UiICJyZWNvcmQiICJ0dXBsZSIpIAorOyAJCQl0KQorOyAJICAgICJcXD4iKQorCisgICAgKGNvbmNhdCAiXFw8XFwoYXRvbVxcfGJpbmFyeVxcfGNvbnN0YW50XFx8ZmxvYXRcXHxpbnRlZ2VyXFx8bGlzdFxcfCIKKwkgICAgIm51bWJlclxcfHBcXChpZFxcfG9ydFxcKVxcfHJlXFwoZmVyZW5jZVxcfGNvcmRcXClcXHx0dXBsZSIKKwkgICAgIlxcKVxccyAqKCIpCisKKwkgMQorCSAoaWYgZXJsYW5nLWZvbnQtbG9jay1tb2Rlcm4tcAorCSAgICAgJ2ZvbnQtbG9jay1yZWZlcmVuY2UtZmFjZQorCSAgICdmb250LWxvY2sta2V5d29yZC1mYWNlKSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgZ3VhcmRzLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1iaWZzCisgIChsaXN0CisgICAgKGxpc3QKKyAgICAgKGNvbmNhdAorICAgICAgIlxcPFxcKCIKKyAgICAgICJhXFwoYnNcXHxsaXZlXFx8cHBseVxcfHRvbV90b19saXN0XFwpXFx8IgorICAgICAgImJpbmFyeV90b19cXChsaXN0XFx8dGVybVxcKVxcfCIKKyAgICAgICJjb25jYXRfYmluYXJ5XFx8ZFxcKGF0ZVxcfGlzY29ubmVjdF9ub2RlXFwpXFx8IgorICAgICAgImVcXChsZW1lbnRcXHxyYXNlXFx8eGl0XFwpXFx8IgorICAgICAgImZsb2F0XFwoXFx8X3RvX2xpc3RcXClcXHwiCisgICAgICAiZ1xcKGFyYmFnZV9jb2xsZWN0XFx8ZXRcXChcXHxfa2V5c1xcKVxcfHJvdXBfbGVhZGVyXFwpXFx8IgorICAgICAgImhcXChhbHRcXHxkXFwpXFx8IgorICAgICAgImlcXChudGVcXChnZXJfdG9fbGlzdFxcfHJuYWxfYmlmXFwpXFx8c19hbGl2ZVxcKVxcfCIKKyAgICAgICJsXFwoZW5ndGhcXHxpXFwobmtcXHxzdF90b19cXChhdG9tXFx8YmluYXJ5XFx8ZmxvYXRcXHxpbnRlZ2VyIgorICAgICAgIlxcfHBpZFxcfHR1cGxlXFwpXFwpXFwpXFx8IgorICAgICAgIm1ha2VfcmVmXFx8bm9cXChkZVxcKFxcfF9cXChsaW5rXFx8dW5saW5rXFwpXFx8c1xcKVxcfHRhbGl2ZVxcKVxcfCIKKyAgICAgICJvcGVuX3BvcnRcXHwiCisgICAgICAicFxcKGlkX3RvX2xpc3RcXHxyb2Nlc3NcXChfXFwoZmxhZ1xcfGluZm9cXClcXHxlc1xcKVxcfHV0XFwpXFx8IgorICAgICAgInJcXChlZ2lzdGVyXFwoXFx8ZWRcXClcXHxvdW5kXFwpXFx8IgorICAgICAgInNcXChlXFwobGZcXHx0ZWxlbWVudFxcKVxcfGl6ZVxcfCIKKyAgICAgICJwXFwoYXduXFwoXFx8X2xpbmtcXClcXHxsaXRfYmluYXJ5XFwpXFx8dGF0aXN0aWNzXFwpXFx8IgorICAgICAgInRcXChlcm1fdG9fYmluYXJ5XFx8aHJvd1xcfGltZVxcfGxcXHwiCisgICAgICAiclxcKGFjZVxcfHVuY1xcKVxcfHVwbGVfdG9fbGlzdFxcKVxcfCIKKyAgICAgICJ1blxcKGxpbmtcXHxyZWdpc3RlclxcKVxcfHdoZXJlaXMiCisgICAgICAiXFwpXFxzICooIikKKyAgICAgMQorICAgICAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCisgICJGb250IGxvY2sga2V5d29yZCBoaWdobGlnaHRpbmcgYnVpbHQgaW4gZnVuY3Rpb25zLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1tYWNyb3MKKyAgKGxpc3QKKyAgIChsaXN0IChjb25jYXQgIj9cXHMgKlxcKCIgZXJsYW5nLWF0b20tcmVnZXhwCisJCSAiXFx8IiBlcmxhbmctdmFyaWFibGUtcmVnZXhwICJcXClcXD4iKQorCSAxIChpZiBlcmxhbmctZm9udC1sb2NrLW1vZGVybi1wCisJICAgICAgICdmb250LWxvY2stcmVmZXJlbmNlLWZhY2UKKwkgICAgICdmb250LWxvY2stdHlwZS1mYWNlKSkKKyAgIChsaXN0IChjb25jYXQgIl4tXFwoZGVmaW5lXFx8aWZuP2RlZlxcKVxccyAqKFxccyAqXFwoIiBlcmxhbmctYXRvbS1yZWdleHAKKwkJICJcXHwiIGVybGFuZy12YXJpYWJsZS1yZWdleHAgIlxcKVxcPiIpCisJIDIgKGlmIGVybGFuZy1mb250LWxvY2stbW9kZXJuLXAKKwkgICAgICAgJ2ZvbnQtbG9jay1yZWZlcmVuY2UtZmFjZQorCSAgICAgJ2ZvbnQtbG9jay10eXBlLWZhY2UpKSkKKyAgIkZvbnQgbG9jayBrZXl3b3JkIGhpZ2hsaWdodGluZyBtYWNyb3MuCitUaGlzIG11c3QgYmUgcGxhY2VkIGluIGZyb250IG9mIGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLXZhcnMnLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1yZWNvcmRzCisgIChsaXN0CisgICAobGlzdCAoY29uY2F0ICIjXFxzICoiIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFw+IikKKwkgMSAnZm9udC1sb2NrLXR5cGUtZmFjZSkKKyAgIDs7IERvbid0IGhpZ2hsaWdodCBudW1lcmljYWwgY29uc3RhbnRzLgorICAgKGxpc3QgIlxcPFswLTldWzAtOV0/I1xcKFswLTlhLWZBX0ZdK1xcKVxcPiIKKwkgMSBuaWwgdCkKKyAgIChsaXN0IChjb25jYXQgIl4tcmVjb3JkKFxccyAqIiBlcmxhbmctYXRvbS1yZWdleHAgIlxcPiIpCisJIDEgJ2ZvbnQtbG9jay10eXBlLWZhY2UpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIEVybGFuZyByZWNvcmRzLgorVGhpcyBtdXN0IGJlIHBsYWNlZCBpbiBmcm9udCBvZiBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy12YXJzJy4iKQorCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtdmFycworICAobGlzdAorICAgIChsaXN0IChjb25jYXQgIlxcPCIgZXJsYW5nLXZhcmlhYmxlLXJlZ2V4cCAiXFw+IikKKwkgIDEgKGlmIGVybGFuZy1mb250LWxvY2stbW9kZXJuLXAKKwkJJ2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UKKwkgICAgICAnZm9udC1sb2NrLXR5cGUtZmFjZSkpKQorICAiRm9udCBsb2NrIGtleXdvcmQgaGlnaGxpZ2h0aW5nIEVybGFuZyB2YXJpYWJsZXMuCitNdXN0IGJlIHByZWNlZGVkIGJ5IGBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLW1hY3JvcycgYW5kIGAtcmVjb3JkcycKK3RvIHdvcmsgcHJvcGVybHkuIikKKworCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMQorICAoYXBwZW5kIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZnVuYworCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1kb2xsYXIKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtYXJyb3cKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMta2V5d29yZHMpCisgIDs7IERvY1N0cmluZ09yaWc6IGVybGFuZy1mb250LWxvY2sta2V5d29yZHMKKyAgIkZvbnQtbG9jayBrZXl3b3JkcyB1c2VkIGJ5IEVybGFuZyBNb2RlLgorCitUaGVyZSBleGlzdHMgdGhyZWUgbGV2ZWxzIG9mIEZvbnQgTG9jayBrZXl3b3JkcyBmb3IgRXJsYW5nOgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xJyAtIEZ1bmN0aW9uIGhlYWRlcnMgYW5kIHJlc2VydmVkIGtleXdvcmRzLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yJyAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdlbCBxdW90ZXMnLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zJyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyB1c2UgYSBzcGVjaWZpYyBsZXZlbCwgcGxlYXNlIHNldCB0aGUgdmFyaWFibGUKK2Bmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uJyB0byB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwuICBOb3RlIHRoYXQgdGhlCit2YXJpYWJsZSBtdXN0IGJlIHNldCBiZWZvcmUgRXJsYW5nIG1vZGUgaXMgYWN0aXZhdGVkLgorCitFeGFtcGxlOgorICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gMikiKQorCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yCisgIChhcHBlbmQgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWF0dHIKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtcXVvdGVzCisJICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWd1YXJkcworCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1iaWZzKQorICA7OyBEb2NTdHJpbmdDb3B5OiBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzCisgICJGb250LWxvY2sga2V5d29yZHMgdXNlZCBieSBFcmxhbmcgTW9kZS4KKworVGhlcmUgZXhpc3RzIHRocmVlIGxldmVscyBvZiBGb250IExvY2sga2V5d29yZHMgZm9yIEVybGFuZzoKKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMScgLSBGdW5jdGlvbiBoZWFkZXJzIGFuZCByZXNlcnZlZCBrZXl3b3Jkcy4KKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMicgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMycgLSBWYXJpYWJsZXMsIG1hY3JvcyBhbmQgcmVjb3Jkcy4KKworVG8gdXNlIGEgc3BlY2lmaWMgbGV2ZWwsIHBsZWFzZSBzZXQgdGhlIHZhcmlhYmxlCitgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbicgdG8gdGhlIGFwcHJvcHJpYXRlIGxldmVsLiAgTm90ZSB0aGF0IHRoZQordmFyaWFibGUgbXVzdCBiZSBzZXQgYmVmb3JlIEVybGFuZyBtb2RlIGlzIGFjdGl2YXRlZC4KKworRXhhbXBsZToKKyAgICAoc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIDIpIikKKworCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMworICAoYXBwZW5kIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMgorCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1tYWNyb3MKKwkgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtcmVjb3JkcworCSAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy12YXJzKQorICA7OyBEb2NTdHJpbmdDb3B5OiBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzCisgICJGb250LWxvY2sga2V5d29yZHMgdXNlZCBieSBFcmxhbmcgTW9kZS4KKworVGhlcmUgZXhpc3RzIHRocmVlIGxldmVscyBvZiBGb250IExvY2sga2V5d29yZHMgZm9yIEVybGFuZzoKKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMScgLSBGdW5jdGlvbiBoZWFkZXJzIGFuZCByZXNlcnZlZCBrZXl3b3Jkcy4KKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMicgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgYGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMycgLSBWYXJpYWJsZXMsIG1hY3JvcyBhbmQgcmVjb3Jkcy4KKworVG8gdXNlIGEgc3BlY2lmaWMgbGV2ZWwsIHBsZWFzZSBzZXQgdGhlIHZhcmlhYmxlCitgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbicgdG8gdGhlIGFwcHJvcHJpYXRlIGxldmVsLiAgTm90ZSB0aGF0IHRoZQordmFyaWFibGUgbXVzdCBiZSBzZXQgYmVmb3JlIEVybGFuZyBtb2RlIGlzIGFjdGl2YXRlZC4KKworRXhhbXBsZToKKyAgICAoc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIDIpIikKKworCisoZGVmdmFyIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zCisgIDs7IERvY1N0cmluZ0NvcHk6IGVybGFuZy1mb250LWxvY2sta2V5d29yZHMKKyAgIkZvbnQtbG9jayBrZXl3b3JkcyB1c2VkIGJ5IEVybGFuZyBNb2RlLgorCitUaGVyZSBleGlzdHMgdGhyZWUgbGV2ZWxzIG9mIEZvbnQgTG9jayBrZXl3b3JkcyBmb3IgRXJsYW5nOgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xJyAtIEZ1bmN0aW9uIGhlYWRlcnMgYW5kIHJlc2VydmVkIGtleXdvcmRzLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yJyAtIEJpZnMsIGd1YXJkcyBhbmQgYHNpbmdsZSBxdW90ZXMnLgorICBgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zJyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyB1c2UgYSBzcGVjaWZpYyBsZXZlbCwgcGxlYXNlIHNldCB0aGUgdmFyaWFibGUKK2Bmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uJyB0byB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwuICBOb3RlIHRoYXQgdGhlCit2YXJpYWJsZSBtdXN0IGJlIHNldCBiZWZvcmUgRXJsYW5nIG1vZGUgaXMgYWN0aXZhdGVkLgorCitFeGFtcGxlOgorICAgIChzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRpb24gMikiKQorCisKKyhkZWZ2YXIgZXJsYW5nLWZvbnQtbG9jay1zeW50YXgtdGFibGUgbmlsCisgICJTeW50YXggdGFibGUgdXNlZCBieSBGb250IExvY2sgbW9kZS4KKworVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCB0aGUgc3RhbmRhcmQgRXJsYW5nIE1vZGUKK3N5bnRheCB0YWJsZSBpcyB0aGF0IGBfJyBpcyB0cmVhdGVkIGFzIHBhcnQgb2Ygd29yZHMgYnkKK3RoaXMgc3ludGF4IHRhYmxlLgorCitVbmZvcnR1YW50ZWx5LCBYRW1hY3MgaGFzbid0IGdvdCBzdXBwb3J0IGZvciBhIHNwZWNpYWwgRm9udAorTG9jayBzeW50YXggdGFibGUuICBUaGUgZWZmZWN0IGlzIHRoYXQgYGFwcGx5JyBpbiB0aGUgYXRvbQorYGZvb19hcHBseScgd2lsbCBiZSBoaWdobGlnaHRlZCBhcyBhIGJpZi4iKQorCisMCis7OzsgQXZvaWQgZXJyb3JzIHdoaWxlIGNvbXBpbGluZyB0aGlzIGZpbGUuCisKKzs7IGBldmFsLXdoZW4tY29tcGlsZScgaXMgbm90IGRlZmluZWQgaW4gRW1hY3MgMTguICBXZSBkZWZpbmUgaXQgYXMgYQorOzsgbm8tb3AuCisob3IgKGZib3VuZHAgJ2V2YWwtd2hlbi1jb21waWxlKQorICAgIChkZWZtYWNybyBldmFsLXdoZW4tY29tcGlsZSAoJnJlc3QgcmVzdCkgbmlsKSkKKworOzsgVGhlc2UgdW1tLi4uZnVuY3Rpb25zIGFyZSBuZXcgaW4gRW1hY3MgMjAuIEFuZCwgeWVzLCB1bnRpbCB2ZXJzaW9uCis7OyAxOS4yNyBFbWFjcyBiYWNrcXVvdGVzIHdlcmUgdGhpcyB1Z2x5LgorCisob3IgKGZib3VuZHAgJ3VubGVzcykKKyAgICAoZGVmbWFjcm8gdW5sZXNzIChjb25kaXRpb24gJnJlc3QgYm9keSkKKyAgICAgICIodW5sZXNzIENPTkRJVElPTiBCT0RZLi4uKTogSWYgQ09ORElUSU9OIGlzIGZhbHNlLCBkbyBCT0RZLCBlbHNlIHJldHVybiBuaWwuIgorICAgICAgKGAgKGlmICgsIGNvbmRpdGlvbikgCisJICAgICBuaWwgCisJICAgKCxAIGJvZHkpKSkpKQorCisob3IgKGZib3VuZHAgJ3doZW4pCisgICAgKGRlZm1hY3JvIHdoZW4gKGNvbmRpdGlvbiAmcmVzdCBib2R5KQorICAgICAgIih3aGVuIENPTkRJVElPTiBCT0RZLi4uKTogSWYgQ09ORElUSU9OIGlzIHRydWUsIGRvIEJPRFksIGVsc2UgcmV0dXJuIG5pbC4iCisgICAgICAoYCAoaWYgKCwgY29uZGl0aW9uKQorCSAgICAgKHByb2duICgsQCBib2R5KSkgCisJICAgbmlsKSkpKQorCisob3IgKGZib3VuZHAgJ2NoYXItYmVmb3JlKQorICAgIChkZWZtYWNybyBjaGFyLWJlZm9yZSAoJm9wdGlvbmFsIHBvcykKKyAgICAgICJSZXR1cm4gdGhlIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBidWZmZXIganVzdCBiZWZvcmUgUE9TLiIKKyAgICAgIChgIChjaGFyLWFmdGVyICgxLSAob3IgKCwgcG9zKSAocG9pbnQpKSkpKSkpCisJCQkgICAKKyhvciAoZmJvdW5kcCAncmVnZXhwLW9wdCkKKyAgICAoZGVmdW4gcmVnZXhwLW9wdCAoc3RyaW5ncyAmb3B0aW9uYWwgcGFyZW4pCisgICAgICAiUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhbnkgc3RyaW5nIGluCitTVFJJTkdTLiBJZiBQQVJFTiBpcyB0cnVlLCBpdCB3aWxsIGFsd2F5cyBlbmNsb3NlIHRoZSByZWd1bGFyCitleHByZXNzaW9uIGluIHBhcmVudGhlc2VzLiAKKworVW5saWtlIGl0cyBFbWFjcy0yMCBuYW1lc2FrZSwgaXQgd2lsbCBub3Qgb3B0aW1pemUgdGhlIGdlbmVyYXRlZAorZXhwcmVzc2lvbi4iCisgICAgICA7OyBUaGlzIHN0b3AtZ2FwIGRlZmluaXRpb24gaXMgdGFrZW4gZnJvbQorICAgICAgOzsgX0dOVV9FbWFjc19MaXNwX1JlZmVyZW5jZV9NYW51YWxfLCBlZCAyLjUsIGZvciBFbWFjcyAyMC4zLgorICAgICAgKGxldCAoKG9wZW4gKGlmIHBhcmVuICJcXCgiICIiKSkKKwkgICAgKGNsb3NlIChpZiBwYXJlbiAiXFwpIiAiIikpKQorCShjb25jYXQgb3BlbgorCQkobWFwY29uY2F0ICdyZWdleHAtcXVvdGUgc3RyaW5ncyAiXFx8IikKKwkJY2xvc2UpKSkpCisKKyhldmFsLXdoZW4tY29tcGlsZQorICAoaWYgKG9yIChmZWF0dXJlcCAnYnl0ZWNvbXApCisJICAoZmVhdHVyZXAgJ2J5dGUtY29tcGlsZSkpCisgICAgICAocHJvZ24KKwkoY29uZCAoKHN0cmluZy1tYXRjaCAiTHVjaWRcXHxYRW1hY3MiIGVtYWNzLXZlcnNpb24pCisJICAgICAgIChwdXQgJ2NvbW1lbnQtaW5kZW50LWhvb2sgJ2J5dGUtb2Jzb2xldGUtdmFyaWFibGUgbmlsKQorCSAgICAgICA7OyBEbyBub3Qgd2FybiBmb3IgdW51c2VkIHZhcmlhYmxlcworCSAgICAgICA7OyB3aGVuIGNvbXBpbGluZyB1bmRlciBYRW1hY3MuCisJICAgICAgIChzZXRxIGJ5dGUtY29tcGlsZS13YXJuaW5ncworCQkgICAgICcoZnJlZS12YXJzIHVucmVzb2x2ZWQgY2FsbGFyZ3MgcmVkZWZpbmUpKSkpCisJKHJlcXVpcmUgJ2NvbWludCkKKwkocmVxdWlyZSAnY29tcGlsZSkpKSkKKworDAorKGRlZnVuIGVybGFuZy12ZXJzaW9uICgpCisgICJSZXR1cm4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBFcmxhbmcgbW9kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChpbnRlcmFjdGl2ZS1wKQorICAgICAgKG1lc3NhZ2UgIkVybGFuZyBtb2RlIHZlcnNpb24gJXMsIHdyaXR0ZW4gYnkgQW5kZXJzIExpbmRncmVuIgorCSAgICAgICBlcmxhbmctdmVyc2lvbikpCisgIGVybGFuZy12ZXJzaW9uKQorCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZXJsYW5nLW1vZGUgKCkKKyAgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgRXJsYW5nIHNvdXJjZSBmaWxlcyBpbiBFbWFjcy4KK0l0IGtub3dzIGFib3V0IHN5bnRheCBhbmQgY29tbWVudCwgaXQgY2FuIGluZGVudCBjb2RlLCBpdCBpcyBjYXBhYmxlCitvZiBmb250aWZ5aW5nIHRoZSBzb3VyY2UgZmlsZSwgdGhlIFRBR1MgY29tbWFuZHMgYXJlIGF3YXJlIG9mIEVybGFuZworbW9kdWxlcywgYW5kIHRoZSBFcmxhbmcgbWFuIHBhZ2VzIGNhbiBiZSBhY2Nlc3NlZC4KKworU2hvdWxkIHRoaXMgbW9kdWxlLCBcImVybGFuZy5lbFwiLCBiZSBpbnN0YWxsZWQgcHJvcGVybHksIEVybGFuZyBtb2RlCitpcyBhY3RpdmF0ZWQgd2hlbmV2ZXIgYW4gRXJsYW5nIHNvdXJjZSBvciBoZWFkZXIgZmlsZSBpcyBsb2FkZWQgaW50bworRW1hY3MuICBUbyBpbmRpY2F0ZSB0aGlzLCB0aGUgbW9kZSBsaW5lIHNob3VsZCBjb250YWluIHRoZSB3b3JkCitcIkVybGFuZ1wiLgorCitUaGUgbWFpbiBmZWF0dXJlIG9mIEVybGFuZyBtb2RlIGlzIGluZGVudGF0aW9uLCBwcmVzcyBUQUIgYW5kIHRoZQorY3VycmVudCBsaW5lIHdpbGwgYmUgaW5kZW50ZWQgY29ycmVjdGx5LgorCitDb21tZW50cyBzdGFydGluZyB3aXRoIG9ubHkgb25lIGAlJyBhcmUgaW5kZW50ZWQgdG8gdGhlIGNvbHVtbiBzdG9yZWQKK2luIHRoZSB2YXJpYWJsZSBgY29tbWVudC1jb2x1bW4nLiAgQ29tbWVudHMgc3RhcnRpbmcgd2l0aCB0d28gYCUnOnMKK2FyZSBpbmRlbnRlZCB3aXRoIHRoZSBzYW1lIGluZGVudGF0aW9uIGFzIGNvZGUuICBDb21tZW50cyBzdGFydGluZword2l0aCBhdCBsZWFzdCB0aHJlZSBgJSc6cyBhcmUgaW5kZW50ZWQgdG8gdGhlIGZpcnN0IGNvbHVtbi4KKworSG93ZXZlciwgRXJsYW5nIG1vZGUgY29udGFpbnMgbXVjaCBtb3JlLCB0aGlzIGlzIGEgbGlzdCBvZiB0aGUgbW9zdAordXNlZnVsIGNvbW1hbmRzOgorICAgICBUQUIgICAgIC0gSW5kZW50IHRoZSBsaW5lLgorICAgICBDLWMgQy1xIC0gSW5kZW50IGN1cnJlbnQgZnVuY3Rpb24uCisgICAgIE0tOyAgICAgLSBDcmVhdGUgYSBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgIE0tcSAgICAgLSBGaWxsIGEgY29tbWVudCwgaS5lLiB3cmFwIGxpbmVzIHNvIHRoYXQgdGhleSAoaG9wZWZ1bGx5KQorCQkgd2lsbCBsb29rIGJldHRlci4KKyAgICAgTS1hICAgICAtIEdvdG8gdGhlIGJlZ2lubmluZyBvZiBhbiBFcmxhbmcgY2xhdXNlLgorICAgICBNLUMtYSAgIC0gRGl0dG8gZm9yIGZ1bmN0aW9uLgorICAgICBNLWUgICAgIC0gR290byB0aGUgZW5kIG9mIGFuIEVybGFuZyBjbGF1c2UuCisgICAgIE0tQy1lICAgLSBEaXR0byBmb3IgZnVuY3Rpb24uCisgICAgIE0taCAgICAgLSBNYXJrIGN1cnJlbnQgRXJsYW5nIGNsYXVzZS4KKyAgICAgTS1DLWggICAtIERpdHRvIGZvciBmdW5jdGlvbi4KKyAgICAgQy1jIEMteiAtIFN0YXJ0LCBvciBzd2l0Y2ggdG8sIGFuIGluZmVyaW9yIEVybGFuZyBzaGVsbC4KKyAgICAgQy1jIEMtayAtIENvbXBpbGUgY3VycmVudCBmaWxlLgorICAgICBDLXggYCAgIC0gTmV4dCBlcnJvci4KKyAgICAgLCAgICAgICAtIEVsZWN0cmljIGNvbW1hLgorICAgICA7ICAgICAgIC0gRWxlY3RyaWMgc2VtaWNvbG9uLgorCitFcmxhbmcgbW9kZSBjaGVjayB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhZ2FpbnN0IHRoZSBtb2R1bGUgbmFtZSB3aGVuCitzYXZpbmcsIHdoZW5ldmVyIGEgbWlzbWF0Y2ggb2NjdXJzIEVybGFuZyBtb2RlIG9mZmVycyB0byBtb2RpZnkgdGhlCitzb3VyY2UuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzJyBjb250cm9scyB0aGUgZWxlY3RyaWMKK2NvbW1hbmRzLiAgVG8gZGVhY3RpdmF0ZSBhbGwgb2YgdGhlbSwgc2V0IGl0IHRvIG5pbC4KKworVGhlcmUgZXhpc3RzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbW1hbmRzIGFuZCB2YXJpYWJsZXMgaW4gdGhlIEVybGFuZworbW9kdWxlLiAgUGxlYXNlIHByZXNzIGBNLXggYXByb3BvcyBSRVQgZXJsYW5nIFJFVCcgdG8gc2VlIGEgY29tcGxldGUKK2xpc3QuICBQcmVzcyBgQy1oIGYgbmFtZS1vZi1mdW5jdGlvbiBSRVQnIGFuZCBgQy1oIHYgbmFtZS1vZi12YXJpYWJsZQorUkVUJ3RvIHNlZSB0aGUgZnVsbCBkZXNjcmlwdGlvbiBvZiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcywKK3Jlc3BlY3RpdmVseS4KKworT24gZW50cnkgdG8gdGhpcyBtb2RlIHRoZSBjb250ZW50cyBvZiB0aGUgaG9vayBgZXJsYW5nLW1vZGUtaG9vaycgaXMKK2V4ZWN1dGVkLgorCitQbGVhc2Ugc2VlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgYGVybGFuZy5lbCcgZm9yIG1vcmUgaW5mb3JtYXRpb24KK2FuZCBleGFtcGxlcyBvZiBob29rcy4KKworT3RoZXIgY29tbWFuZHM6CitcXHtlcmxhbmctbW9kZS1tYXB9IgorICAoaW50ZXJhY3RpdmUpCisgIChraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpCisgIChzZXRxIG1ham9yLW1vZGUgJ2VybGFuZy1tb2RlKQorICAoc2V0cSBtb2RlLW5hbWUgIkVybGFuZyIpCisgIChlcmxhbmctc3ludGF4LXRhYmxlLWluaXQpCisgIChlcmxhbmcta2V5bWFwLWluaXQpCisgIChlcmxhbmctZWxlY3RyaWMtaW5pdCkKKyAgKGVybGFuZy1tZW51LWluaXQpCisgIChlcmxhbmctbW9kZS12YXJpYWJsZXMpCisgIChlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUtaW5pdCkKKyAgKGVybGFuZy1hZGQtY29tcGlsYXRpb24tYWxpc3QgZXJsYW5nLWVycm9yLXJlZ2V4cC1hbGlzdCkKKyAgKGVybGFuZy1tYW4taW5pdCkKKyAgKGVybGFuZy10YWdzLWluaXQpCisgIChlcmxhbmctZm9udC1sb2NrLWluaXQpCisgIChlcmxhbmctc2tlbC1pbml0KQorICAocnVuLWhvb2tzICdlcmxhbmctbW9kZS1ob29rKQorICAoaWYgKHplcm9wIChidWZmZXItc2l6ZSkpCisgICAgICAocnVuLWhvb2tzICdlcmxhbmctbmV3LWZpbGUtaG9vaykpKQorCisKKyhkZWZ1biBlcmxhbmctc3ludGF4LXRhYmxlLWluaXQgKCkKKyAgKGlmIChudWxsIGVybGFuZy1tb2RlLXN5bnRheC10YWJsZSkKKyAgICAobGV0ICgodGFibGUgKG1ha2Utc3ludGF4LXRhYmxlKSkpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XG4gIj4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wiICJcIiIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/IyAiLiIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/JCAiLyIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/JSAiPCIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/JiAiLiIgdGFibGUpCisgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCcgIlwiIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8qICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8rICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8tICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8vICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID86ICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID88ICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID89ICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8+ICIuIiB0YWJsZSkKKyAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cXCAiXFwiIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP18gIl8iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP3wgIi4iIHRhYmxlKQorICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP14gIi8iIHRhYmxlKQorCisgICAgICA7OyBQc2V1ZG8gYml0LXN5bnRheDogTGF0aW4xIGRvdWJsZSBhbmdsZSBxdW90ZXMgYXMgcGFyZW5zLgorICAgICAgOzsobW9kaWZ5LXN5bnRheC1lbnRyeSA/XDI1MyAiKD9cMjczIiB0YWJsZSkKKyAgICAgIDs7KG1vZGlmeS1zeW50YXgtZW50cnkgP1wyNzMgIik/XDI1MyIgdGFibGUpCisKKyAgICAgIChzZXRxIGVybGFuZy1tb2RlLXN5bnRheC10YWJsZSB0YWJsZSkpKQorCisgIChzZXQtc3ludGF4LXRhYmxlIGVybGFuZy1tb2RlLXN5bnRheC10YWJsZSkpCisKKworKGRlZnVuIGVybGFuZy1rZXltYXAtaW5pdCAoKQorICAoaWYgZXJsYW5nLW1vZGUtbWFwCisgICAgICBuaWwKKyAgICAoc2V0cSBlcmxhbmctbW9kZS1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpCisgICAgKGVybGFuZy1tb2RlLWNvbW1hbmRzIGVybGFuZy1tb2RlLW1hcCkpCisgICh1c2UtbG9jYWwtbWFwIGVybGFuZy1tb2RlLW1hcCkpCisKKworKGRlZnVuIGVybGFuZy1tb2RlLWNvbW1hbmRzIChtYXApCisgIChkZWZpbmUta2V5IG1hcCAiXHQiICAgICAgICAnZXJsYW5nLWluZGVudC1jb21tYW5kKQorICAoZGVmaW5lLWtleSBtYXAgIjsiCSAgICAgICdlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uKQorICAoZGVmaW5lLWtleSBtYXAgIiwiCSAgICAgICdlcmxhbmctZWxlY3RyaWMtY29tbWEpCisgIChkZWZpbmUta2V5IG1hcCAiPCIgICAgICAgICAnZXJsYW5nLWVsZWN0cmljLWx0KQorICAoZGVmaW5lLWtleSBtYXAgIj4iICAgICAgICAgJ2VybGFuZy1lbGVjdHJpYy1ndCkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1tIiAgICAgICdlcmxhbmctZWxlY3RyaWMtbmV3bGluZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcMTc3IiAgICAgICdiYWNrd2FyZC1kZWxldGUtY2hhci11bnRhYmlmeSkKKyAgKGRlZmluZS1rZXkgbWFwICJcTS1xIiAgICAgICdlcmxhbmctZmlsbC1wYXJhZ3JhcGgpCisgIChkZWZpbmUta2V5IG1hcCAiXE0tXEMtYSIgICAnZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbikKKyAgKGRlZmluZS1rZXkgbWFwICJcTS1cQy1lIiAgICdlcmxhbmctZW5kLW9mLWZ1bmN0aW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLWgiICAgJ2VybGFuZy1tYXJrLWZ1bmN0aW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxNLVx0IiAgICAgJ2VybGFuZy1jb21wbGV0ZS10YWcpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLVx0IiAndGVtcG8tY29tcGxldGUtdGFnKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcTS1hIiAgJ2VybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcTS1iIiAgJ3RlbXBvLWJhY2t3YXJkLW1hcmspCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLWUiICAnZXJsYW5nLWVuZC1vZi1jbGF1c2UpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xNLWYiICAndGVtcG8tZm9yd2FyZC1tYXJrKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcTS1oIiAgJ2VybGFuZy1tYXJrLWNsYXVzZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtYyIgICdjb21tZW50LXJlZ2lvbikKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtaiIgICdlcmxhbmctZ2VuZXJhdGUtbmV3LWNsYXVzZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtayIgICdlcmxhbmctY29tcGlsZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtbCIgICdlcmxhbmctY29tcGlsZS1kaXNwbGF5KQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1zIiAgJ2VybGFuZy1zaG93LXN5bnRhY3RpYy1pbmZvcm1hdGlvbikKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtcSIgICdlcmxhbmctaW5kZW50LWZ1bmN0aW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy11IiAgJ2VybGFuZy11bmNvbW1lbnQtcmVnaW9uKQorICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy15IiAgJ2VybGFuZy1jbG9uZS1hcmd1bWVudHMpCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLXoiICAnZXJsYW5nLXNoZWxsLWRpc3BsYXkpCisgIChkZWZpbmUta2V5IG1hcCAiXEMteGAiICAgICAnZXJsYW5nLW5leHQtZXJyb3IpKQorCisKKyhkZWZ1biBlcmxhbmctZWxlY3RyaWMtaW5pdCAoKQorICA7OyBTZXQgdXAgZWxlY3RyaWMgY2hhcmFjdGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGgKKyAgOzsgZGVsc2VsL3BlbmRpbmctZGVsIG1vZGUuIEFsc28sIHNldCB1cCB0ZXh0IHByb3BlcnRpZXMgZm9yIGJpdAorICA7OyBzeW50YXggaGFuZGxpbmcuCisgIChtYXBjYXIgIycobGFtYmRhIChjbWQpCisJICAgICAgKHB1dCBjbWQgJ2RlbGV0ZS1zZWxlY3Rpb24gdCkJO2ZvciBkZWxzZWwgKEVtYWNzKQorCSAgICAgIChwdXQgY21kICdwZW5kaW5nLWRlbGV0ZSB0KSkJO2ZvciBwZW5kaW5nLWRlbCAoWEVtYWNzKQorCSAgJyhlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uCisJICAgIGVybGFuZy1lbGVjdHJpYy1jb21tYQorCSAgICBlcmxhbmctZWxlY3RyaWMtZ3QpKQorCisgIChwdXQgJ2JpdHN5bnRheC1vcGVuLW91dGVyICdzeW50YXgtdGFibGUgJyg0IC4gPz4pKQorICAocHV0ICdiaXRzeW50YXgtb3Blbi1vdXRlciAncmVhci1ub25zdGlja3kgJyhjYXRlZ29yeSkpCisgIChwdXQgJ2JpdHN5bnRheC1vcGVuLWlubmVyICdyZWFyLW5vbnN0aWNreSAnKGNhdGVnb3J5KSkKKyAgKHB1dCAnYml0c3ludGF4LWNsb3NlLWlubmVyICdyZWFyLW5vbnN0aWNreSAnKGNhdGVnb3J5KSkKKyAgKHB1dCAnYml0c3ludGF4LWNsb3NlLW91dGVyICdzeW50YXgtdGFibGUgJyg1IC4gPzwpKQorICAocHV0ICdiaXRzeW50YXgtY2xvc2Utb3V0ZXIgJ3JlYXItbm9uc3RpY2t5ICcoY2F0ZWdvcnkpKQorICAoc2V0cSBwYXJzZS1zZXhwLWxvb2t1cC1wcm9wZXJ0aWVzICd0KSkKKworCisKKyhkZWZ1biBlcmxhbmctbW9kZS12YXJpYWJsZXMgKCkKKyAgKG9yIGVybGFuZy1tb2RlLWFiYnJldi10YWJsZQorICAgICAgKGRlZmluZS1hYmJyZXYtdGFibGUgJ2VybGFuZy1tb2RlLWFiYnJldi10YWJsZSAoKSkpCisgIChzZXRxIGxvY2FsLWFiYnJldi10YWJsZSBlcmxhbmctbW9kZS1hYmJyZXYtdGFibGUpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdwYXJhZ3JhcGgtc3RhcnQpCisgIChzZXRxIHBhcmFncmFwaC1zdGFydCAoY29uY2F0ICJeJFxcfCIgcGFnZS1kZWxpbWl0ZXIpKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyYWdyYXBoLXNlcGFyYXRlKQorICAoc2V0cSBwYXJhZ3JhcGgtc2VwYXJhdGUgcGFyYWdyYXBoLXN0YXJ0KQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAncGFyYWdyYXBoLWlnbm9yZS1maWxsLXByZWZpeCkKKyAgKHNldHEgcGFyYWdyYXBoLWlnbm9yZS1maWxsLXByZWZpeCB0KQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAncmVxdWlyZS1maW5hbC1uZXdsaW5lKQorICAoc2V0cSByZXF1aXJlLWZpbmFsLW5ld2xpbmUgdCkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2RlZnVuLXByb21wdC1yZWdleHApCisgIChzZXRxIGRlZnVuLXByb21wdC1yZWdleHAgZXJsYW5nLWRlZnVuLXByb21wdC1yZWdleHApCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21tZW50LXN0YXJ0KQorICAoc2V0cSBjb21tZW50LXN0YXJ0ICIlIikKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQtc2tpcCkKKyAgKHNldHEgY29tbWVudC1zdGFydC1za2lwICIlK1xccyAqIikKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtY29sdW1uKQorICAoc2V0cSBjb21tZW50LWNvbHVtbiA0OCkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2luZGVudC1saW5lLWZ1bmN0aW9uKQorICAoc2V0cSBpbmRlbnQtbGluZS1mdW5jdGlvbiAnZXJsYW5nLWluZGVudC1jb21tYW5kKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW5kZW50LXJlZ2lvbi1mdW5jdGlvbikKKyAgKHNldHEgaW5kZW50LXJlZ2lvbi1mdW5jdGlvbiAnZXJsYW5nLWluZGVudC1yZWdpb24pCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtaW5kZW50LWZ1bmN0aW9uKSAnZXJsYW5nLWNvbW1lbnQtaW5kZW50KQorICAoaWYgKDw9IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDE4KQorICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1pbmRlbnQtaG9vaykgJ2VybGFuZy1jb21tZW50LWluZGVudCkpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3BhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzKSB0KQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdkYWJicmV2LWNhc2UtZm9sZC1zZWFyY2gpIG5pbCkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW1lbnUtcHJldi1pbmRleC1wb3NpdGlvbi1mdW5jdGlvbikKKyAgICAgICAnZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbikKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW1lbnUtZXh0cmFjdC1pbmRleC1uYW1lLWZ1bmN0aW9uKQorICAgICAgICdlcmxhbmctZ2V0LWZ1bmN0aW9uLW5hbWUpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3RlbXBvLW1hdGNoLWZpbmRlcikKKyAgICAgICAiW14tYS16QS1aMC05X11cXChbLWEtekEtWjAtOV9dKlxcKVxcPSIpKQorCisKKzs7IENvbXBpbGF0aW9uLgorOzsKKzs7IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIHBhY2thZ2UgYGNvbXBpbGF0aW9uJywKKzs7IG1ha2luZyBpdCBwb3NzaWJsZSB0byBnbyB0byBlcnJvcnMgdXNpbmcgYGVybGFuZy1uZXh0LWVycm9yJy4KKzs7Cis7OyBUaGUgbm9ybWFsIGBjb21waWxlJyBjb21tYW5kIHdvcmtzIG9mY291cnNlLiAgRm9yIGJlc3QgcmVzdWx0LCBwbGVhc2UKKzs7IGV4ZWN1dGUgYG1ha2UnIHdpdGggdGhlIGAtdycgZmxhZy4KKzs7Cis7OyBQbGVhc2Ugc2VlIHRoZSB2YXJpYWJsZXMgbmFtZWQgYGNvbXBpbGluZy0uLicgYWJvdmUuCisKKyhkZWZ1biBlcmxhbmctYWRkLWNvbXBpbGF0aW9uLWFsaXN0IChhbGlzdCkKKyAgKHJlcXVpcmUgJ2NvbXBpbGUpCisgIChjb25kICgoYm91bmRwICdjb21waWxhdGlvbi1lcnJvci1yZWdleHAtYWxpc3QpIDsgRW1hY3MgMTkKKwkgKHdoaWxlIGFsaXN0CisJICAgKG9yIChhc3NvYyAoY2FyIChjYXIgYWxpc3QpKSBjb21waWxhdGlvbi1lcnJvci1yZWdleHAtYWxpc3QpCisJICAgICAgIChzZXRxIGNvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cC1hbGlzdAorCQkgICAgIChjb25zIChjYXIgYWxpc3QpIGNvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cC1hbGlzdCkpKQorCSAgIChzZXRxIGFsaXN0IChjZHIgYWxpc3QpKSkpCisJKChib3VuZHAgJ2NvbXBpbGF0aW9uLWVycm9yLXJlZ2V4cCkKKwkgOzsgRW1hY3MgMTgsICBPbmx5IG9uZSByZWdleHAgaXMgYWxsb3dlZC4KKwkgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KQorCQkgICdjb21waWxhdGlvbi1lcnJvci1yZWdleHAgKGNhciAoY2FyIGFsaXN0KSkpKSkpCisMCisoZGVmdW4gZXJsYW5nLWZvbnQtbG9jay1pbml0ICgpCisgICJJbml0aWFsaXplIEZvbnQgTG9jayBmb3IgRXJsYW5nIG1vZGUuIgorICAob3IgZXJsYW5nLWZvbnQtbG9jay1zeW50YXgtdGFibGUKKyAgICAgIChzZXRxIGVybGFuZy1mb250LWxvY2stc3ludGF4LXRhYmxlCisJICAgIChsZXQgKCh0YWJsZSAoY29weS1zeW50YXgtdGFibGUgZXJsYW5nLW1vZGUtc3ludGF4LXRhYmxlKSkpCisJICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP18gInciIHRhYmxlKQorCSAgICAgIHRhYmxlKSkpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1zeW50YXgtdGFibGUpCisgICAgICAgZXJsYW5nLWZvbnQtbG9jay1zeW50YXgtdGFibGUpCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1iZWdpbm5pbmctb2Ytc3ludGF4LWZ1bmN0aW9uKQorICAgICAgICdlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1rZXl3b3JkcykKKyAgKGxldCAoKGxldmVsIChjb25kICgoYm91bmRwICdmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uKQorCQkgICAgICAoc3ltYm9sLXZhbHVlICdmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uKSkKKwkJICAgICAoKGJvdW5kcCAnZm9udC1sb2NrLXVzZS1tYXhpbWFsLWRlY29yYXRpb24pCisJCSAgICAgIChzeW1ib2wtdmFsdWUgJ2ZvbnQtbG9jay11c2UtbWF4aW1hbC1kZWNvcmF0aW9uKSkKKwkJICAgICAodCBuaWwpKSkpCisgICAgKGlmIChjb25zcCBsZXZlbCkKKwkoc2V0cSBsZXZlbCAoY2RyLXNhZmUgKG9yIChhc3NxICdlcmxhbmctbW9kZSBsZXZlbCkKKwkJCQkgIChhc3NxIHQgbGV2ZWwpKSkpKQorICAgIDs7IGBsZXZlbCcgY2FuIGhlcmUgYmU6CisgICAgOzsgICAgICBBIG51bWJlciAtIFRoZSBmb250aWZpY2F0aW9uIGxldmVsCisgICAgOzsgICAgICBuaWwgICAgICAtIFVzZSB0aGUgZGVmYXVsdAorICAgIDs7ICAgICAgdCAgICAgICAgLSBVc2UgbWF4aW11bQorICAgIChjb25kICgoZXEgbGV2ZWwgbmlsKQorCSAgIChzZXQgJ2ZvbnQtbG9jay1rZXl3b3JkcyBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzKSkKKwkgICgoZXEgbGV2ZWwgMSkKKwkgICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xKSkKKwkgICgoZXEgbGV2ZWwgMikKKwkgICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yKSkKKwkgICh0CisJICAgKHNldCAnZm9udC1sb2NrLWtleXdvcmRzIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMykpKSkKKworICA7OyBNb2Rlcm4gZm9udC1sb2NrcyBjYW4gaGFuZGxlIHRoZSBhYm92ZSBtdWNoIG1vcmUgZWxlZ2FudDoKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9udC1sb2NrLWRlZmF1bHRzKQorICAgICAgICcoKGVybGFuZy1mb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xCisgICAgICAgICAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtMykKKwkgbmlsIG5pbCAoKD9fIC4gInciKSkgZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UKKwkgKGZvbnQtbG9jay1jb21tZW50LXN0YXJ0LXJlZ2V4cCAuICIlIikKKwkgKGZvbnQtbG9jay1tYXJrLWJsb2NrLWZ1bmN0aW9uIC4gZXJsYW5nLW1hcmstY2xhdXNlKSkpKQorCisKKworOzsgVXNlZnVsIHdoZW4gZGVmaW5pZyB5b3V0IG93biBrZXl3b3Jkcy4KKyhkZWZ1biBlcmxhbmctZm9udC1sb2NrLXNldC1mYWNlIChrcyAmcmVzdCBmYWNlcykKKyAgIlJlcGxhY2UgdGhlIGZhY2UgY29tcG9uZW50cyBpbiBhIGxpc3Qgb2Yga2V5d29yZHMuCisKK1RoZSBmaXJzdCBhcmd1bWVudCwgS1MsIGlzIGEgbGlzdCBvZiBrZXl3b3Jkcy4gIFRoZSByZXN0IG9mIHRoZQorYXJndW1lbnRzIGFyZSBleHByZXNzaW9ucyB0byByZXBsYWNlIHRoZSBmYWNlIGluZm9ybWF0aW9uIHdpdGguICBUaGUKK2ZpcnN0IGV4cHJlc3Npb24gcmVwbGFjZXMgdGhlIGZhY2Ugb2YgdGhlIGZpcnN0IGtleXdvcmQsIHRoZSBzZWNvbmQKK2V4cHJlc3Npb24gdGhlIHNlY29uZCBrZXl3b3JkIGV0Yy4KKworU2hvdWxkIGFuIGV4cHJlc3Npb24gYmUgbmlsLCB0aGUgZmFjZSBvZiB0aGUgY29ycmVzcG9uZGluZyBrZXl3b3JkIGlzCitub3QgY2hhbmdlZC4KKworU2hvdWxkIGZld2VyIGV4cHJlc3Npb25zIHRoYW4ga2V5d29yZHMgYmUgZ2l2ZW4sIHRoZSBsYXN0IGV4cHJlc3Npb24KK2lzIHVzZWQgZm9yIGFsbCByZW1haW5pbmcga2V5d29yZHMuCisKK05vcm1hbGx5LCB0aGUgZXhwcmVzc2lvbnMgYXJlIGp1c3QgYXRvbXMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZmFjZS4KK1RoZXkgY291bGQgaG93ZXZlciBiZSBtb3JlIGNvbXBsZXgsIHJldHVybmluZyBkaWZmZXJlbnQgZmFjZXMgaW4KK2RpZmZlcmVudCBzaXR1YXRpb25zLgorCitUaGlzIGZ1bmN0aW9uIGRvZXMgb25seSBoYW5kbGUga2V5d29yZHMgd2l0aCBlbGVtZW50cyBvbiB0aGUgZm9ybXM6CisgIChSRUdFWFAgTlVNQkVSIEZBQ0UpCisgIChSRUdFWFAgTlVNQkVSIEZBQ0UgT1ZFUldSSVRFKQorCitUaGlzIGNvdWxkIGJlIHVzZWQgd2hlbiBkZWZpbmluZyB5b3VyIG93biBzcGVjaWFsIGZvbnQtbG9jayBzZXR1cCwgZS5nOgorCitcKHNldHEgbXktZm9udC1sb2NrLWtleXdvcmRzCisgICAgICAoYXBwZW5kIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtZnVuYworICAgICAgICAgICAgICBlcmxhbmctZm9udC1sb2NrLWtleXdvcmRzLWRvbGxhcgorICAgICAgICAgICAgICAoZXJsYW5nLWZvbnQtbG9jay1zZXQtZmFjZQorICAgICAgICAgICAgICAgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy1tYWNyb3MgJ215LW5lb24tZ3JlZW4tZmFjZSkKKyAgICAgICAgICAgICAgKGVybGFuZy1mb250LWxvY2stc2V0LWZhY2UKKyAgICAgICAgICAgICAgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtbGMgJ215LWRlZXAtcmVkICdteS1saWdodC1yZWQpCisgICAgICAgICAgICAgIGVybGFuZy1mb250LWxvY2sta2V5d29yZHMtYXR0cikpCisKK0ZvciBhIG1vcmUgZWxhYm9yYXRlIGV4YW1wbGUsIHBsZWFzZSBzZWUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZQorYGVybGFuZy5lbCcuIgorICAobGV0ICgocmVzICcoKSkpCisgICAgKHdoaWxlIGtzCisgICAgICAobGV0KiAoKHJlZ2V4cCAoY2FyIChjYXIga3MpKSkKKwkgICAgIChudW1iZXIgKGNhciAoY2RyIChjYXIga3MpKSkpCisJICAgICAobmV3LWZhY2UgKGlmIChhbmQgZmFjZXMgKGNhciBmYWNlcykpCisJCQkgICAoY2FyIGZhY2VzKQorCQkJIChjYXIgKGNkciAoY2RyIChjYXIga3MpKSkpKSkKKwkgICAgIChvdmVyd3JpdGUgKGNhciAoY2RyIChjZHIgKGNkciAoY2FyIGtzKSkpKSkpCisJICAgICAobmV3LWtleXdvcmQgKGxpc3QgcmVnZXhwIG51bWJlciBuZXctZmFjZSkpKQorCShpZiBvdmVyd3JpdGUgKG5jb25jIG5ldy1rZXl3b3JkIChsaXN0IG92ZXJ3cml0ZSkpKQorCShzZXRxIHJlcyAoY29ucyBuZXcta2V5d29yZCByZXMpKQorCShzZXRxIGtzIChjZHIga3MpKQorCShpZiAoYW5kIGZhY2VzIChjZHIgZmFjZXMpKQorCSAgICAoc2V0cSBmYWNlcyAoY2RyIGZhY2VzKSkpKSkKKyAgICAobnJldmVyc2UgcmVzKSkpCisKKworKGRlZnVuIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMCAoKQorICA7OyBEb2NTdHJpbmdPcmlnOiBmb250LWNtZAorICAiRm9udGlmeSBjdXJyZW50IGJ1ZmZlci4gTGV2ZWwgcmFuZ2VzIGZyb20gMCAob2ZmKSB0byAzIChDaHJpc3RtYXMgVHJlZSkuCisKK1RoZSBmb2xsb3dpbmcgZm9udGlmaWNhdGlvbiBsZXZlbCBleGlzdHM6CisgIDAgLSBObyBmb250aWZpY2F0aW9uCisgIDEgLSBGdW5jdGlvbiBoZWFkZXJzLCByZXNlcnZlZCBrZXl3b3Jkcywgc3RyaW5ncyBhbmQgY29tbWVudHMuCisgIDIgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgMyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlIGZvbnQgbG9jayBtb2RlLCBwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmVzCitpbiB5b3VyIH4vLmVtYWNzIGZpbGU6CisKK1woZGVmdW4gbXktZXJsYW5nLW1vZGUtaG9vayAoKQorICAoY29uZCAod2luZG93LXN5c3RlbQorCSAoZm9udC1sb2NrLW1vZGUgMSkpKSkKK1woYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ215LWVybGFuZy1tb2RlLWhvb2spCitcKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiB0KSIKKyAgKGludGVyYWN0aXZlKQorICAoZm9udC1sb2NrLW1vZGUgMCkpCisKKworKGRlZnVuIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMSAoKQorICA7OyBEb2NTdHJpbmdDb3B5OiBmb250LWNtZAorICAiRm9udGlmeSBjdXJyZW50IGJ1ZmZlci4gTGV2ZWwgcmFuZ2VzIGZyb20gMCAob2ZmKSB0byAzIChDaHJpc3RtYXMgVHJlZSkuCisKK1RoZSBmb2xsb3dpbmcgZm9udGlmaWNhdGlvbiBsZXZlbCBleGlzdHM6CisgIDAgLSBObyBmb250aWZpY2F0aW9uCisgIDEgLSBGdW5jdGlvbiBoZWFkZXJzLCByZXNlcnZlZCBrZXl3b3Jkcywgc3RyaW5ncyBhbmQgY29tbWVudHMuCisgIDIgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgMyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlIGZvbnQgbG9jayBtb2RlLCBwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmVzCitpbiB5b3VyIH4vLmVtYWNzIGZpbGU6CisKK1woZGVmdW4gbXktZXJsYW5nLW1vZGUtaG9vayAoKQorICAoY29uZCAod2luZG93LXN5c3RlbQorCSAoZm9udC1sb2NrLW1vZGUgMSkpKSkKK1woYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ215LWVybGFuZy1tb2RlLWhvb2spCitcKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiB0KSIKKyAgKGludGVyYWN0aXZlKQorICAocmVxdWlyZSAnZm9udC1sb2NrKQorICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0xKQorICAoZm9udC1sb2NrLW1vZGUgMSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyKSkpCisKKworKGRlZnVuIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMiAoKQorICA7OyBEb2NTdHJpbmdDb3B5OiBmb250LWNtZAorICAiRm9udGlmeSBjdXJyZW50IGJ1ZmZlci4gTGV2ZWwgcmFuZ2VzIGZyb20gMCAob2ZmKSB0byAzIChDaHJpc3RtYXMgVHJlZSkuCisKK1RoZSBmb2xsb3dpbmcgZm9udGlmaWNhdGlvbiBsZXZlbCBleGlzdHM6CisgIDAgLSBObyBmb250aWZpY2F0aW9uCisgIDEgLSBGdW5jdGlvbiBoZWFkZXJzLCByZXNlcnZlZCBrZXl3b3Jkcywgc3RyaW5ncyBhbmQgY29tbWVudHMuCisgIDIgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgMyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlIGZvbnQgbG9jayBtb2RlLCBwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmVzCitpbiB5b3VyIH4vLmVtYWNzIGZpbGU6CisKK1woZGVmdW4gbXktZXJsYW5nLW1vZGUtaG9vayAoKQorICAoY29uZCAod2luZG93LXN5c3RlbQorCSAoZm9udC1sb2NrLW1vZGUgMSkpKSkKK1woYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ215LWVybGFuZy1tb2RlLWhvb2spCitcKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiB0KSIKKyAgKGludGVyYWN0aXZlKQorICAocmVxdWlyZSAnZm9udC1sb2NrKQorICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0yKQorICAoZm9udC1sb2NrLW1vZGUgMSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyKSkpCisKKworKGRlZnVuIGVybGFuZy1mb250LWxvY2stbGV2ZWwtMyAoKQorICA7OyBEb2NTdHJpbmdDb3B5OiBmb250LWNtZAorICAiRm9udGlmeSBjdXJyZW50IGJ1ZmZlci4gTGV2ZWwgcmFuZ2VzIGZyb20gMCAob2ZmKSB0byAzIChDaHJpc3RtYXMgVHJlZSkuCisKK1RoZSBmb2xsb3dpbmcgZm9udGlmaWNhdGlvbiBsZXZlbCBleGlzdHM6CisgIDAgLSBObyBmb250aWZpY2F0aW9uCisgIDEgLSBGdW5jdGlvbiBoZWFkZXJzLCByZXNlcnZlZCBrZXl3b3Jkcywgc3RyaW5ncyBhbmQgY29tbWVudHMuCisgIDIgLSBCaWZzLCBndWFyZHMgYW5kIGBzaW5nbGUgcXVvdGVzJy4KKyAgMyAtIFZhcmlhYmxlcywgbWFjcm9zIGFuZCByZWNvcmRzLgorCitUbyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlIGZvbnQgbG9jayBtb2RlLCBwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmVzCitpbiB5b3VyIH4vLmVtYWNzIGZpbGU6CisKK1woZGVmdW4gbXktZXJsYW5nLW1vZGUtaG9vayAoKQorICAoY29uZCAod2luZG93LXN5c3RlbQorCSAoZm9udC1sb2NrLW1vZGUgMSkpKSkKK1woYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ215LWVybGFuZy1tb2RlLWhvb2spCitcKHNldHEgZm9udC1sb2NrLW1heGltdW0tZGVjb3JhdGlvbiB0KSIKKyAgKGludGVyYWN0aXZlKQorICAocmVxdWlyZSAnZm9udC1sb2NrKQorICAoc2V0ICdmb250LWxvY2sta2V5d29yZHMgZXJsYW5nLWZvbnQtbG9jay1rZXl3b3Jkcy0zKQorICAoZm9udC1sb2NrLW1vZGUgMSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyKSkpCisKKwwKKyhkZWZ1biBlcmxhbmctbWVudS1pbml0ICgpCisgICJJbml0IG1lbnVzIGZvciBFcmxhbmcgbW9kZS4KKworVGhlIHZhcmlhYmxlIGBlcmxhbmctbWVudS1pdGVtcycgY29udGFpbiBhIGRlc2NyaXB0aW9uIG9mIHRoZSBFcmxhbmcKK21vZGUgbWVudS4gIE5vcm1hbGx5LCB0aGUgbGlzdCBjb250YWlucyBhdG9tcywgcmVwcmVzZW50aW5nIHZhcmlhYmxlcworYm91bmQgdG8gcGllY2VzIG9mIHRoZSBtZW51LgorCitQZXJzb25hbCBleHRlbnRpb25zIGNvdWxkIGJlIGFkZGVkIHRvIGBlcmxhbmctbWVudS1wZXJzb25hbC1pdGVtcycuCisKK1Nob3VsZCBhbnkgdmFyaWFibGUgZGVzY3JpYmluZyB0aGUgbWVudSBjb25maWd1cmF0aW9uLCB0aGlzIGZ1bmN0aW9uCitzaG91bGQgYmUgY2FsbGVkLiIKKyAgICAoZXJsYW5nLW1lbnUtaW5zdGFsbCAiRXJsYW5nIiBlcmxhbmctbWVudS1pdGVtcyBlcmxhbmctbW9kZS1tYXAgdCkpCisKKworKGRlZnVuIGVybGFuZy1tZW51LWluc3RhbGwgKG5hbWUgaXRlbXMga2V5bWFwICZvcHRpb25hbCBwb3B1cCkKKyAgIkluc3RhbGwgYSBtZW51IG9uIEVtYWNzIDE5IG9yIFhFbWFjcyBiYXNlZCBvbiBhbiBhYnN0cmFjdCBkZXNjcmlwdGlvbi4KKworTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgbWVudS4KKworSVRFTVMgaXMgYSBsaXN0LiBUaGUgZWxlbWVudHMgYXJlIGVpdGhlciBuaWwgcmVwcmVzZW50aW5nIGEgaG9yaXNvbnRhbAorbGluZSBvciBhIGxpc3Qgd2l0aCB0d28gb3IgdGhyZWUgZWxlbWVudHMuICBUaGUgZmlyc3QgaXMgdGhlIG5hbWUgb2YKK3RoZSBtZW51IGl0ZW0sIHRoZSBzZWNvbmQgdGhlIGZ1bmN0aW9uIHRvIGNhbGwsIG9yIGEgc3VibWVudSwgb24gdGhlCitzYW1lIHNhbWUgZm9ybSBhcyBJVEVNUy4gIFRoZSB0aGlyZCBvcHRpb25hbCBlbGVtZW50IGlzIGFuIGV4cHJlc3Npb24KK3doaWNoIGlzIGV2YWx1YXRlZCBldmVyeSB0aW1lIHRoZSBtZW51IGlzIGRpc3BsYXllZC4gIFNob3VsZCB0aGUKK2V4cHJlc3Npb24gZXZhbHVhdGUgdG8gbmlsIHRoZSBtZW51IGl0ZW0gaXMgZ2hvc3RlZC4KKworS0VZTUFQIGlzIHRoZSBrZXltYXAgdG8gYWRkIHRvIG1lbnUgdG8uICAoV2hlbiB1c2luZyBYRW1hY3MsIHRoZSBtZW51Cit3aWxsIG9ubHkgYmUgdmlzaWJsZSB3aGVuIHRoaXMgbWVueSBpcyB0aGUgZ2xvYmFsLCB0aGUgbG9jYWwsIG9yIGFuCithY3RpdmF0ZWQgbWlub3IgbW9kZSBrZXltYXAuKQorCitJZiBQT1BVUCBpcyBub24tbmlsLCB0aGUgbWVudSBpcyBib3VuZCB0byB0aGUgWEVtYWNzIGBtb2RlLXBvcHVwLW1lbnUnCit2YXJpYWJsZSwgaS5lLiBpdCB3aWxsIHBvcHVwIHdoZW4gcHJlc3NpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KKworUGxlYXNlIHNlZSB0aGUgdmFyaWFibGUgYGVybGFuZy1tZW51LWJhc2UtaXRlbXMnLiIKKyAgKGNvbmQgKGVybGFuZy14ZW1hY3MtcAorCSAobGV0ICgobWVudSAoZXJsYW5nLW1lbnUteGVtYWNzIG5hbWUgaXRlbXMga2V5bWFwKSkpCisJICAgOzsgV2UgYWRkIHRoZSBtZW51IHRvIHRoZSBnbG9iYWwgbWVudWJhci4KKwkgICA7OyhmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldC1idWZmZXItbWVudWJhcikKKwkgICA7OyAgICAgICAgIChzeW1ib2wtdmFsdWUgJ2N1cnJlbnQtbWVudWJhcikpCisJICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnYWRkLXN1Ym1lbnUpIG5pbCBtZW51KQorCSAgIChzZXRjZHIgZXJsYW5nLXhlbWFjcy1wb3B1cC1tZW51IChjZHIgbWVudSkpCisJICAgKGlmIChhbmQgcG9wdXAgKGJvdW5kcCAnbW9kZS1wb3B1cC1tZW51KSkKKwkgICAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KQorCQkJJ21vZGUtcG9wdXAtbWVudSBlcmxhbmcteGVtYWNzLXBvcHVwLW1lbnUpKSkpCisJKCg+PSBlcmxhbmctZW1hY3MtbWFqb3ItdmVyc2lvbiAxOSkKKwkgKGRlZmluZS1rZXkga2V5bWFwICh2ZWN0b3IgJ21lbnUtYmFyIChpbnRlcm4gbmFtZSkpCisJICAgKGVybGFuZy1tZW51LW1ha2Uta2V5bWFwIG5hbWUgaXRlbXMpKSkKKwkodCBuaWwpKSkKKworCisoZGVmdW4gZXJsYW5nLW1lbnUtbWFrZS1rZXltYXAgKG5hbWUgaXRlbXMpCisgICJCdWlsZCBhIG1lbnUgZm9yIEVtYWNzIDE5LiIKKyAgKGxldCAoKG1lbnVtYXAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnbWFrZS1zcGFyc2Uta2V5bWFwKQorCQkJICBuYW1lKSkKKwkoY291bnQgMCkKKwlpZCBkZWYgZmlyc3Qgc2Vjb25kIHRoaXJkKQorICAgIChzZXRxIGl0ZW1zIChyZXZlcnNlIGl0ZW1zKSkKKyAgICAod2hpbGUgaXRlbXMKKyAgICAgIDs7IFJlcGxhY2UgYW55IG9jY3VyZW5jZSBvZiBhdG9tcyBieSB0aGVpciB2YWx1ZS4KKyAgICAgICh3aGlsZSAoYW5kIGl0ZW1zIChhdG9tIChjYXIgaXRlbXMpKSAobm90IChudWxsIChjYXIgaXRlbXMpKSkpCisJKGlmIChhbmQgKGJvdW5kcCAoY2FyIGl0ZW1zKSkKKwkJIChsaXN0cCAoc3ltYm9sLXZhbHVlIChjYXIgaXRlbXMpKSkpCisJICAgIChzZXRxIGl0ZW1zIChhcHBlbmQgKHJldmVyc2UgKHN5bWJvbC12YWx1ZSAoY2FyIGl0ZW1zKSkpCisJCQkJKGNkciBpdGVtcykpKQorCSAgKHNldHEgaXRlbXMgKGNkciBpdGVtcykpKSkKKyAgICAgIChzZXRxIGZpcnN0IChjYXItc2FmZSAoY2FyIGl0ZW1zKSkpCisgICAgICAoc2V0cSBzZWNvbmQgKGNhci1zYWZlIChjZHItc2FmZSAoY2FyIGl0ZW1zKSkpKQorICAgICAgKHNldHEgdGhpcmQgKGNhci1zYWZlIChjZHItc2FmZSAoY2RyLXNhZmUgKGNhciBpdGVtcykpKSkpCisgICAgICAoY29uZCAoKG51bGwgZmlyc3QpCisJICAgICAoc2V0cSBjb3VudCAoKyBjb3VudCAxKSkKKwkgICAgIChzZXRxIGlkIChpbnRlcm4gKGZvcm1hdCAic2VwYXJhdG9yLSVkIiBjb3VudCkpKQorCSAgICAgKHNldHEgZGVmICcoIi0tIiAuIG5pbCkpKQorCSAgICAoKGFuZCAoY29uc3Agc2Vjb25kKSAoZXEgKGNhciBzZWNvbmQpICdsYW1iZGEpKQorCSAgICAgKHNldHEgY291bnQgKCsgY291bnQgMSkpCisJICAgICAoc2V0cSBpZCAoaW50ZXJuIChmb3JtYXQgImxhbWJkYS0lZCIgY291bnQpKSkKKwkgICAgIChzZXRxIGRlZiAoY29ucyBmaXJzdCBzZWNvbmQpKSkKKwkgICAgKChzeW1ib2xwIHNlY29uZCkKKwkgICAgIChzZXRxIGlkIHNlY29uZCkKKwkgICAgIChzZXRxIGRlZiAoY29ucyBmaXJzdCBzZWNvbmQpKSkKKwkgICAgKHQKKwkgICAgIChzZXRxIGNvdW50ICgrIGNvdW50IDEpKQorCSAgICAgKHNldHEgaWQgKGludGVybiAoZm9ybWF0ICJzdWJtZW51LSVkIiBjb3VudCkpKQorCSAgICAgKHNldHEgZGVmIChlcmxhbmctbWVudS1tYWtlLWtleW1hcCBmaXJzdCBzZWNvbmQpKSkpCisgICAgICAoZGVmaW5lLWtleSBtZW51bWFwICh2ZWN0b3IgaWQpIGRlZikKKyAgICAgIChpZiB0aGlyZAorCSAgKHB1dCBpZCAnbWVudS1lbmFibGUgdGhpcmQpKQorICAgICAgKHNldHEgaXRlbXMgKGNkciBpdGVtcykpKQorICAgIChjb25zIG5hbWUgbWVudW1hcCkpKQorCisKKyhkZWZ1biBlcmxhbmctbWVudS14ZW1hY3MgKG5hbWUgaXRlbXMgJm9wdGlvbmFsIGtleW1hcCkKKyAgIkJ1aWxkIGEgbWVudSBmb3IgWEVtYWNzLiIKKyAgKGxldCAoKHJlcyAnKCkpCisJZmlyc3Qgc2Vjb25kIHRoaXJkIGVudHJ5KQorICAgICh3aGlsZSBpdGVtcworICAgICAgOzsgUmVwbGFjZSBhbnkgb2NjdXJlbmNlIG9mIGF0b21zIGJ5IHRoZWlyIHZhbHVlLgorICAgICAgKHdoaWxlIChhbmQgaXRlbXMgKGF0b20gKGNhciBpdGVtcykpIChub3QgKG51bGwgKGNhciBpdGVtcykpKSkKKwkoaWYgKGFuZCAoYm91bmRwIChjYXIgaXRlbXMpKQorCQkgKGxpc3RwIChzeW1ib2wtdmFsdWUgKGNhciBpdGVtcykpKSkKKwkgICAgKHNldHEgaXRlbXMgKGFwcGVuZCAocmV2ZXJzZSAoc3ltYm9sLXZhbHVlIChjYXIgaXRlbXMpKSkKKwkJCQkoY2RyIGl0ZW1zKSkpCisJICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpKQorICAgICAgKHNldHEgZmlyc3QgKGNhci1zYWZlIChjYXIgaXRlbXMpKSkKKyAgICAgIChzZXRxIHNlY29uZCAoY2FyLXNhZmUgKGNkci1zYWZlIChjYXIgaXRlbXMpKSkpCisgICAgICAoc2V0cSB0aGlyZCAoY2FyLXNhZmUgKGNkci1zYWZlIChjZHItc2FmZSAoY2FyIGl0ZW1zKSkpKSkKKyAgICAgIChjb25kICgobnVsbCBmaXJzdCkKKwkgICAgIChzZXRxIHJlcyAoY29ucyAiLS0tLS0tIiByZXMpKSkKKwkgICAgKChzeW1ib2xwIHNlY29uZCkKKwkgICAgIChzZXRxIHJlcyAoY29ucyAodmVjdG9yIGZpcnN0IHNlY29uZCAob3IgdGhpcmQgdCkpIHJlcykpKQorCSAgICAoKGFuZCAoY29uc3Agc2Vjb25kKSAoZXEgKGNhciBzZWNvbmQpICdsYW1iZGEpKQorCSAgICAgKHNldHEgcmVzIChjb25zICh2ZWN0b3IgZmlyc3QgKGxpc3QgJ2NhbGwtaW50ZXJhY3RpdmVseSBzZWNvbmQpCisJCQkJICAgICAob3IgdGhpcmQgdCkpIHJlcykpKQorCSAgICAodAorCSAgICAgKHNldHEgcmVzIChjb25zIChjb25zIGZpcnN0CisJCQkJICAgKGNkciAoZXJsYW5nLW1lbnUteGVtYWNzCisJCQkJCSBmaXJzdCBzZWNvbmQpKSkKKwkJCSAgICAgcmVzKSkpKQorICAgICAgKHNldHEgaXRlbXMgKGNkciBpdGVtcykpKQorICAgIChzZXRxIHJlcyAocmV2ZXJzZSByZXMpKQorICAgIDs7IFdoZW4gYWRkaW5nIGEgbWVudSB0byBhIG1pbm9yLW1vZGUga2V5bWFwIHVuZGVyIEVtYWNzIDE5LAorICAgIDs7IGl0IGRpc2FwcGVhcnMgd2hlbiB0aGUgbW9kZSBpcyBkaXNhYmxlZC4gIFRoZSBleHByZXNzaW9uCisgICAgOzsgZ2VuZXJhdGVkIGJlbG93IGltaXRhdGVzIHRoaXMgYmVoYXZpb3VyLgorICAgIDs7IChUaGlzIGNvdWxkIGJlIGV4cHJlc3NlZCBtdWNoIGNsZWFyZXIgdXNpbmcgYmFja3F1b3RlcywKKyAgICA7OyBidXQgSSBkb24ndCB3YW50IHRvIHB1bGwgaW4gZXZlcnkgcGFja2FnZS4pCisgICAgKGlmIGtleW1hcAorCShsZXQgKChleHByIChsaXN0ICdvcgorCQkJICAobGlzdCAnZXEga2V5bWFwICdnbG9iYWwtbWFwKQorCQkJICAobGlzdCAnZXEga2V5bWFwIChsaXN0ICdjdXJyZW50LWxvY2FsLW1hcCkpCisJCQkgIChsaXN0ICdzeW1ib2wtdmFsdWUKKwkJCQkobGlzdCAnY2FyLXNhZmUKKwkJCQkgICAgICAobGlzdCAncmFzc3EKKwkJCQkJICAgIGtleW1hcAorCQkJCQkgICAgJ21pbm9yLW1vZGUtbWFwLWFsaXN0KSkpKSkpCisJICAoc2V0cSByZXMgKGNvbnMgJzppbmNsdWRlZCAoY29ucyBleHByIHJlcykpKSkpCisgICAgKGNvbnMgbmFtZSByZXMpKSkKKworCisoZGVmdW4gZXJsYW5nLW1lbnUtc3Vic3RpdHV0ZSAoaXRlbXMgYWxpc3QpCisgICJTdWJzdGl0dXRlIGZ1bmN0aW9ucyBpbiBtZW51IGRlc2NyaWJlZCBieSBJVEVNUy4KKworVGhlIG1lbnUgSVRFTVMgaXMgdXBkYXRlZCBkZXN0cnVjdGl2ZWx5LgorCitBTElTVCBpcyBsaXN0IG9mIHBhaXJzIHdoZXJlIHRoZSBjYXIgaXMgdGhlIG9sZCBmdW5jdGlvbiBhbmQgY2RyIHRoZSBuZXcuIgorICAobGV0IChmaXJzdCBzZWNvbmQgcGFpcikKKyAgICAod2hpbGUgaXRlbXMKKyAgICAgIChzZXRxIGZpcnN0IChjYXItc2FmZSAoY2FyIGl0ZW1zKSkpCisgICAgICAoc2V0cSBzZWNvbmQgKGNhci1zYWZlIChjZHItc2FmZSAoY2FyIGl0ZW1zKSkpKQorICAgICAgKGNvbmQgKChudWxsIGZpcnN0KSkKKwkgICAgKChzeW1ib2xwIHNlY29uZCkKKwkgICAgIChzZXRxIHBhaXIgKGFuZCBzZWNvbmQgKGFzc3Egc2Vjb25kIGFsaXN0KSkpCisJICAgICAoaWYgcGFpcgorCQkgKHNldGNhciAoY2RyIChjYXIgaXRlbXMpKSAoY2RyIHBhaXIpKSkpCisJICAgICgoYW5kIChjb25zcCBzZWNvbmQpIChlcSAoY2FyIHNlY29uZCkgJ2xhbWJkYSkpKQorCSAgICAodAorCSAgICAgKGVybGFuZy1tZW51LXN1YnN0aXR1dGUgc2Vjb25kIGFsaXN0KSkpCisgICAgICAoc2V0cSBpdGVtcyAoY2RyIGl0ZW1zKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLW1lbnUtYWRkLWFib3ZlIChlbnRyeSBhYm92ZSBpdGVtcykKKyAgIkFkZCBtZW51IEVOVFJZIGFib3ZlIG1lbnUgZW50cnkgQUJPVkUgaW4gbWVudSBJVEVNUy4KK0RvIG5vdGhpbmcgaWYgdGhlIGl0ZW1zIGFscmVhZHkgc2hvdWxkIGJlIGluIHRoZSBtZW51LgorU2hvdWxkIEFCT1ZFIG5vdCBiZSBpbiB0aGUgbGlzdCwgdGhlIGVudHJ5IGlzIGFkZGVkIGF0Cit0aGUgYm90dG9tIG9mIHRoZSBtZW51LgorCitUaGUgbmV3IG1lbnUgaXMgcmV0dXJuZWQuICBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gdGhhdCB0aGUgb3JpZ2luYWwKK21lbnUgaXMgbGVmdCB1bmNoYW5nZWQuCisKK1RoZSBlcXVhbGl0eSB0ZXN0IGlzIHBlcmZvcm1lZCBieSBgZXEnLgorCitFeGFtcGxlOiAgKGVybGFuZy1tZW51LWFkZC1hYm92ZSAnbXktZXJsYW5nLW1lbnUtaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcmxhbmctbWVudS1tYW4taXRlbXMpIgorICAoZXJsYW5nLW1lbnUtYWRkLWJlbG93IGVudHJ5IGFib3ZlIGl0ZW1zIHQpKQorCisKKyhkZWZ1biBlcmxhbmctbWVudS1hZGQtYmVsb3cgKGVudHJ5IGJlbG93IGl0ZW1zICZvcHRpb25hbCBhYm92ZS1wKQorICAiQWRkIG1lbnUgRU5UUlkgYmVsb3cgbWVudSBpdGVtcyBCRUxPVyBpbiB0aGUgRXJsYW5nIG1lbnUuCitEbyBub3RoaW5nIGlmIHRoZSBpdGVtcyBhbHJlYWR5IHNob3VsZCBiZSBpbiB0aGUgbWVudS4KK1Nob3VsZCBCRUxPVyBub3QgYmUgaW4gdGhlIGxpc3QsIGl0ZW1zIGlzIGFkZGVkIGF0IHRoZSBib3R0b20KK29mIHRoZSBtZW51LgorCitUaGUgbmV3IG1lbnUgaXMgcmV0dXJuZWQuICBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gdGhhdCB0aGUgb3JpZ2luYWwKK21lbnUgaXMgbGVmdCB1bmNoYW5nZWQuCisKK1RoZSBlcXVhbGl0eSB0ZXN0IGlzIHBlcmZvcm1lZCBieSBgZXEnLgorCitFeGFtcGxlOgorCitcKHNldHEgZXJsYW5nLW1lbnUtaXRlbXMKKyAgICAgIChlcmxhbmctbWVudS1hZGQtYmVsb3cgJ215LWVybGFuZy1tZW51LWl0ZW1zCisJIAkgICAgICAgICAgICAgJ2VybGFuZy1tZW51LWJhc2UtaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJsYW5nLW1lbnUtaXRlbXMpKSIKKyAgKGlmIChtZW1xIGVudHJ5IGl0ZW1zKQorICAgICAgaXRlbXMJCQkJOyBSZXR1cm4gdGhlIG9yaWdpbmFsIG1lbnUuCisgICAgKGxldCAoKGhlYWQgJygpKQorCSAgKGRvbmUgbmlsKQorCSAgcmVzKQorICAgICAgKHdoaWxlIChub3QgZG9uZSkKKwkoY29uZCAoKG51bGwgaXRlbXMpCisJICAgICAgIChzZXRxIHJlcyAoYXBwZW5kIGhlYWQgKGxpc3QgZW50cnkpKSkKKwkgICAgICAgKHNldHEgZG9uZSB0KSkKKwkgICAgICAoKGVxIGJlbG93IChjYXIgaXRlbXMpKQorCSAgICAgICAoc2V0cSByZXMKKwkJICAgICAoaWYgYWJvdmUtcAorCQkJIChhcHBlbmQgaGVhZCAoY29ucyBlbnRyeSBpdGVtcykpCisJCSAgICAgICAoYXBwZW5kIGhlYWQgKGNvbnMgKGNhciBpdGVtcykKKwkJCQkJICAoY29ucyBlbnRyeSAoY2RyIGl0ZW1zKSkpKSkpCisJICAgICAgIChzZXRxIGRvbmUgdCkpCisJICAgICAgKHQKKwkgICAgICAgKHNldHEgaGVhZCAoYXBwZW5kIGhlYWQgKGxpc3QgKGNhciBpdGVtcykpKSkKKwkgICAgICAgKHNldHEgaXRlbXMgKGNkciBpdGVtcykpKSkpCisgICAgICByZXMpKSkKKworKGRlZnVuIGVybGFuZy1tZW51LWRlbGV0ZSAoZW50cnkgaXRlbXMpCisgICJEZWxldGUgRU5UUlkgZnJvbSBtZW51IElURU1TLgorCitUaGUgbmV3IG1lbnUgaXMgcmV0dXJuZWQuICBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gdGhhdCB0aGUgb3JpZ2luYWwKK21lbnUgaXMgbGVmdCB1bmNoYW5nZWQuIgorICAoZGVscSBlbnRyeSBpdGVtcykpCisMCis7OyBNYW4gY29kZToKKworKGRlZnVuIGVybGFuZy1tYW4taW5pdCAoKQorICAiQWRkIG1lbnVzIGNvbnRhaW5pbmcgdGhlIG1hbnVhbCBwYWdlcyBvZiB0aGUgRXJsYW5nLgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1tYW4tZGlycycgY29udGFpbnMgZW50cmllcyBkZXNjcmliaW5nCit0aGUgbG9jYXRpb24gb2YgdGhlIG1hbnVhbCBwYWdlcy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIGVybGFuZy1tYW4taW5oaWJpdAorICAgICAgKCkKKyAgICAoc2V0cSBlcmxhbmctbWVudS1tYW4taXRlbXMKKwkgICcobmlsCisJICAgICgiTWFuIC0gRnVuY3Rpb24iIGVybGFuZy1tYW4tZnVuY3Rpb24pKSkKKyAgICAoaWYgZXJsYW5nLW1hbi1kaXJzCisJKHNldHEgZXJsYW5nLW1lbnUtbWFuLWl0ZW1zCisJICAgICAgKGFwcGVuZCBlcmxhbmctbWVudS1tYW4taXRlbXMKKwkJICAgICAgKGVybGFuZy1tYW4tbWFrZS10b3AtbWVudSBlcmxhbmctbWFuLWRpcnMpKSkpCisgICAgKHNldHEgZXJsYW5nLW1lbnUtaXRlbXMKKwkgIChlcmxhbmctbWVudS1hZGQtYWJvdmUgJ2VybGFuZy1tZW51LW1hbi1pdGVtcworCQkJCSAnZXJsYW5nLW1lbnUtdmVyc2lvbi1pdGVtcworCQkJCSBlcmxhbmctbWVudS1pdGVtcykpCisgICAgKGVybGFuZy1tZW51LWluaXQpKSkKKworCisoZGVmdW4gZXJsYW5nLW1hbi11bmluc3RhbGwgKCkKKyAgIlJlbW92ZSB0aGUgbWFuIHBhZ2VzIGZyb20gdGhlIEVybGFuZyBtb2RlLiIKKyAgKGludGVyYWN0aXZlKQorICAoc2V0cSBlcmxhbmctbWVudS1pdGVtcworCShlcmxhbmctbWVudS1kZWxldGUgJ2VybGFuZy1tZW51LW1hbi1pdGVtcyBlcmxhbmctbWVudS1pdGVtcykpCisgIChlcmxhbmctbWVudS1pbml0KSkKKworCis7OyBUaGUgbWFuIG1lbnUgaXMgYSBoaWVyYXJjaGFsIHN0cnVjdHVyZSwgd2l0aCB0aGUgbWFudWFsIHNlY3Rpb25zCis7OyBhdCB0aGUgdG9wLCBkZXNjcmliZWQgYnkgYGVybGFuZy1tYW4tZGlycycuICBUaGUgbmV4dCBsZXZlbCBjb3VsZAorOzsgZWl0aGVyIGJlIHRoZSBtYW51YWwgcGFnZXMgaWYgbm90IHRvIG1hbnksIG90aGVyd2lzZSBpdCBpcyBhbiBpbmRleAorOzsgbWVudSB3aG9zZSBzdWJtZW51cyB3aWxsIGNvbnRhaW4gdXAgdG8gYGVybGFuZy1tYW4tbWF4LW1lbnUtc2l6ZScKKzs7IG1hbnVhbCBwYWdlcy4KKworKGRlZnVuIGVybGFuZy1tYW4tbWFrZS10b3AtbWVudSAoZGlyLWxpc3QpCisgICJDcmVhdGUgb25lIG1lbnUgZW50cnkgcGVyIGVsZW1lbnQgb2YgRElSLUxJU1QuCitUaGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgZXJsYW5nLW1hbi1kaXJzJy4iCisgIChsZXQgKChtZW51ICcoKSkKKwlkaXIpCisgICAgKHdoaWxlIGRpci1saXN0CisgICAgICAoc2V0cSBkaXIgKGNvbmQgKChudGggMiAoY2FyIGRpci1saXN0KSkKKwkJICAgICAgIDs7IFJlbGF0aXZlIHRvIGBlcmxhbmctcm9vdC1kaXInLgorCQkgICAgICAgKGFuZCAoc3RyaW5ncCBlcmxhbmctcm9vdC1kaXIpCisJCQkgICAgKGNvbmNhdCBlcmxhbmctcm9vdC1kaXIgKG50aCAxIChjYXIgZGlyLWxpc3QpKSkpKQorCQkgICAgICAodAorCQkgICAgICAgOzsgQWJzb2x1dGUKKwkJICAgICAgIChudGggMSAoY2FyIGRpci1saXN0KSkpKSkKKyAgICAgIChpZiAoYW5kIGRpcgorCSAgICAgICAoZmlsZS1yZWFkYWJsZS1wIGRpcikpCisJICAoc2V0cSBtZW51IChjb25zIChsaXN0IChjYXIgKGNhciBkaXItbGlzdCkpCisJCQkJIChlcmxhbmctbWFuLW1ha2UtbWlkZGxlLW1lbnUKKwkJCQkgIChlcmxhbmctbWFuLWdldC1maWxlcyBkaXIpKSkKKwkJCSAgIG1lbnUpKSkKKyAgICAgIChzZXRxIGRpci1saXN0IChjZHIgZGlyLWxpc3QpKSkKKyAgICA7OyBTaG91bGQgbm8gbWVudXMgYmUgZm91bmQsIGdlbmVyYXRlIGEgbWVudSBpdGVtIHdoaWNoCisgICAgOzsgd2lsbCBkaXNwbGF5IGEgaGVscCB0ZXh0LCB3aGVuIHNlbGVjdGVkLgorICAgIChpZiBtZW51CisJKG5yZXZlcnNlIG1lbnUpCisgICAgICAnKCgiTWFuIFBhZ2VzIgorCSAoKCJFcnJvciEgV2h5PyIgZXJsYW5nLW1hbi1kZXNjcmliZS1lcnJvcikpKSkpKSkKKworCis7OyBTaG91bGQgdGhlIG1lbnUgYmUgdG8gbG9uZywgbGV0J3Mgc3BsaXQgaXQgaW50byBhIG51bWJlciBvZgorOzsgc21hbGxlciBtZW51cy4gIFdhcm5pbmcsIHRoaXMgY29kZSBjb250YWlucyBiZWF0aWZ1bAorOzsgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyEKKyhkZWZ1biBlcmxhbmctbWFuLW1ha2UtbWlkZGxlLW1lbnUgKGZpbGVsaXN0KQorICAiQ3JlYXRlIHRoZSBzZWNvbmQgbGV2ZWwgbWVudSBmcm9tIEZJTEVMSVNULgorCitTaG91bGQgdGhlIGxpc3QgYmUgbG9uZ2VyIHRoYW4gYGVybGFuZy1tYW4tbWF4LW1lbnUtc2l6ZScsIGEgdHJlZSBvZgorbWVudXMgaXMgY3JlYXRlZC4iCisgIChpZiAoPD0gKGxlbmd0aCBmaWxlbGlzdCkgZXJsYW5nLW1hbi1tYXgtbWVudS1zaXplKQorICAgICAgKGVybGFuZy1tYW4tbWFrZS1tZW51IGZpbGVsaXN0KQorICAgIChsZXQgKChtZW51ICcoKSkKKwkgIChmaWxlbGlzdCAoY29weS1zZXF1ZW5jZSBmaWxlbGlzdCkpCisJICBzZWdtZW50IHN1Ym1lbnUgcGFpcikKKyAgICAgICh3aGlsZSBmaWxlbGlzdAorCShzZXRxIHBhaXIgKG50aGNkciAoLSBlcmxhbmctbWFuLW1heC1tZW51LXNpemUgMSkgZmlsZWxpc3QpKQorCShzZXRxIHNlZ21lbnQgZmlsZWxpc3QpCisJKGlmIChudWxsIHBhaXIpCisJICAgIChzZXRxIGZpbGVsaXN0IG5pbCkKKwkgIChzZXRxIGZpbGVsaXN0IChjZHIgcGFpcikpCisJICAoc2V0Y2RyIHBhaXIgbmlsKSkKKwkoc2V0cSBzdWJtZW51IChlcmxhbmctbWFuLW1ha2UtbWVudSBzZWdtZW50KSkKKwkoc2V0cSBtZW51IChjb25zIChsaXN0IChjb25jYXQgKGNhciAoY2FyIHN1Ym1lbnUpKQorCQkJCSAgICAgICAiIC0tICIKKwkJCQkgICAgICAgKGNhciAoY2FyIChyZXZlcnNlIHN1Ym1lbnUpKSkpCisJCQkgICAgICAgc3VibWVudSkKKwkJCSBtZW51KSkpCisgICAgICAobnJldmVyc2UgbWVudSkpKSkKKworCisoZGVmdW4gZXJsYW5nLW1hbi1tYWtlLW1lbnUgKGZpbGVsaXN0KQorICAiTWFrZSBhIGxlYWYgbWVudSBiYXNlZCBvbiBGSUxFTElTVC4iCisgIChsZXQgKChtZW51ICcoKSkKKwlpdGVtKQorICAgICh3aGlsZSBmaWxlbGlzdAorICAgICAgKHNldHEgaXRlbSAoZXJsYW5nLW1hbi1tYWtlLW1lbnUtaXRlbSAoY2FyIGZpbGVsaXN0KSkpCisgICAgICAoaWYgaXRlbQorCSAgKHNldHEgbWVudSAoY29ucyBpdGVtIG1lbnUpKSkKKyAgICAgIChzZXRxIGZpbGVsaXN0IChjZHIgZmlsZWxpc3QpKSkKKyAgICAobnJldmVyc2UgbWVudSkpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLW1ha2UtbWVudS1pdGVtIChmaWxlKQorICAiQ3JlYXRlIGEgbWVudSBpdGVtIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIG1hbiBwYWdlLiIKKyAgKGFuZCAoc3RyaW5nLW1hdGNoICIuKi9cXChbXi9dK1xcKVxcLlteLl0kIiBmaWxlKQorICAgICAgIChsZXQgKChwYWdlIChzdWJzdHJpbmcgZmlsZSAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKSkKKwkgKGxpc3QgKGNhcGl0YWxpemUgcGFnZSkKKwkgICAgICAgKGxpc3QgJ2xhbWJkYSAnKCkKKwkJICAgICAnKGludGVyYWN0aXZlKQorCQkgICAgIChsaXN0ICdmdW5jYWxsICdlcmxhbmctbWFuLWRpc3BsYXktZnVuY3Rpb24KKwkJCSAgIGZpbGUpKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLW1hbi1nZXQtZmlsZXMgKGRpcikKKyAgIlJldHVybiBmaWxlcyBpbiBkaXJlY3RvcnkgRElSLiIKKyAgKGRpcmVjdG9yeS1maWxlcyBkaXIgdCAiLipcXC5bMC05XVxcJyIpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLW1vZHVsZSAoJm9wdGlvbmFsIG1vZHVsZSkKKyAgIkZpbmQgbWFudWFsIHBhZ2UgZm9yIE1PRFVMRSwgZGVmYXVsdHMgdG8gbW9kdWxlIG9mIGZ1bmN0aW9uIHVuZGVyIHBvaW50LgorVGhpcyBmdW5jdGlvbiBpcyBhd2FyZSBvZiBpbXBvcnRlZCBmdW5jdGlvbnMuIgorICAoaW50ZXJhY3RpdmUKKyAgIChsaXN0IChsZXQqICgobW9kIChjYXItc2FmZSAoZXJsYW5nLWdldC1mdW5jdGlvbi11bmRlci1wb2ludCkpKQorCQkoaW5wdXQgKHJlYWQtc3RyaW5nCisJCQkoZm9ybWF0ICJNYW51YWwgZW50cnkgZm9yIG1vZHVsZSVzOiAiCisJCQkJKGlmIChvciAobnVsbCBtb2QpIChzdHJpbmc9IG1vZCAiIikpCisJCQkJICAgICIiCisJCQkJICAoZm9ybWF0ICIgKGRlZmF1bHQgJXMpIiBtb2QpKSkpKSkKKwkgICAoaWYgKHN0cmluZz0gaW5wdXQgIiIpCisJICAgICAgIG1vZAorCSAgICAgaW5wdXQpKSkpCisgIChvciBtb2R1bGUgKHNldHEgbW9kdWxlIChjYXIgKGVybGFuZy1nZXQtZnVuY3Rpb24tdW5kZXItcG9pbnQpKSkpCisgIChpZiAob3IgKG51bGwgbW9kdWxlKSAoc3RyaW5nPSBtb2R1bGUgIiIpKQorICAgICAgKGVycm9yICJObyBFcmxhbmcgbW9kdWxlIG5hbWUgZ2l2ZW4iKSkKKyAgKGxldCAoKGRpci1saXN0IGVybGFuZy1tYW4tZGlycykKKwkocGF0IChjb25jYXQgIlxcYiIgKHJlZ2V4cC1xdW90ZSBtb2R1bGUpICJcXC5bXi5dJCIpKQorCShmaWxlIG5pbCkKKwlmaWxlLWxpc3QpCisgICAgKHdoaWxlIChhbmQgZGlyLWxpc3QgKG51bGwgZmlsZSkpCisgICAgICAoc2V0cSBmaWxlLWxpc3QgKGVybGFuZy1tYW4tZ2V0LWZpbGVzCisJCSAgICAgICAoaWYgKG50aCAyIChjYXIgZGlyLWxpc3QpKQorCQkJICAgKGNvbmNhdCBlcmxhbmctcm9vdC1kaXIgKG50aCAxIChjYXIgZGlyLWxpc3QpKSkKKwkJCSAobnRoIDEgKGNhciBkaXItbGlzdCkpKSkpCisgICAgICAod2hpbGUgKGFuZCBmaWxlLWxpc3QgKG51bGwgZmlsZSkpCisJKGlmIChzdHJpbmctbWF0Y2ggcGF0IChjYXIgZmlsZS1saXN0KSkKKwkgICAgKHNldHEgZmlsZSAoY2FyIGZpbGUtbGlzdCkpKQorCShzZXRxIGZpbGUtbGlzdCAoY2RyIGZpbGUtbGlzdCkpKQorICAgICAgKHNldHEgZGlyLWxpc3QgKGNkciBkaXItbGlzdCkpKQorICAgIChpZiBmaWxlCisJKGZ1bmNhbGwgZXJsYW5nLW1hbi1kaXNwbGF5LWZ1bmN0aW9uIGZpbGUpCisgICAgICAoZXJyb3IgIk5vIG1hbnVhbCBwYWdlIGZvciBtb2R1bGUgJXMgZm91bmQuIiBtb2R1bGUpKSkpCisKKworOzsgV2FybmluZywgdGhlIGZ1bmN0aW9uIGBlcmxhbmctbWFuLWZ1bmN0aW9uJyBpcyBhIGhhY2shCis7OyBJdCBsaW5rcyBpdHNlbGYgaW50byB0aGUgbWFuIGNvZGUgaW4gYSBub24tY2xlYW4gd2F5LiAgSSBoYXZlCis7OyBjaG9vc2VkIHRvIGtlZXAgaXQgc2luY2UgaXQgcHJvdmlkZXMgYSB2ZXJ5IHVzZWZ1bCBmdW5jdGlvbmFsaXR5Cis7OyB3aGljaCBpcyBub3QgcG9zc2libGUgdG8gYWNoaXZlIHVzaW5nIGEgY2xlYW4gYXBwcm9hY2guCis7OyAgIC8gQW5kZXJzTAorCisoZGVmdmFyIGVybGFuZy1tYW4tZnVuY3Rpb24tbmFtZSBuaWwKKyAgIk5hbWUgb2YgZnVuY3Rpb24gZm9yIGxhc3QgYGVybGFuZy1tYW4tZnVuY3Rpb24nIGNhbGwuCitVc2VkIGZvciBjb21tbmljYXRpb24gYmV0d2VlbiBgZXJsYW5nLW1hbi1mdW5jdGlvbicgYW5kIHRoZQorcGF0Y2ggdG8gYE1hbi1ub3RpZnktd2hlbi1yZWFkeScuIikKKworKGRlZnVuIGVybGFuZy1tYW4tZnVuY3Rpb24gKCZvcHRpb25hbCBuYW1lKQorICAiRmluZCBtYW51YWwgcGFnZSBmb3IgTkFNRSwgd2hlcmUgTkFNRSBpcyBtb2R1bGU6ZnVuY3Rpb24uCitUaGUgZW50cnkgZm9yIGBmdW5jdGlvbicgaXMgZGlzcGxheWVkLgorCitUaGlzIGZ1bmN0aW9uIGlzIGF3YXJlIG9mIGltcG9ydGVkIGZ1bmN0aW9ucy4iCisgIChpbnRlcmFjdGl2ZQorICAgKGxpc3QgKGxldCogKChtb2QtZnVuYyAoZXJsYW5nLWdldC1mdW5jdGlvbi11bmRlci1wb2ludCkpCisJCShtb2QgKGNhci1zYWZlIG1vZC1mdW5jKSkKKwkJKGZ1bmMgKG50aCAxIG1vZC1mdW5jKSkKKwkJKGlucHV0IChyZWFkLXN0cmluZworCQkJKGZvcm1hdAorCQkJICJNYW51YWwgZW50cnkgZm9yIGBtb2R1bGU6ZnVuYycgb3IgYG1vZHVsZSclczogIgorCQkJIChpZiAob3IgKG51bGwgbW9kKSAoc3RyaW5nPSBtb2QgIiIpKQorCQkJICAgICAiIgorCQkJICAgKGZvcm1hdCAiIChkZWZhdWx0ICVzOiVzKSIgbW9kIGZ1bmMpKSkpKSkKKwkgICAoaWYgKHN0cmluZz0gaW5wdXQgIiIpCisJICAgICAgIChpZiAoYW5kIG1vZCBmdW5jKQorCQkgICAoY29uY2F0IG1vZCAiOiIgZnVuYykKKwkJIG1vZCkKKwkgICAgIGlucHV0KSkpKQorICA7OyBFbWFjcyAxOCBkb2Vzbid0IHByb3ZpZGUgYG1hbicuLi4KKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKHJlcXVpcmUgJ21hbikKKyAgICAoZXJyb3IgbmlsKSkKKyAgKGxldCAoKG1vZG5hbWUgbmlsKQorCShmdW5jbmFtZSBuaWwpKQorICAgIChjb25kICgobnVsbCBuYW1lKQorCSAgIChsZXQgKChtb2QtZnVuYyAoZXJsYW5nLWdldC1mdW5jdGlvbi11bmRlci1wb2ludCkpKQorCSAgICAgKHNldHEgbW9kbmFtZSAoY2FyLXNhZmUgbW9kLWZ1bmMpKQorCSAgICAgKHNldHEgZnVuY25hbWUgKG50aCAxIG1vZC1mdW5jKSkpKQorCSAgKChzdHJpbmctbWF0Y2ggIjoiIG5hbWUpCisJICAgKHNldHEgbW9kbmFtZSAoc3Vic3RyaW5nIG5hbWUgMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKKwkgICAoc2V0cSBmdW5jbmFtZSAoc3Vic3RyaW5nIG5hbWUgKG1hdGNoLWVuZCAwKSBuaWwpKSkKKwkgICgoc3RyaW5ncCBuYW1lKQorCSAgIChzZXRxIG1vZG5hbWUgbmFtZSkpKQorICAgIChpZiAob3IgKG51bGwgbW9kbmFtZSkgKHN0cmluZz0gbW9kbmFtZSAiIikpCisJKGVycm9yICJObyBFcmxhbmcgbW9kdWxlIG5hbWUgZ2l2ZW4iKSkKKyAgICAoY29uZCAoKGZib3VuZHAgJ01hbi1ub3RpZnktd2hlbi1yZWFkeSkKKwkgICA7OyBFbWFjcyAxOTogIFRoZSBtYW4gY29tbWFuZCBjb3VsZCBwb3NzaWJseSBzdGFydCBhbgorCSAgIDs7IGFzeW5jcm9ub3VzIHByb2Nlc3MsIGkuZS4gd2UgbXVzdCBob29rIG91cnNlbHZlcyBpbnRvCisJICAgOzsgdGhlIHN5c3RlbSB0byBiZSBhY3RpdmF0ZWQgd2hlbiB0aGUgbWFuLXByb2Nlc3MKKwkgICA7OyB0ZXJtaW5hdGVzLgorCSAgIChpZiAobnVsbCBmdW5jbmFtZSkKKwkgICAgICAgKCkKKwkgICAgIChlcmxhbmctbWFuLXBhdGNoLW5vdGlmeSkKKwkgICAgIChzZXRxIGVybGFuZy1tYW4tZnVuY3Rpb24tbmFtZSBmdW5jbmFtZSkpCisJICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgICAgICAoZXJsYW5nLW1hbi1tb2R1bGUgbW9kbmFtZSkKKwkgICAgIChlcnJvciAoc2V0cSBlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUgbmlsKSkpKQorCSAgKHQKKwkgICAoZXJsYW5nLW1hbi1tb2R1bGUgbW9kbmFtZSkKKwkgICAoaWYgZnVuY25hbWUKKwkgICAgICAgKGVybGFuZy1tYW4tZmluZC1mdW5jdGlvbgorCQkob3IgKGdldC1idWZmZXIgIipNYW51YWwgRW50cnkqIikgOyBFbWFjcyAxOAorCQkgICAgKGN1cnJlbnQtYnVmZmVyKSkJICAgICAgICAgIDsgWEVtYWNzCisJCWZ1bmNuYW1lKSkpKSkpCisKKworOzsgU2hvdWxkIHRoZSBkZWZhZHZpY2UgYmUgYXQgdGhlIHRvcCBsZXZlbCwgdGhlIHBhY2thZ2UgYGFkdmljZScgd291bGQKKzs7IGJlIHJlcXVpcmVkLiAgTm93IGl0IGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGlzIGZ1bmN0aW9uYWxpdHkKKzs7IGlzIHVzZWQuICAoRW1hY3MgMTkgc3BlY2lmaWMuKQorKGRlZnVuIGVybGFuZy1tYW4tcGF0Y2gtbm90aWZ5ICgpCisgICJQYXRjaCB0aGUgZnVuY3Rpb24gYE1hbi1ub3RpZnktd2hlbi1yZWFkeScgdG8gc2VhcmNoIGZvciBmdW5jdGlvbi4KK1RoZSB2YXJpYWJsZSBgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lJyBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kIHRvCit0aGUgZnVuY3Rpb24gbmFtZSwgb3IgdG8gbmlsLgorCitUaGUgcmVhc29uIGZvciBwYXRjaGluZyBhIGZ1bmN0aW9uIGlzIHRoYXQgdW5kZXIgRW1hY3MgMTksIHRoZSBtYW4KK2NvbW1hbmQgaXMgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkuIgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocmVxdWlyZSAnYWR2aWNlKQorICAgIDs7IFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbmQgc2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuCisgICAgOzsgcnVubmluZyB1bmRlciBFbWFjcyAxOS4KKyAgICAoZXJyb3IgKGVycm9yIChjb25jYXQgIlRoaXMgY29tbWFuZHMgbmVlZHMgdGhlIHBhY2thZ2UgYGFkdmljZScsICIKKwkJCSAgInBsZWFzZSB1cGdyYWRlIHlvdXIgRW1hY3MuIikpKSkKKyAgKHJlcXVpcmUgJ21hbikKKyAgKGRlZmFkdmljZSBNYW4tbm90aWZ5LXdoZW4tcmVhZHkKKyAgICAoYWZ0ZXIgZXJsYW5nLU1hbi1ub3RpZnktd2hlbi1yZWFkeSBhY3RpdmF0ZSkKKyAgICAiU2V0cyBwb2ludCBhdCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZnVuY3Rpb24gbmFtZSBpbgorZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lIHdoZW4gdGhlIG1hbi1wYWdlIGlzIGRpc3BsYXllZC4iCisgICAgKGlmIGVybGFuZy1tYW4tZnVuY3Rpb24tbmFtZQorCShlcmxhbmctbWFuLWZpbmQtZnVuY3Rpb24gKGFkLWdldC1hcmcgMCkgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lKSkKKyAgICAoc2V0cSBlcmxhbmctbWFuLWZ1bmN0aW9uLW5hbWUgbmlsKSkpCisKKworKGRlZnVuIGVybGFuZy1tYW4tZmluZC1mdW5jdGlvbiAoYnVmIGZ1bmMpCisgICJGaW5kIG1hbnVhbCBwYWdlIGZvciBmdW5jdGlvbiBpbiBgZXJsYW5nLW1hbi1mdW5jdGlvbi1uYW1lJyBpbiBidWZmZXIgQlVGLiIKKyAgKGlmIGZ1bmMKKyAgICAgIChsZXQgKCh3aW4gKGdldC1idWZmZXItd2luZG93IGJ1ZikpKQorCShpZiB3aW4KKwkgICAgKHByb2duCisJICAgICAgKHNldC1idWZmZXIgYnVmKQorCSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisJICAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZAorCQkgICAoY29uY2F0ICJeWyBcdF0rIiBmdW5jICIgPygiKQorCQkgICAocG9pbnQtbWF4KSB0KQorCQkgIChwcm9nbgorCQkgICAgKGZvcndhcmQtd29yZCAtMSkKKwkJICAgIChzZXQtd2luZG93LXBvaW50IHdpbiAocG9pbnQpKSkKKwkJKG1lc3NhZ2UgIkNvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGAlcyciIGZ1bmMpKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1tYW4tZGlzcGxheSAoZmlsZSkKKyAgIkRpc3BsYXkgRklMRSBhcyBhIGBtYW4nIGZpbGUuCitUaGlzIGlzIGRlIGRlZmF1bHQgbWFudWFsIHBhZ2UgZGlzcGxheSBmdW5jdGlvbi4KK1RoZSB2YXJpYWJsZXMgYGVybGFuZy1tYW4tZGlzcGxheS1mdW5jdGlvbicgY29udGFpbnMgdGhlIGZ1bmN0aW9uCit0byBiZSB1c2VkLiIKKyAgOzsgRW1hY3MgMTggZG9lc24ndCBgcHJvdmlkZScgbWFuLgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocmVxdWlyZSAnbWFuKQorICAgIChlcnJvciBuaWwpKQorICAoaWYgZmlsZQorICAgICAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQgKGNvcHktc2VxdWVuY2UgcHJvY2Vzcy1lbnZpcm9ubWVudCkpKQorCShpZiAoc3RyaW5nLW1hdGNoICJcXCguKlxcKS9tYW5bXi9dKi9cXChbXi9dK1xcKVxcLlteLl0kIiBmaWxlKQorCSAgICAobGV0ICgoZGlyIChzdWJzdHJpbmcgZmlsZSAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKQorCQkgIChwYWdlIChzdWJzdHJpbmcgZmlsZSAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMikpKSkKKwkgICAgICAoaWYgKGZib3VuZHAgJ3NldGVudikKKwkJICAoc2V0ZW52ICJNQU5QQVRIIiBkaXIpCisJCTs7IEVtYWNzIDE4CisJCShzZXRxIHByb2Nlc3MtZW52aXJvbm1lbnQgKGNvbnMgKGNvbmNhdCAiTUFOUEFUSD0iIGRpcikKKwkJCQkJCXByb2Nlc3MtZW52aXJvbm1lbnQpKSkKKwkgICAgICAoY29uZCAoKG5vdCAoYW5kIChub3QgZXJsYW5nLXhlbWFjcy1wKQorCQkJICAgICAgICg9IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDE5KQorCQkJICAgICAgICg8IGVybGFuZy1lbWFjcy1taW5vci12ZXJzaW9uIDI5KSkpCisJCSAgICAgKG1hbnVhbC1lbnRyeSBwYWdlKSkKKwkJICAgICh0CisJCSAgICAgOzsgRW1hY3MgMTkuMjggYW5kIGVhcmxpZXIgdmVyc2lvbnMgb2YgMTk6CisJCSAgICAgOzsgVGhlIG1hbnVhbC1lbnRyeSBjb21tYW5kIHVuY29uZGl0aW9uYWxseSBwcm9tcHRzCisJCSAgICAgOzsgdGhlIHVzZXIgOi0oCisJCSAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnTWFuLWdldHBhZ2UtaW4tYmFja2dyb3VuZCkKKwkJCSAgICAgIHBhZ2UpKSkpCisJICAoZXJyb3IgIkNhbid0IGZpbmQgbWFuIHBhZ2UgZm9yICVzXG4iIGZpbGUpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctbWFuLWRlc2NyaWJlLWVycm9yICgpCisgICJEZXNjcmliZSB3aHkgdGhlIG1hbnVhbCBwYWdlcyB3ZXJlbid0IGZvdW5kLiIKKyAgKGludGVyYWN0aXZlKQorICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipFcmxhbmcgTWFuIEVycm9yKiIKKyAgICAgIChwcmluYyAiTm9ybWFsbHksIHRoaXMgbWVudSBzaG91bGQgY29udGFpbiBFcmxhbmcgbWFudWFsIHBhZ2VzLgorCitJbiBvcmRlciB0byBmaW5kIHRoZSBtYW51YWwgcGFnZXMsIHRoZSB2YXJpYWJsZSBgZXJsYW5nLXJvb3QtZGlyJworc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRXJsYW5nCitpbnN0YWxsYXRpb24uICBUaGUgbmFtZSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGZpbmFsIHNsYXNoLgorCitQcmFjdGljYWxseSwgeW91IHNob3VsZCBhZGQgYSBsaW5lIG9uIHRoZSBmb2xsb3dpbmcgZm9ybSB0bworeW91ciB+Ly5lbWFjcywgb3IgYXNrIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gYWRkIGl0IHRvCit0aGUgc2l0ZSBpbml0IGZpbGU6CisgICAgKHNldHEgZXJsYW5nLXJvb3QtZGlyIFwiL3RoZS9lcmxhbmcvcm9vdC9kaXIvZ29lcy9oZXJlXCIpCisKK0ZvciBleGFtcGxlOgorICAgIChzZXRxIGVybGFuZy1yb290LWRpciBcIi91c3IvbG9jYWwvZXJsYW5nXCIpCisKK0FmdGVyIGluc3RhbGxpbmcgdGhlIGxpbmUsIGtpbGwgYW5kIHJlc3RhcnQgRW1hY3MsIG9yIHJlc3RhcnQgRXJsYW5nCittb2RlIHdpdGggdGhlIGNvbW1hbmQgYE0teCBlcmxhbmctbW9kZSBSRVQnLiIpKSkKKwwKKzs7IFNrZWxldG9uIGNvZGU6CisKKzs7IFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgcGFja2FnZSBgdGVtcG8nIHdoaWNoIGlzIHBhcnQgb2YgbW9kZXJuCis7OyBFbWFjc2VuLiAgKEdOVSBFbWFjcyAxOS4yNSAoPykgYW5kIFhFbWFjcyAxOS4xNC4pCisKKyhkZWZ1biBlcmxhbmctc2tlbC1pbml0ICgpCisgICJHZW5lcmF0ZSB0aGUgc2tlbGV0b24gZnVuY3Rpb25zIGFuZCBtZW51IGl0ZW1zLgorVGhlIHZhcmlhYmxlIGBlcmxhbmctc2tlbCcgY29udGFpbnMgdGhlIG5hbWUgYW5kIGRlc2NyaXB0aW9ucyBvZgorYWxsIHNrZWxldG9ucy4KKworVGhlIHNrZWxldG9uIHJvdXRpbmVzIGFyZSBiYXNlZCBvbiB0aGUgYHRlbXBvJyBwYWNrYWdlLiAgU2hvdWxkIHRoaXMKK3BhY2thZ2Ugbm90IGJlIHByZXNlbnQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIKKyAgKGludGVyYWN0aXZlKQorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocmVxdWlyZSAndGVtcG8pCisgICAgKGVycm9yIHQpKQorICAoaWYgKGZlYXR1cmVwICd0ZW1wbykKKyAgICAgIChsZXQgKChza2VsIGVybGFuZy1za2VsKQorCSAgICAobWVudSAnKCkpKQorCSh3aGlsZSBza2VsCisJICAoY29uZCAoKG51bGwgKGNhciBza2VsKSkKKwkJIChzZXRxIG1lbnUgKGNvbnMgbmlsIG1lbnUpKSkKKwkJKHQKKwkJIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3RlbXBvLWRlZmluZS10ZW1wbGF0ZSkKKwkJICAoY29uY2F0ICJlcmxhbmctIiAobnRoIDEgKGNhciBza2VsKSkpCisJCSAgOzsgVGhlIHRlbXBvIHRlbXBsYXRlIHVzZWQgY29udGFpbnMgYW4gYGluY2x1ZGUnCisJCSAgOzsgZnVuY3Rpb24gY2FsbCBvbmx5LCBoZW5jZSBjaGFuZ2VzIHRvIHRoZQorCQkgIDs7IHZhcmlhYmxlcyBkZXNjcmliaW5nIHRoZSB0ZW1wbGF0ZXMgdGFrZSBlZmZlY3QKKwkJICA7OyBpbW1kaWF0ZWx5LgorCQkgIChsaXN0IChsaXN0ICdlcmxhbmctc2tlbC1pbmNsdWRlIChudGggMiAoY2FyIHNrZWwpKSkpCisJCSAgKG50aCAxIChjYXIgc2tlbCkpKQorCQkgKHNldHEgbWVudSAoY29ucyAoZXJsYW5nLXNrZWwtbWFrZS1tZW51LWl0ZW0KKwkJCQkgICAoY2FyIHNrZWwpKSBtZW51KSkpKQorCSAgKHNldHEgc2tlbCAoY2RyIHNrZWwpKSkKKwkoc2V0cSBlcmxhbmctbWVudS1za2VsLWl0ZW1zCisJICAgICAgKGxpc3QgbmlsIChsaXN0ICJTa2VsZXRvbnMiIChucmV2ZXJzZSBtZW51KSkpKQorCShzZXRxIGVybGFuZy1tZW51LWl0ZW1zCisJICAgICAgKGVybGFuZy1tZW51LWFkZC1hYm92ZSAnZXJsYW5nLW1lbnUtc2tlbC1pdGVtcworCQkJCSAgICAgJ2VybGFuZy1tZW51LXZlcnNpb24taXRlbXMKKwkJCQkgICAgIGVybGFuZy1tZW51LWl0ZW1zKSkKKwkoZXJsYW5nLW1lbnUtaW5pdCkpKSkKKworKGRlZnVuIGVybGFuZy1za2VsLW1ha2UtbWVudS1pdGVtIChza2VsKQorICAobGV0ICgoZnVuYyAoaW50ZXJuIChjb25jYXQgInRlbXBvLXRlbXBsYXRlLWVybGFuZy0iIChudGggMSBza2VsKSkpKSkKKyAgICAoY29uZCAoKG51bGwgKG50aCAzIHNrZWwpKQorCSAgIChsaXN0IChjYXIgc2tlbCkgZnVuYykpCisJICAodAorCSAgIChsaXN0IChjYXIgc2tlbCkKKwkJIChsaXN0ICdsYW1iZGEgJygpCisJCSAgICAgICAnKGludGVyYWN0aXZlKQorCQkgICAgICAgKGxpc3QgJ2Z1bmNhbGwKKwkJCSAgICAgKGxpc3QgJ3F1b3RlIChudGggMyBza2VsKSkKKwkJCSAgICAgKGxpc3QgJ3F1b3RlIGZ1bmMpKSkpKSkpKQorCis7OyBGdW5jdGlvbnMgZGVzaWduZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHNrZWxldG9uIG1lbnUuCis7OyAoTm90IG5vcm1hbGx5IHVzZWQpCisoZGVmdW4gZXJsYW5nLXNrZWwtaW5zZXJ0IChmdW5jKQorICAiSW5zZXJ0IHNrZWxldG9uIGdlbmVyYXRlZCBieSBGVU5DIGFuZCBnb3RvIGZpcnN0IHRlbXBvIG1hcmsuIgorICAoc2F2ZS1leGN1cnNpb24gKGZ1bmNhbGwgZnVuYykpCisgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3RlbXBvLWZvcndhcmQtbWFyaykpKQorCisoZGVmdW4gZXJsYW5nLXNrZWwtaGVhZGVyIChmdW5jKQorICAiSW5zZXJ0IHRoZSBoZWFkZXIgZ2VuZXJhdGVkIGJ5IEZVTkMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiIKKyAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgKHNhdmUtZXhjdXJzaW9uIChmdW5jYWxsIGZ1bmMpKQorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICd0ZW1wby1mb3J3YXJkLW1hcmspKSkKKworCis7OyBGdW5jdGlvbnMgdXNlZCBpbnNpZGUgdGhlIHNrZWxldG9uIGRlc2NyaXB0aW9ucy4KKyhkZWZ1biBlcmxhbmctc2tlbC1za2lwLWJsYW5rICgpCisgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHQiKQorICBuaWwpCisKKyhkZWZ1biBlcmxhbmctc2tlbC1pbmNsdWRlICgmcmVzdCBhcmdzKQorICAiSW5jbHVkZSBhIHRlbXBsYXRlIGluc2lkZSBhbm90aGVyIHRlbXBsYXRlLgorCitFeGFtcGxlIG9mIHVzZSwgYXNzdW1pbmcgdGhhdCBgZXJsYW5nLXNrZWwtZnVuYycgaXMgZGVmaW5lZDoKKworIChkZWZ2YXIgZm9vLXNrZWxldG9uICcoXCIlJSUgTmV3IGZ1bmN0aW9uOlwiCisgICAgICAgICAgICAgICAgICAgICAgICAoZXJsYW5nLXNrZWwtaW5jbHVkZSBlcmxhbmctc2tlbC1mdW5jKSkpCisKK1RlY2hpY2FsbHksIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYHRlbXBvJyBhdHRyaWJ1dGVgKGwgLi4uKScgd2hpY2gKK2NhbiBjb250YWluIG90aGVyIGB0ZW1wbycgYXR0cmlidXRlcy4gIFBsZWFzZSBzZWUgdGhlIGZ1bmN0aW9uCitgdGVtcG8tZGVmaW5lLXRlbXBsYXRlJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYChsIC4uLiknIGF0dHJpYnV0ZS4iCisgIChsZXQgKChyZXMgJygpKQorCWVudHJ5KQorICAgICh3aGlsZSBhcmdzCisgICAgICAoc2V0cSBlbnRyeSAoY2FyIGFyZ3MpKQorICAgICAgKHdoaWxlIGVudHJ5CisJKHNldHEgcmVzIChjb25zIChjYXIgZW50cnkpIHJlcykpCisJKHNldHEgZW50cnkgKGNkciBlbnRyeSkpKQorICAgICAgKHNldHEgYXJncyAoY2RyIGFyZ3MpKSkKKyAgICAoY29ucyAnbCAobnJldmVyc2UgcmVzKSkpKQorCisoZGVmdW4gZXJsYW5nLXNrZWwtc2VwYXJhdG9yICgmb3B0aW9uYWwgcGVyY2VudCkKKyAgIlJldHVybiBhIGNvbW1lbnQgc2VwYXJhdG9yLiIKKyAgKGxldCAoKHBlcmNlbnQgKG9yIHBlcmNlbnQgMykpKQorICAgIChjb25jYXQgKG1ha2Utc3RyaW5nIHBlcmNlbnQgPyUpIAorCSAgICAobWFrZS1zdHJpbmcgKC0gNzAgcGVyY2VudCkgPy0pIAorCSAgICAiXG4iKSkpCisKKyhkZWZ1biBlcmxhbmctc2tlbC1kb3VibGUtc2VwYXJhdG9yICgmb3B0aW9uYWwgcGVyY2VudCkKKyAgIlJldHVybiBhIGNvbW1lbnQgc2VwYXJhdG9yLiIKKyAgKGxldCAoKHBlcmNlbnQgKG9yIHBlcmNlbnQgMykpKQorICAgIChjb25jYXQgKG1ha2Utc3RyaW5nIHBlcmNlbnQgPyUpIAorCSAgICAobWFrZS1zdHJpbmcgKC0gNzAgcGVyY2VudCkgPz0pIAorCSAgICAiXG4iKSkpCisKKyhkZWZ1biBlcmxhbmctc2tlbC1kZC1tbW0teXl5eSAoKQorICAiUmV0dXJuIHRoZSBjdXJyZW50IGRhdGUgYXMgYSBzdHJpbmcgaW4gXCJERCBNb24gWVlZWVwiIGZvcm0uCitUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIEREIGlzIHNwYWNlIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMTAuIgorICAobGV0ICgoZGF0ZSAoY3VycmVudC10aW1lLXN0cmluZykpKQorICAgIChmb3JtYXQgIiUyZCAlcyAlcyIKKwkgICAgKHN0cmluZy10by1pbnQgKHN1YnN0cmluZyBkYXRlIDggMTApKQorCSAgICAoc3Vic3RyaW5nIGRhdGUgNCA3KQorCSAgICAoc3Vic3RyaW5nIGRhdGUgLTQpKSkpCisMCis7OyBJbmRlbnRhdGlvbiBjb2RlOgorCisoZGVmdW4gZXJsYW5nLWluZGVudC1jb21tYW5kICgmb3B0aW9uYWwgd2hvbGUtZXhwKQorICAiSW5kZW50IGN1cnJlbnQgbGluZSBhcyBFcmxhbmcgY29kZS4KK1dpdGggYXJndW1lbnQsIGluZGVudCBhbnkgYWRkaXRpb25hbCBsaW5lcyBvZiB0aGUgc2FtZSBjbGF1c2UKK3JpZ2lkbHkgYWxvbmcgd2l0aCB0aGlzIG9uZS4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChpZiB3aG9sZS1leHAKKyAgICAgIDs7IElmIGFyZywgYWx3eXMgaW5kZW50IHRoaXMgbGluZSBhcyBFcmxhbmcKKyAgICAgIDs7IGFuZCBzaGlmdCByZW1haW5pbmcgbGluZXMgb2YgY2xhdXNlIHRoZSBzYW1lIGFtb3VudC4KKyAgICAgIChsZXQgKChzaGlmdC1hbXQgKGVybGFuZy1pbmRlbnQtbGluZSkpCisJICAgIGJlZyBlbmQpCisJKHNhdmUtZXhjdXJzaW9uCisJICAoaWYgZXJsYW5nLXRhYi1hbHdheXMtaW5kZW50CisJICAgICAgKGJlZ2lubmluZy1vZi1saW5lKSkKKwkgIChzZXRxIGJlZyAocG9pbnQpKQorCSAgKGVybGFuZy1lbmQtb2YtY2xhdXNlIDEpCisJICAoc2V0cSBlbmQgKHBvaW50KSkKKwkgIChnb3RvLWNoYXIgYmVnKQorCSAgKGZvcndhcmQtbGluZSAxKQorCSAgKHNldHEgYmVnIChwb2ludCkpKQorCShpZiAoPiBlbmQgYmVnKQorCSAgICAoaW5kZW50LWNvZGUtcmlnaWRseSBiZWcgZW5kIHNoaWZ0LWFtdCAiXG4iKSkpCisgICAgKGlmIChhbmQgKG5vdCBlcmxhbmctdGFiLWFsd2F5cy1pbmRlbnQpCisJICAgICAoc2F2ZS1leGN1cnNpb24KKwkgICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCisJICAgICAgIChub3QgKGJvbHApKSkpCisJKGluc2VydC10YWIpCisgICAgICAoZXJsYW5nLWluZGVudC1saW5lKSkpKQorCisKKyhkZWZ1biBlcmxhbmctaW5kZW50LWxpbmUgKCkKKyAgIkluZGVudCBjdXJyZW50IGxpbmUgYXMgRXJsYW5nIGNvZGUuCitSZXR1cm4gdGhlIGFtb3VudCB0aGUgaW5kZW50YXRpb24gY2hhbmdlZCBieS4iCisgIChsZXQgKChwb3MgKC0gKHBvaW50LW1heCkgKHBvaW50KSkpCisJaW5kZW50IGJlZworCXNoaWZ0LWFtdCkKKyAgICAoYmVnaW5uaW5nLW9mLWxpbmUgMSkKKyAgICAoc2V0cSBiZWcgKHBvaW50KSkKKyAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQorICAgIChjb25kICgobG9va2luZy1hdCAiJSIpCisJICAgKHNldHEgaW5kZW50IChmdW5jYWxsIGNvbW1lbnQtaW5kZW50LWZ1bmN0aW9uKSkKKwkgICAoc2V0cSBzaGlmdC1hbXQgKC0gaW5kZW50IChjdXJyZW50LWNvbHVtbikpKSkKKwkgICh0CisJICAgKHNldHEgaW5kZW50IChlcmxhbmctY2FsY3VsYXRlLWluZGVudCkpCisJICAgKGNvbmQgKChudWxsIGluZGVudCkKKwkJICAoc2V0cSBpbmRlbnQgKGN1cnJlbnQtaW5kZW50YXRpb24pKSkKKwkJICgoZXEgaW5kZW50IHQpCisJCSAgOzsgVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgaGVyZS4KKwkJICAoZXJyb3IgIkVybGFuZyBtb2RlIGVycm9yIikpCisJCSAoKD0gKGNoYXItc3ludGF4IChmb2xsb3dpbmctY2hhcikpID9cKSkKKwkJICAoc2V0cSBpbmRlbnQgKDEtIGluZGVudCkpKSkKKwkgICAoc2V0cSBzaGlmdC1hbXQgKC0gaW5kZW50IChjdXJyZW50LWNvbHVtbikpKSkpCisgICAgKGlmICh6ZXJvcCBzaGlmdC1hbXQpCisJbmlsCisgICAgICAoZGVsZXRlLXJlZ2lvbiBiZWcgKHBvaW50KSkKKyAgICAgIChpbmRlbnQtdG8gaW5kZW50KSkKKyAgICA7OyBJZiBpbml0aWFsIHBvaW50IHdhcyB3aXRoaW4gbGluZSdzIGluZGVudGF0aW9uLCBwb3NpdGlvbgorICAgIDs7IGFmdGVyIHRoZSBpbmRlbnRhdGlvbi4gRWxzZSBzdGF5IGF0IHNhbWUgcG9pbnQgaW4gdGV4dC4KKyAgICAoaWYgKD4gKC0gKHBvaW50LW1heCkgcG9zKSAocG9pbnQpKQorCShnb3RvLWNoYXIgKC0gKHBvaW50LW1heCkgcG9zKSkpCisgICAgc2hpZnQtYW10KSkKKworCisoZGVmdW4gZXJsYW5nLWluZGVudC1yZWdpb24gKGJlZyBlbmQpCisgICJJbmRlbnQgcmVnaW9uIG9mIGVybGFuZyBjb2RlLgorCitUaGlzIGlzIGF1dG9tYWdpY2FsbHkgY2FsbGVkIGJ5IHRoZSB1c2VyIGxldmVsIGZ1bmN0aW9uIGBpbmRlbnQtcmVnaW9uJy4iCisgIChpbnRlcmFjdGl2ZSAiciIpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIG5pbCkKKwkgIChjb250aW51ZSB0KQorCSAgKGZyb20tZW5kICgtIChwb2ludC1tYXgpIGVuZCkpCisJICBpbmRlbnQtcG9pbnQJCTs7IFRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZQorCSAgaW5kZW50IAkJOzsgVGhlIGluZGVudCBhbW91bnQKKwkgIHN0YXRlKQorICAgICAgKGdvdG8tY2hhciBiZWcpCisgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisgICAgICAoc2V0cSBpbmRlbnQtcG9pbnQgKHBvaW50KSkKKyAgICAgIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSkKKyAgICAgIDs7IFBhcnNlIHRoZSBFcmxhbmcgY29kZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNsYXVzZSB0bworICAgICAgOzsgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVnaW9uLgorICAgICAgKHdoaWxlICg8IChwb2ludCkgaW5kZW50LXBvaW50KQorCShzZXRxIHN0YXRlIChlcmxhbmctcGFydGlhbC1wYXJzZSAocG9pbnQpIGluZGVudC1wb2ludCBzdGF0ZSkpKQorICAgICAgOzsgSW5kZW50IGV2ZXJ5IGxpbmUgaW4gdGhlIHJlZ2lvbgorICAgICAgKHdoaWxlIGNvbnRpbnVlCisJKGdvdG8tY2hhciBpbmRlbnQtcG9pbnQpCisJKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKKwkoY29uZCAoKGxvb2tpbmctYXQgIiUiKQorCSAgICAgICA7OyBEbyBub3QgdXNlIG91ciBzdGFjayB0byBoZWxwIHRoZSB1c2VyIHRvIGN1c3RvbWl6ZQorCSAgICAgICA7OyBjb21tZW50IGluZGVudGF0aW9uLgorCSAgICAgICAoc2V0cSBpbmRlbnQgKGZ1bmNhbGwgY29tbWVudC1pbmRlbnQtZnVuY3Rpb24pKSkKKwkgICAgICAoKGxvb2tpbmctYXQgIiQiKQorCSAgICAgICA7OyBEb24ndCBpbmRlbnQgZW1wdHkgbGluZXMuCisJICAgICAgIChzZXRxIGluZGVudCAwKSkKKwkgICAgICAodAorCSAgICAgICAoc2V0cSBpbmRlbnQKKwkJICAgICAoc2F2ZS1leGN1cnNpb24KKwkJICAgICAgIChlcmxhbmctY2FsY3VsYXRlLXN0YWNrLWluZGVudCAocG9pbnQpIHN0YXRlKSkpCisJICAgICAgIChjb25kICgobnVsbCBpbmRlbnQpCisJCSAgICAgIChzZXRxIGluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikpKQorCQkgICAgICgoZXEgaW5kZW50IHQpCisJCSAgICAgIDs7IFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIGhlcmUuCisJCSAgICAgIChlcnJvciAiRXJsYW5nIG1vZGUgZXJyb3IiKSkKKwkJICAgICAoKD0gKGNoYXItc3ludGF4IChmb2xsb3dpbmctY2hhcikpID9cKSkKKwkJICAgICAgKHNldHEgaW5kZW50ICgxLSBpbmRlbnQpKSkpKSkKKwkoaWYgKHplcm9wICgtIGluZGVudCAoY3VycmVudC1jb2x1bW4pKSkKKwkgICAgbmlsCisJICAoZGVsZXRlLXJlZ2lvbiBpbmRlbnQtcG9pbnQgKHBvaW50KSkKKwkgIChpbmRlbnQtdG8gaW5kZW50KSkKKwk7OyBGaW5kIHRoZSBuZXh0IGxpbmUgaW4gdGhlIHJlZ2lvbgorCShnb3RvLWNoYXIgaW5kZW50LXBvaW50KQorCShzYXZlLWV4Y3Vyc2lvbgorCSAgKGZvcndhcmQtbGluZSAxKQorCSAgKHNldHEgaW5kZW50LXBvaW50IChwb2ludCkpKQorCShpZiAoPj0gZnJvbS1lbmQgKC0gKHBvaW50LW1heCkgaW5kZW50LXBvaW50KSkKKwkgICAgKHNldHEgY29udGludWUgbmlsKQorCSAgKHdoaWxlICg8IChwb2ludCkgaW5kZW50LXBvaW50KQorCSAgICAoc2V0cSBzdGF0ZSAoZXJsYW5nLXBhcnRpYWwtcGFyc2UKKwkJCSAocG9pbnQpIGluZGVudC1wb2ludCBzdGF0ZSkpKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1pbmRlbnQtY3VycmVudC1idWZmZXIgKCkKKyAgIkluZGVudCBjdXJyZW50IGJ1ZmZlciBhcyBFcmxhbmcgY29kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICh3aWRlbikKKyAgICAgIChlcmxhbmctaW5kZW50LXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWluZGVudC1mdW5jdGlvbiAoKQorICAiSW5kZW50IGN1cnJlbnQgRXJsYW5nIGZ1bmN0aW9uLiIKKyAgKGludGVyYWN0aXZlKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoZW5kIChwcm9nbiAoZXJsYW5nLWVuZC1vZi1mdW5jdGlvbiAxKSAocG9pbnQpKSkKKwkgIChiZWcgKHByb2duIChlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uIDEpIChwb2ludCkpKSkKKyAgICAgIChlcmxhbmctaW5kZW50LXJlZ2lvbiBiZWcgZW5kKSkpKQorCisKKyhkZWZ1biBlcmxhbmctaW5kZW50LWNsYXVzZSAoKQorICAiSW5kZW50IGN1cnJlbnQgRXJsYW5nIGNsYXVzZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCAoKGVuZCAocHJvZ24gKGVybGFuZy1lbmQtb2YtY2xhdXNlIDEpIChwb2ludCkpKQorCSAgKGJlZyAocHJvZ24gKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpIChwb2ludCkpKSkKKyAgICAgIChlcmxhbmctaW5kZW50LXJlZ2lvbiBiZWcgZW5kKSkpKQorCisKKyhkZWZtYWNybyBlcmxhbmctcHVzaCAoeCBzdGFjaykgKGxpc3QgJ3NldHEgc3RhY2sgKGxpc3QgJ2NvbnMgeCBzdGFjaykpKQorKGRlZm1hY3JvIGVybGFuZy1wb3AgKHN0YWNrKSAobGlzdCAnc2V0cSBzdGFjayAobGlzdCAnY2RyIHN0YWNrKSkpCis7OyBXb3VsZCBtdWNoIHByZWZlciB0byBtYWtlIGNhZGRyIGEgbWFjcm8gYnV0IHRoaXMgY2xhc2hlcy4KKyhkZWZ1biBlcmxhbmctY2FkZHIgKHgpIChjYXIgKGNkciAoY2RyIHgpKSkpCisKKworKGRlZnVuIGVybGFuZy1jYWxjdWxhdGUtaW5kZW50ICgmb3B0aW9uYWwgcGFyc2Utc3RhcnQpCisgICJDb21wdXRlIGFwcHJvcHJpYXRlIGluZGVudGF0aW9uIGZvciBjdXJyZW50IGxpbmUgYXMgRXJsYW5nIGNvZGUuCitSZXR1cm4gbmlsIGlmIGxpbmUgc3RhcnRzIGluc2lkZSBzdHJpbmcsIHQgaWYgaW4gYSBjb21tZW50LiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCAoKGluZGVudC1wb2ludCAocG9pbnQpKQorCSAgKGNhc2UtZm9sZC1zZWFyY2ggbmlsKQorCSAgKHN0YXRlIG5pbCkpCisgICAgICAoaWYgcGFyc2Utc3RhcnQKKwkgIChnb3RvLWNoYXIgcGFyc2Utc3RhcnQpCisJKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKSkKKyAgICAgICh3aGlsZSAoPCAocG9pbnQpIGluZGVudC1wb2ludCkKKwkoc2V0cSBzdGF0ZSAoZXJsYW5nLXBhcnRpYWwtcGFyc2UgKHBvaW50KSBpbmRlbnQtcG9pbnQgc3RhdGUpKSkKKyAgICAgIChlcmxhbmctY2FsY3VsYXRlLXN0YWNrLWluZGVudCBpbmRlbnQtcG9pbnQgc3RhdGUpKSkpCisKKyhkZWZ1biBlcmxhbmctc2hvdy1zeW50YWN0aWMtaW5mb3JtYXRpb24gKCkKKyAgIlNob3cgc3ludGFjdGljIGluZm9ybWF0aW9uIGZvciBjdXJyZW50IGxpbmUuIgorCisgIChpbnRlcmFjdGl2ZSkKKworICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgoc3RhcnRpbmctcG9pbnQgKHBvaW50KSkKKwkgIChjYXNlLWZvbGQtc2VhcmNoIG5pbCkKKwkgIChzdGF0ZSBuaWwpKQorICAgICAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorICAgICAgKHdoaWxlICg8IChwb2ludCkgc3RhcnRpbmctcG9pbnQpCisJKHNldHEgc3RhdGUgKGVybGFuZy1wYXJ0aWFsLXBhcnNlIChwb2ludCkgc3RhcnRpbmctcG9pbnQgc3RhdGUpKSkKKyAgICAgIChtZXNzYWdlICIlUyIgc3RhdGUpKSkpCisKKworKGRlZnVuIGVybGFuZy1wYXJ0aWFsLXBhcnNlIChmcm9tIHRvICZvcHRpb25hbCBzdGF0ZSkKKyAgIlBhcnNlIEVybGFuZyBzeW50YXggc3RhcnRpbmcgYXQgRlJPTSB1bnRpbCBUTywgd2l0aCBhbiBvcHRpb25hbCBTVEFURS4KK1ZhbHVlIGlzIGxpc3QgKHN0YWNrIHRva2VuLXN0YXJ0IHRva2VuLXR5cGUgaW4td2hhdCkuIgorICAoZ290by1jaGFyIGZyb20pCQkJOyBTdGFydCBhdCB0aGUgYmVnaW5uaW5nCisgIChlcmxhbmctc2tpcC1ibGFuayB0bykKKyAgKGxldCAoKGNzIChjaGFyLXN5bnRheCAoZm9sbG93aW5nLWNoYXIpKSkKKwkoc3RhY2sgKGNhciBzdGF0ZSkpCisJKHRva2VuIChwb2ludCkpCisJaW4td2hhdCkKKyAgICAoY29uZCAKKworICAgICA7OyBEb25lOiBSZXR1cm4gcHJldmlvdXMgc3RhdGUuCisgICAgICgoPj0gdG9rZW4gdG8pCisJICAgKHNldHEgdG9rZW4gKG50aCAxIHN0YXRlKSkKKwkgICAoc2V0cSBjcyAobnRoIDIgc3RhdGUpKQorCSAgIChzZXRxIGluLXdoYXQgKG50aCAzIHN0YXRlKSkpCisgICAgIDs7IFdvcmQgY29uc3RpdHVlbnQ6IGNoZWNrIGFuZCBoYW5kbGUga2V5d29yZHMuCisgICAgICgoPSBjcyA/dykKKyAgICAgIChpZiAobG9va2luZy1hdCAiXFwoZW5kXFx8YWZ0ZXJcXClbXl9hLXpBLVowLTldIikKKwkgIDs7IE11c3QgcG9wIHRvcCBpY3IgbGF5ZXIsIGBhZnRlcicgd2lsbCBwdXNoIGEgbmV3CisJICA7OyBsYXllciBuZXh0LgorCSAgKHByb2duCisJICAgICh3aGlsZSAoYW5kIHN0YWNrIChlcSAoY2FyIChjYXIgc3RhY2spKSAnLT4pKQorCSAgICAgIChlcmxhbmctcG9wIHN0YWNrKSkKKwkgICAgKGlmIChhbmQgc3RhY2sgKG1lbXEgKGNhciAoY2FyIHN0YWNrKSkgJyhpY3IgYmVnaW4pKSkKKwkJKGVybGFuZy1wb3Agc3RhY2spKSkpCisgICAgICAoY29uZCAoKGxvb2tpbmctYXQKKwkgICAgICAiXFwoaWZcXHxjYXNlXFx8cmVjZWl2ZVxcfGFmdGVyXFwpW15fYS16QS1aMC05XSIpCisJICAgICA7OyBNdXN0IHB1c2ggYSBuZXcgaWNyIChpZi9jYXNlL3JlY2VpdmUpIGxheWVyLgorCSAgICAgKGVybGFuZy1wdXNoIChsaXN0ICdpY3IgdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spKQorCSAgICAoKGxvb2tpbmctYXQgIlxcKGZ1blxcKVteX2EtekEtWjAtOV0iKQorCSAgICAgOzsgUHVjaCBhIG5ldyBpY3IgbGF5ZXIgaWYgd2UgYXJlIGRlZmluaW5nIGEgYGZ1bicKKwkgICAgIDs7IGV4cHJlc3Npb24sIG5vdCB3aGVuIHdlIGFyZSByZWZlcmluZyBhbiBleGlzdGluZworCSAgICAgOzsgZnVuY3Rpb24uCisJICAgICAoaWYgKHNhdmUtZXhjdXJzaW9uCisJCSAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAxKSkKKwkJICAgKGVybGFuZy1za2lwLWJsYW5rIHRvKQorCQkgICAoZXEgKGZvbGxvd2luZy1jaGFyKSA/XCgpKQorCQkgKGVybGFuZy1wdXNoIChsaXN0ICdpY3IgdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spKSkKKwkgICAgKChsb29raW5nLWF0ICJcXChiZWdpblxcfHF1ZXJ5XFwpW15fYS16QS1aMC05XSIpCisJICAgICAoZXJsYW5nLXB1c2ggKGxpc3QgJ2JlZ2luIHRva2VuIChjdXJyZW50LWNvbHVtbikpIHN0YWNrKSkKKwkgICAgKChsb29raW5nLWF0ICJ3aGVuW15fYS16QS1aMC05XSIpCisJICAgICAoZXJsYW5nLXB1c2ggKGxpc3QgJ3doZW4gdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spKSkKKyAgICAgIChmb3J3YXJkLXNleHAgMSkpCisKKyAgICAgOzsgU3RyaW5nOiBUcnkgdG8gc2tpcCBvdmVyIGl0LiAoQ2F0Y2ggZXJyb3IgaWYgbm90IGNvbXBsZXRlLikKKyAgICAgKCg9IGNzID9cIikKKyAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkgIChwcm9nbgorCSAgICAoZm9yd2FyZC1zZXhwIDEpCisJICAgIChpZiAoPiAocG9pbnQpIHRvKQorCQkocHJvZ24KKwkJICAoc2V0cSBpbi13aGF0ICdzdHJpbmcpCisJCSAgKGdvdG8tY2hhciB0bykpKSkKKwkoZXJyb3IKKwkgKHNldHEgaW4td2hhdCAnc3RyaW5nKQorCSAoZ290by1jaGFyIHRvKSkpKQorCisgICAgIDs7IFN5bWJvbCBjb25zdGl0dWVudCwgcHVuY3R1YXRpb24sIG9yIGV4cHJlc3Npb24gcHJlZml4PworICAgICAoKG1lbXEgY3MgJyg/LiA/XyA/JykpCisgICAgICAoY29uZCAKKworICAgICAgIDs7IENsYXVzZSBlbmQKKyAgICAgICAoKD0gKGZvbGxvd2luZy1jaGFyKSA/XDspCisJKGlmIChhbmQgc3RhY2sgKGVxIChjYXIgKGNhciBzdGFjaykpICctPikpCisJICAgIChlcmxhbmctcG9wIHN0YWNrKSkKKwkoZm9yd2FyZC1jaGFyIDEpKQorCisgICAgICAgOzsgRnVuY3Rpb24gZW5kCisgICAgICAgKChsb29raW5nLWF0ICJcXC5cXChcXHMgXFx8XG5cXHxcXHM8XFwpIikKKwkoc2V0cSBzdGFjayBuaWwpCisJKGZvcndhcmQtY2hhciAxKSkKKworICAgICAgIDs7IEZ1bmN0aW9uIGhlYWQKKyAgICAgICAoKGxvb2tpbmctYXQgIi0+XFx8Oi0iKQorCShpZiAoYW5kIHN0YWNrIChlcSAoY2FyIChjYXIgc3RhY2spKSAnd2hlbikpCisJICAgIChlcmxhbmctcG9wIHN0YWNrKSkKKwkoZXJsYW5nLXB1c2ggKGxpc3QgJy0+IHRva2VuIChjdXJyZW50LWNvbHVtbikpIHN0YWNrKQorCShmb3J3YXJkLWNoYXIgMikpCisKKyAgICAgICA7OyBMaXN0LWNvbXByZWhlbnNpb24gZGl2aWRlcgorICAgICAgICgobG9va2luZy1hdCAifHwiKQorCShlcmxhbmctcHVzaCAobGlzdCAnfHwgdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spCisJKGZvcndhcmQtY2hhciAyKSkKKworICAgICAgIDs7IEJpdC1zeW50YXggb3BlbiBwYXJlbgorICAgICAgICgobG9va2luZy1hdCAiPDwiKQorCShlcmxhbmctcHVzaCAobGlzdCAnXCggdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spCisJKGZvcndhcmQtY2hhciAyKSkKKworICAgICAgIDs7IEJiaXQtc3ludGF4IGNsb3NlIHBhcmVuCisgICAgICAgKChsb29raW5nLWF0ICI+PiIpCisJKHdoaWxlIChtZW1xIChjYXIgKGNhciBzdGFjaykpICcofHwgLT4pKQorCSAgKGVybGFuZy1wb3Agc3RhY2spKQorCShjb25kICgoZXEgKGNhciAoY2FyIHN0YWNrKSkgJ1woKQorCSAgICAgICAoZXJsYW5nLXBvcCBzdGFjaykpCisJICAgICAgKChtZW1xIChjYXIgKGNhciBzdGFjaykpICcoaWNyIGJlZ2luKSkKKwkgICAgICAgKGVycm9yICJNaXNzaW5nIGBlbmQnIikpCisJICAgICAgKHQKKwkgICAgICAgKGVycm9yICJVbmJhbGFuY2VkIHBhcmVudGhlc2VzIikpKQorCShmb3J3YXJkLWNoYXIgMikpCisKKyAgICAgICA7OyBNYWNybworICAgICAgICgoPSAoZm9sbG93aW5nLWNoYXIpID8/KQorCTs7IFNraXAgb3ZlciBtYWNybyBuYW1lIGFuZCBhbnkgZm9sbG93aW5nIHdoaXRlc3BhY2UuCisJKGZvcndhcmQtd29yZCAxKQorCShza2lwLXN5bnRheC1mb3J3YXJkICItIiB0bykKKwk7OyBNYWNybyBtaWdodCBoYXZlIGFuIGFyZ3VtZW50IGxpc3QuIFNraXAgaXQgdG9vLgorCSh3aGVuICg9IChmb2xsb3dpbmctY2hhcikgP1woKQorCSAgKGZvcndhcmQtbGlzdCAxKSkpCisKKyAgICAgICA7OyBPdGhlciBwdW5jdHVhdGlvbjogU2tpcCBvdmVyIGl0IGFuZCBhbnkgZm9sbG93aW5nIHB1bmN0dWF0aW9uCisgICAgICAgKCg9IGNzID8uKQorCTs7IFNraXAgb3ZlciBhbGwgY2hhcmFjdGVycyBpbiB0aGUgb3BlcmFuZC4KKwkoc2tpcC1zeW50YXgtZm9yd2FyZCAiLiIpKQorCisgICAgICAgOzsgT3RoZXIgY2hhcjogU2tpcCBvdmVyIGl0LgorICAgICAgICh0CisJKGZvcndhcmQtY2hhciAxKSkpKQorCisgICAgIDs7IE9wZW4gcGFyZW50aGVzaXMKKyAgICAgKCg9IGNzID9cKCkKKyAgICAgIChlcmxhbmctcHVzaCAobGlzdCAnXCggdG9rZW4gKGN1cnJlbnQtY29sdW1uKSkgc3RhY2spCisgICAgICAoZm9yd2FyZC1jaGFyIDEpKQorCisgICAgIDs7IENsb3NlIHBhcmVudGhlc2lzCisgICAgICgoPSBjcyA/XCkpCisgICAgICAod2hpbGUgKG1lbXEgKGNhciAoY2FyIHN0YWNrKSkgJyh8fCAtPikpCisJKGVybGFuZy1wb3Agc3RhY2spKQorICAgICAgKGNvbmQgKChlcSAoY2FyIChjYXIgc3RhY2spKSAnXCgpCisJICAgICAoZXJsYW5nLXBvcCBzdGFjaykpCisJICAgICgobWVtcSAoY2FyIChjYXIgc3RhY2spKSAnKGljciBiZWdpbikpCisJICAgICAoZXJyb3IgIk1pc3NpbmcgYGVuZCciKSkKKwkgICAgKHQKKwkgICAgIChlcnJvciAiVW5iYWxhbmNlZCBwYXJlbnRoZXNpcyIpKSkKKyAgICAgIChmb3J3YXJkLWNoYXIgMSkpCisgICAgIAorICAgICA7OyBDaGFyYWN0ZXIgcXVvdGU6IFNraXAgaXQgYW5kIHRoZSBxdW90ZWQgY2hhci4KKyAgICAgKCg9IGNzID8vKQorICAgICAgKGZvcndhcmQtY2hhciAyKSkKKworICAgICA7OyBDaGFyYWN0ZXIgZXNjYXBlOiBTa2lwIGl0IGFuZCB0aGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAoKD0gY3MgP1xcKQorICAgICAgKGZvcndhcmQtY2hhciAxKQorICAgICAgKHNraXAtc3ludGF4LWZvcndhcmQgInciKSkKKworICAgICA7OyBFdmVyeXRoaW5nIGVsc2UKKyAgICAgKHQKKyAgICAgIChmb3J3YXJkLWNoYXIgMSkpKQorICAgIChsaXN0IHN0YWNrIHRva2VuIGNzIGluLXdoYXQpKSkKKworCisoZGVmdW4gZXJsYW5nLWNhbGN1bGF0ZS1zdGFjay1pbmRlbnQgKGluZGVudC1wb2ludCBzdGF0ZSkKKyAgIkZyb20gdGhlIGdpdmVuIGxhc3QgcG9zaXRpb24gYW5kIHN0YXRlIChzdGFjaykgY2FsY3VsYXRlIGluZGVudGF0aW9uLgorUmV0dXJuIG5pbCBpZiBpbnNpZGUgc3RyaW5nLCB0IGlmIGluIGEgY29tbWVudC4iCisgIChsZXQqICgoc3RhY2sgKGFuZCBzdGF0ZSAoY2FyIHN0YXRlKSkpCisJICh0b2tlbiAobnRoIDEgc3RhdGUpKQorCSAoc3RhY2stdG9wIChhbmQgc3RhY2sgKGNhciBzdGFjaykpKSkKKyAgICAoY29uZCAoKG51bGwgc3RhdGUpCQkJO05vIHN0YXRlCisJICAgMCkKKwkgICgobnRoIDMgc3RhdGUpCisJICAgOzsgUmV0dXJuIG5pbCBvciB0LgorCSAgIChlcSAobnRoIDMgc3RhdGUpICdjb21tZW50KSkKKwkgICgobnVsbCBzdGFjaykKKwkgICAoaWYgKGxvb2tpbmctYXQgIndoZW5bXl9hLXpBLVowLTldIikKKwkgICAgICAgZXJsYW5nLWluZGVudC1ndWFyZAorCSAgICAgMCkpCisJICAoKGVxIChjYXIgc3RhY2stdG9wKSAnXCgpCisJICAgOzsgRWxlbWVudCBvZiBsaXN0LCB0dXBsZSBvciBwYXJ0IG9mIGFuIGV4cHJlc3Npb24sCisJICAgKGlmIChudWxsIGVybGFuZy1hcmd1bWVudC1pbmRlbnQpCisJICAgICAgIDs7IGluZGVudCB0byBuZXh0IGNvbHVtbi4KKwkgICAgICAgKDErIChudGggMiBzdGFjay10b3ApKQorCSAgICAgKGdvdG8tY2hhciAobnRoIDEgc3RhY2stdG9wKSkKKwkgICAgIChjb25kICgobG9va2luZy1hdCAiWyh7XVxccyAqXFwoJFxcfCVcXCkiKQorCQkgICAgOzsgTGluZSBlbmRzIHdpdGggcGFyZW50aGVzaXMuCisJCSAgICAoKyAoZXJsYW5nLWluZGVudC1maW5kLXByZWNlZGluZy1leHByKQorCQkgICAgICAgZXJsYW5nLWFyZ3VtZW50LWluZGVudCkpCisJCSAgICh0CisJCSAgICA7OyBJbmRlbnQgdG8gdGhlIHNhbWUgY29sdW1uIGFzIHRoZSBmaXJzdAorCQkgICAgOzsgYXJndW1lbnQuCisJCSAgICAoZ290by1jaGFyICgxKyAobnRoIDEgc3RhY2stdG9wKSkpCisJCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQorCQkgICAgKGN1cnJlbnQtY29sdW1uKSkpKSkKKwkgICgoZXEgKGNhciBzdGFjay10b3ApICdpY3IpCisJICAgOzsgVGhlIGRlZmF1bHQgaW5kZW50YXRpb24gaXMgdGhlIGNvbHVtbiBvZiB0aGUgb3B0aW9uCisJICAgOzsgZGlyZWN0bHkgZm9sbG93aW5nIHRoZSBrZXl3b3JkLiAoVGhpcyBkb2VzIG5vdCBhcHBseSB0bworCSAgIDs7IGBjYXNlJy4pICBTaG91bGQgbm8gb3B0aW9uIGJlIG9uIHRoZSBzYW1lIGxpbmUsIHRoZQorCSAgIDs7IGluZGVudGF0aW9uIGlzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUga2V5d29yZCArCisJICAgOzsgYGVybGFuZy1pbmRlbnQtbGV2ZWwnLgorCSAgIDs7CisJICAgOzsgYGFmdGVyJyBzaG91bGQgYmUgaW5kZW50YXRlZCB0byB0aGUgc2F2ZSBsZXZlbCBhcyB0aGUKKwkgICA7OyBjb3JyZXNwb25kaW5nIHJlY2VpdmUuCisJICAgKGlmIChsb29raW5nLWF0ICJhZnRlclteX2EtekEtWjAtOV0iKQorCSAgICAgICAobnRoIDIgc3RhY2stdG9wKQorCSAgICAgKHNhdmUtZXhjdXJzaW9uCisJICAgICAgIChnb3RvLWNoYXIgKG50aCAxIHN0YWNrLXRvcCkpCisJICAgICAgIChpZiAobG9va2luZy1hdCAiY2FzZVteX2EtekEtWjAtOV0iKQorCQkgICAoKyAobnRoIDIgc3RhY2stdG9wKSBlcmxhbmctaW5kZW50LWxldmVsKQorCQkgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16IikKKwkJIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisJCSAoaWYgKG1lbXEgKGZvbGxvd2luZy1jaGFyKSAnKD8lID9cbikpCisJCSAgICAgKCsgKG50aCAyIHN0YWNrLXRvcCkgZXJsYW5nLWluZGVudC1sZXZlbCkKKwkJICAgKGN1cnJlbnQtY29sdW1uKSkpKSkpCisJICA7OyBSZWFsIGluZGVudGF0aW9uLCB3aGVyZSBvcGVyYXRvcnMgY3JlYXRlIGV4dHJhIGluZGVudGF0aW9uIGV0Yy4KKwkgICgobWVtcSAoY2FyIHN0YWNrLXRvcCkgJygtPiB8fCBiZWdpbikpCisJICAgKGdvdG8tY2hhciAobnRoIDEgc3RhY2stdG9wKSkKKwkgICA7OyBDaGVjayBpZiB0aGVyZSBpcyBtb3JlIGNvZGUgYWZ0ZXIgdGhlICctPicgb24gdGhlCisJICAgOzsgc2FtZSBsaW5lLiBJZiBzbyB1c2UgdGhpcyBpbmRlbnRhdGlvbiBhcyBiYXNlLCBlbHNlCisJICAgOzsgdXNlIHBhcmVudCBpbmRlbnRhdGlvbiArIDIgKiBsZXZlbCBhcyBiYXNlLgorCSAgIChsZXQgKChvZmYgZXJsYW5nLWluZGVudC1sZXZlbCkKKwkJIChza2lwIDIpKQorCSAgICAgKGNvbmQgKChudWxsIChjZHIgc3RhY2spKSkJOyBUb3AgbGV2ZWwgaW4gZnVuY3Rpb24uCisJCSAgICgoZXEgKGNhciBzdGFjay10b3ApICdiZWdpbikKKwkJICAgIChzZXRxIHNraXAgNSkpCisJCSAgICgoZXEgKGNhciBzdGFjay10b3ApICctPikKKwkJICAgIChzZXRxIG9mZiAoKiAyIGVybGFuZy1pbmRlbnQtbGV2ZWwpKSkpCisJICAgICAobGV0ICgoYmFzZSAoZXJsYW5nLWluZGVudC1maW5kLWJhc2Ugc3RhY2sgaW5kZW50LXBvaW50IG9mZiBza2lwKSkpCisJICAgICAgIDs7IExvb2sgYXQgbGFzdCB0aGluZyB0byBzZWUgaG93IHdlIGFyZSB0byBtb3ZlIHJlbGF0aXZlCisJICAgICAgIDs7IHRvIHRoZSBiYXNlLgorCSAgICAgICAoZ290by1jaGFyIHRva2VuKQorCSAgICAgICAoY29uZCAoKGxvb2tpbmctYXQgInx8XFx8LFxcfC0+XFx8Oi0iKQorCQkgICAgICBiYXNlKQorCQkgICAgICgoZXJsYW5nLWF0LWtleXdvcmQpCisJCSAgICAgICgrIChjdXJyZW50LWNvbHVtbikgZXJsYW5nLWluZGVudC1sZXZlbCkpCisJCSAgICAgKChvciAoPSAoY2hhci1zeW50YXggKGZvbGxvd2luZy1jaGFyKSkgPy4pCisJCQkgIChlcmxhbmctYXQtb3BlcmF0b3IpKQorCQkgICAgICAoKyBiYXNlIGVybGFuZy1pbmRlbnQtbGV2ZWwpKQorCQkgICAgICh0CisJCSAgICAgIChnb3RvLWNoYXIgaW5kZW50LXBvaW50KQorCQkgICAgICAoY29uZCAoKG1lbXEgKGZvbGxvd2luZy1jaGFyKSAnKD9cKCA/eykpCisJCQkgICAgIDs7IEZ1bmN0aW9uIGFwcGxpY2F0aW9uIG9yIHJlY29yZC4KKwkJCSAgICAgKCsgKGVybGFuZy1pbmRlbnQtZmluZC1wcmVjZWRpbmctZXhwcikKKwkJCQllcmxhbmctYXJndW1lbnQtaW5kZW50KSkKKwkJCSAgICA7OyBFbXB0eSBsaW5lLCBvciBlbmQ7IHRyZWF0IGl0IGFzIHRoZSBlbmQgb2YKKwkJCSAgICA7OyB0aGUgYmxvY2suICAoSGVyZSB3ZSBoYXZlIGEgY2hvaWNlOiBzaG91bGQKKwkJCSAgICA7OyB0aGUgdXNlciBiZSBmb3JjZWQgdG8gcmVpbmRlbnQgY29udGludWVkCisJCQkgICAgOzsgbGluZXMsIG9yIHNob3VsZCB0aGUgImVuZCIgYmUgcmVpbmRlbnRlZD8pCisJCQkgICAgKChsb29raW5nLWF0ICJcXChlbmRcXHxhZnRlclxcKVteX2EtekEtWjAtOV1cXHwkIikKKwkJCSAgICAgKGlmIChlcSAoY2FyIChjYXIgc3RhY2spKSAnLT4pCisJCQkJIChlcmxhbmctcG9wIHN0YWNrKSkKKwkJCSAgICAgKGlmIHN0YWNrCisJCQkJIChlcmxhbmctY2FkZHIgKGNhciBzdGFjaykpCisJCQkgICAgICAgMCkpCisJCQkgICAgOzsgQXZvaWQgdHJhdGluZyBjb21tZW50cyBhIGNvbnRpbnVlZCBsaW5lLgorCQkJICAgICgoPSAoZm9sbG93aW5nLWNoYXIpID8lKQorCQkJICAgICBiYXNlKQorCQkJICAgIDs7IENvbnRpbnVlZCBsaW5lIChlLmcuIGxpbmUgYmVnaW5uaW5nCisJCQkgICAgOzsgd2l0aCBhbiBvcGVyYXRvci4pCisJCQkgICAgKHQgKCsgYmFzZSBlcmxhbmctaW5kZW50LWxldmVsKSkpKSkpKSkKKwkgICgoZXEgKGNhciBzdGFjay10b3ApICd3aGVuKQorCSAgIChnb3RvLWNoYXIgKG50aCAxIHN0YWNrLXRvcCkpCisJICAgKGlmIChsb29raW5nLWF0ICJ3aGVuXFxzICpcXCgkXFx8JVxcKSIpCisJICAgICAgIChwcm9nbgorCQkgKGVybGFuZy1wb3Agc3RhY2spCisJCSAoaWYgKGFuZCBzdGFjayAoZXEgKG50aCAwIChjYXIgc3RhY2spKSAnaWNyKSkKKwkJICAgICAocHJvZ24KKwkJICAgICAgIChnb3RvLWNoYXIgKG50aCAxIChjYXIgc3RhY2spKSkKKwkJICAgICAgICgrIChudGggMiAoY2FyIHN0YWNrKSkgZXJsYW5nLWluZGVudC1ndWFyZAorCQkJICA7OyByZWNlaXZlIFhZWiAgICBvciAgICByZWNlaXZlCisJCQkgIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICBYWVoKKwkJCSAgKGlmIChsb29raW5nLWF0ICJbYS16XStcXHMgKlxcKCRcXHwlXFwpIikKKwkJCSAgICAgIGVybGFuZy1pbmRlbnQtbGV2ZWwKKwkJCSAgICAoKiAyIGVybGFuZy1pbmRlbnQtbGV2ZWwpKSkpCisJCSAgIGVybGFuZy1pbmRlbnQtZ3VhcmQpKQorCSAgICAgOzsgIndoZW4iIGlzIGZvbGxvd2VkIGJ5IGNvZGUsIGxldCdzIGluZGVudCB0byB0aGUgc2FtZQorCSAgICAgOzsgY29sdW1uLgorCSAgICAgKGZvcndhcmQtY2hhciA0KQkJOyBTa2lwICJ3aGVuIgorCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKKwkgICAgIChjdXJyZW50LWNvbHVtbikpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctaW5kZW50LWZpbmQtYmFzZSAoc3RhY2sgaW5kZW50LXBvaW50ICZvcHRpb25hbCBvZmZzZXQgc2tpcCkKKyAgIkZpbmQgdGhlIGJhc2UgY29sdW1uIGZvciBjdXJyZW50IHN0YWNrLiIKKyAgKG9yIHNraXAgKHNldHEgc2tpcCAyKSkKKyAgKG9yIG9mZnNldCAoc2V0cSBvZmZzZXQgZXJsYW5nLWluZGVudC1sZXZlbCkpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQqICgoc3RhY2stdG9wIChjYXIgc3RhY2spKSkKKyAgICAgIChnb3RvLWNoYXIgKG50aCAxIHN0YWNrLXRvcCkpCisgICAgICAoZm9yd2FyZC1jaGFyIHNraXApCisgICAgICAoaWYgKGxvb2tpbmctYXQgIlxccyAqXFwoJFxcfCVcXCkiKQorCSAgKHByb2duCisJICAgIChpZiAobWVtcSAoY2FyIHN0YWNrLXRvcCkgJygtPiB8fCkpCisJCShlcmxhbmctcG9wIHN0YWNrKSkKKwkgICAgOzsgVGFrZSBwYXJlbnQgaWRlbnRhdGlvbiArIG9mZnNldCwKKwkgICAgOzsgZWxzZSBqdXN0IGVybGFuZy1pbmRlbnQtbGV2ZWwgaWYgbm8gcGFyZW50CisJICAgIChpZiBzdGFjaworCQkoKyAoZXJsYW5nLWNhZGRyIChjYXIgc3RhY2spKQorCQkgICBvZmZzZXQpCisJICAgICAgZXJsYW5nLWluZGVudC1sZXZlbCkpCisJKGVybGFuZy1za2lwLWJsYW5rIGluZGVudC1wb2ludCkKKwkoY3VycmVudC1jb2x1bW4pKSkpKQorCisKKzs7IERvZXMgbm90IGhhbmRsZSBgYmVnaW4nIC4uIGBlbmQnLgorKGRlZnVuIGVybGFuZy1pbmRlbnQtZmluZC1wcmVjZWRpbmctZXhwciAoKQorICAiUmV0dXJuIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHByZWNlZGluZyBleHByZXNzaW9uLgorVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHByZWNlZGluZyBleHByZXNzaW9uIGlzIGVpdGhlciBzaW1wbGUKK1woaS5lLiBhbiBhdG9tKSBvciBwYXJlbnRoZXNpemVkLiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGZvcndhcmQtc2V4cCAtMSkKKyAgICAobGV0ICgoY29sIChjdXJyZW50LWNvbHVtbikpKQorICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCisgICAgICA7OyBOZWVkZWQgdG8gbWF0Y2ggdGhlIGNvbG9uIGluICInZm9vJzonYmFyJyIuCisgICAgICAoaWYgKG5vdCAobWVtcSAocHJlY2VkaW5nLWNoYXIpICcoPyMgPzopKSkKKwkgIGNvbAorCShiYWNrd2FyZC1jaGFyIDEpCisJKGZvcndhcmQtc2V4cCAtMSkKKwkoY3VycmVudC1jb2x1bW4pKSkpKQorCisKKyhkZWZ1biBlcmxhbmctc2tpcC1ibGFuayAoJm9wdGlvbmFsIGxpbSkKKyAgIlNraXAgb3ZlciB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cyB1bnRpbCBsaW1pdCByZWFjaGVkLiIKKyAgKG9yIGxpbSAoc2V0cSBsaW0gKHBvaW50LW1heCkpKQorICAobGV0IChzdG9wKQorICAgICh3aGlsZSAoYW5kIChub3Qgc3RvcCkgKDwgKHBvaW50KSBsaW0pKQorICAgICAgKGNvbmQgKCg9IChmb2xsb3dpbmctY2hhcikgPyUpCisJICAgICAoc2tpcC1jaGFycy1mb3J3YXJkICJeXG4iIGxpbSkpCisJICAgICgoPSAoZm9sbG93aW5nLWNoYXIpID9cbikKKwkgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIlxuIiBsaW0pKQorCSAgICAoKGxvb2tpbmctYXQgIlxccyAiKQorCSAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiXFxTICIgbGltICdtb3ZlKQorCQkgKGZvcndhcmQtY2hhciAtMSkpKQorCSAgICAodAorCSAgICAgKHNldHEgc3RvcCB0KSkpKQorICAgIHN0b3ApKQorCisoZGVmdW4gZXJsYW5nLWF0LWtleXdvcmQgKCkKKyAgIkFyZSB3ZSBsb29raW5nIGF0IGFuIEVybGFuZyBrZXl3b3JkIHdoaWNoIHdpbGwgaW5jcmVhc2UgaW5kZW50YXRpb24/IgorICAobG9va2luZy1hdCAoY29uY2F0ICJcXCh3aGVuXFx8aWZcXHxmdW5cXHxjYXNlXFx8YmVnaW5cXHxxdWVyeVxcfCIKKwkJICAgICAgIm9mXFx8cmVjZWl2ZVxcfGFmdGVyXFx8Y2F0Y2hcXClbXl9hLXpBLVowLTldIikpKQorCisoZGVmdW4gZXJsYW5nLWF0LW9wZXJhdG9yICgpCisgICJBcmUgd2UgbG9va2luZyBhdCBhbiBFcmxhbmcgb3BlcmF0b3I/IgorICAobG9va2luZy1hdAorICAgIlxcKGJub3RcXHxkaXZcXHxtb2RcXHxiYW5kXFx8Ym9yXFx8YnhvclxcfGJzbFxcfGJzclxcKVteX2EtekEtWjAtOV0iKSkKKworKGRlZnVuIGVybGFuZy1jb21tZW50LWluZGVudCAoKQorICAiQ29tcHV0ZSBlcmxhbmcgY29tbWVudCBpbmRlbnRhdGlvbi4KKworVXNlZCBib3RoIGJ5IGBpbmRlbnQtZm9yLWNvbW1lbnQnIGFuZCB0aGUgZXJsYW5nIHNwZWNpZmljIGluZGVudGF0aW9uCitjb21tYW5kcy4iCisgIChjb25kICgobG9va2luZy1hdCAiJSUlIikgMCkKKwkoKGxvb2tpbmctYXQgIiUlIikKKwkgKG9yIChlcmxhbmctY2FsY3VsYXRlLWluZGVudCkKKwkgICAgIChjdXJyZW50LWluZGVudGF0aW9uKSkpCisJKHQKKwkgKHNhdmUtZXhjdXJzaW9uCisJICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCisJICAgKG1heCAoaWYgKGJvbHApIDAgKDErIChjdXJyZW50LWNvbHVtbikpKQorCQljb21tZW50LWNvbHVtbikpKSkpCisMCis7OzsgRXJsYW5nIG1vdmVtZW50IGNvbW1hbmRzCisKKzs7IEFsbCBjb21tYW5kcyBiZWxvdyB3b3JrIGFzIG1vdmVtZW50IGNvbW1hbmRzLiAgSS5lLiBpZiB0aGUgcG9pbnQgaXMKKzs7IGF0IHRoZSBlbmQgb2YgdGhlIGNsYXVzZSwgYW5kIHRoZSBjb21tYW5kIGBlcmxhbmctZW5kLW9mLWNsYXVzZScgaXMKKzs7IGV4ZWN1dGVkLCB0aGUgcG9pbnQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGUgTkVYVCBjbGF1c2UuICAoVGhpcworOzsgbWltaWNzIHRoZSBiZWhhdmlvdXIgb2YgYGVuZC1vZi1kZWZ1bicuKQorOzsKKzs7IFBlcnNvbmFsbHkgSSB3b3VsZCBsaWtlIHRvIHJld3JpdGUgdGhlbSB0byBiZSAicHVyZSIsIGFuZCBhZGQgYSBzZXQKKzs7IG9mIG1vdmVtZW50IGZ1bmN0aW9ucywgbGlrZSBgZXJsYW5nLW5leHQtY2xhdXNlJywKKzs7IGBlcmxhbmctcHJldmlvdXMtY2xhdXNlJywgYW5kIHRoZSBzYW1lIGZvciBmdW5jdGlvbnMuCis7OworOzsgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgaXQgaG9wZWxlc3MgdG8gdXNlIHRoZSBmdW5jdGlvbnMgYXMKKzs7IHN1YnJvdXRpbmVzIGluIG1vcmUgY29tcGxleCBjb21tYW5kcy4gICAvYW5kZXJzbAorCisoZGVmdW4gZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgKCZvcHRpb25hbCBhcmcpCisgICJNb3ZlIGJhY2t3YXJkIHRvIHByZXZpb3VzIHN0YXJ0IG9mIGNsYXVzZS4KK1dpdGggYXJndW1lbnQsIGRvIHRoaXMgdGhhdCBtYW55IHRpbWVzLgorUmV0dXJuIHQgdW5sZXNzIHNlYXJjaCBzdG9wcyBkdWUgdG8gZW5kIG9mIGJ1ZmZlci4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChvciBhcmcgKHNldHEgYXJnIDEpKQorICAoaWYgKDwgYXJnIDApCisgICAgICA7OyBTdGVwIGJhY2sgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSwgdW5sZXNzIHdlIGFyZSBhdAorICAgICAgOzsgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBtb3ZlIGlzCisgICAgICA7OyB0aGF0IHRoZSByZWdleHAgYmVsb3cgaW5jbHVkZXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICAgOzsgcHJldmlvdXMgbGluZS4KKyAgICAgIChpZiAoYm9icCkKKwkgIChvciAobG9va2luZy1hdCAiXG4iKQorCSAgICAgIChmb3J3YXJkLWNoYXIgMSkpCisJKGZvcndhcmQtY2hhciAtMSkKKwkoaWYgKGxvb2tpbmctYXQgIlxcYFxuIikKKwkgICAgKGZvcndhcmQtY2hhciAxKSkpKQorICA7OyBUaGUgcmVnZXhwIG1hdGNoZXMgYSBmdW5jdGlvbiBoZWFkZXIgdGhhdCBpc24ndAorICA7OyBpbmNsdWRlZCBpbiBhIHN0cmluZy4KKyAgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgIlxcKFxcYFxcfFxcYFxuXFx8W15cXF1cblxcKVxcKFthLXpdXFx8J1xcfC1cXCkiCisJCQkgIG5pbCAnbW92ZSAoLSBhcmcpKQorICAgICAgIChsZXQgKChiZWcgKG1hdGNoLWJlZ2lubmluZyAyKSkpCisJIChhbmQgYmVnIChnb3RvLWNoYXIgYmVnKSkKKwkgdCkpKQorCisoZGVmdW4gZXJsYW5nLWVuZC1vZi1jbGF1c2UgKCZvcHRpb25hbCBhcmcpCisgICJNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY2xhdXNlLgorV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAob3IgYXJnIChzZXRxIGFyZyAxKSkKKyAgKHdoaWxlIChhbmQgKGxvb2tpbmctYXQgIlsgXHRdKlslXG5dIikKKwkgICAgICAoemVyb3AgKGZvcndhcmQtbGluZSAxKSkpKQorICA7OyBNb3ZlIHRvIHRoZSBuZXh0IGNsYXVzZS4KKyAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlICgtIGFyZykpCisgIChiZWdpbm5pbmctb2YtbGluZSkgIDs7IEp1c3QgdG8gYmUgc3VyZS4uLgorICAobGV0ICgoY29udGludWUgdCkpCisgICAgKHdoaWxlIChhbmQgKG5vdCAoYm9icCkpIGNvbnRpbnVlKQorICAgICAgKGZvcndhcmQtbGluZSAtMSkKKyAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisgICAgICAoaWYgKGxvb2tpbmctYXQgIlslXG5dIikKKwkgIG5pbAorCShlbmQtb2YtbGluZSkKKwkoc2V0cSBjb250aW51ZSBuaWwpKSkpKQorCisoZGVmdW4gZXJsYW5nLW1hcmstY2xhdXNlICgpCisgICJQdXQgbWFyayBhdCBlbmQgb2YgY2xhdXNlLCBwb2ludCBhdCBiZWdpbm5pbmcuIgorICAoaW50ZXJhY3RpdmUpCisgIChwdXNoLW1hcmsgKHBvaW50KSkKKyAgKGVybGFuZy1lbmQtb2YtY2xhdXNlIDEpCisgIDs7IFNldHMgdGhlIHJlZ2lvbi4gSW4gRW1hY3MgMTkgYW5kIFhFbWFjcywgd2Ugd2FudHMgdG8gYWN0aXZhdGUKKyAgOzsgdGhlIHJlZ2lvbi4KKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKHB1c2gtbWFyayAocG9pbnQpIG5pbCB0KQorICAgIChlcnJvciAocHVzaC1tYXJrIChwb2ludCkpKSkKKyAgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpCisgIDs7IFRoZSBhYm92ZSBmdW5jdGlvbiBkZWFjdGl2YXRlcyB0aGUgbWFyay4KKyAgKGlmIChib3VuZHAgJ2RlYWN0aXZhdGUtbWFyaykKKyAgICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkgJ2RlYWN0aXZhdGUtbWFyayBuaWwpKSkKKworKGRlZnVuIGVybGFuZy1iZWdpbm5pbmctb2YtZnVuY3Rpb24gKCZvcHRpb25hbCBhcmcpCisgICJNb3ZlIGJhY2t3YXJkIHRvIHByZXZpb3VzIHN0YXJ0IG9mIGZ1bmN0aW9uLgorV2l0aCBwb3NpdGl2ZSBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuCitXaXRoIG5lZ2F0aXZlIGFyZ3VtZW50LCBzZWFyY2ggZm9yd2FyZC4KKworUmV0dXJuIHQgdW5sZXNzIHNlYXJjaCBzdG9wcyBkdWUgdG8gZW5kIG9mIGJ1ZmZlci4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChvciBhcmcgKHNldHEgYXJnIDEpKQorICAoY29uZAorICAgOzsgU2VhcmNoIGJhY2t3YXJkCisgICAoKD4gYXJnIDApCisgICAgKHdoaWxlIChhbmQgKD4gYXJnIDApCisJCShhbmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpCisJCSAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCisJCQkgICAobmFtZSAoZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24pKQorCQkJICAgKGFyaXR5IChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5KSkpCisJCSAgICAgICA7OyBOb3RlOiAiYXJpdHkiIGlzIG5pbCBmb3IgZS5nLiAiLWltcG9ydCIsIGhlbmNlCisJCSAgICAgICA7OyB0d28gIi1pbXBvcnQiIGNsYXVzZXMgYXJlIG5vdCBjb25zaWRlcmVkIHRvCisJCSAgICAgICA7OyBiZSBwYXJ0IG9mIHRoZSBzYW1lIGZ1bmN0aW9uLgorCQkgICAgICAgKHdoaWxlIChhbmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpCisJCQkJICAgKHN0cmluZy1lcXVhbCBuYW1lCisJCQkJCQkgKGVybGFuZy1uYW1lLW9mLWZ1bmN0aW9uKSkKKwkJCQkgICBhcml0eQorCQkJCSAgIChlcXVhbCBhcml0eQorCQkJCQkgIChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5KSkpCisJCQkgKHNldHEgc3RhcnQgKHBvaW50KSkpCisJCSAgICAgICAoZ290by1jaGFyIHN0YXJ0KQorCQkgICAgICAgdCkpKQorICAgICAgKHNldHEgYXJnICgxLSBhcmcpKSkpCisgICA7OyBTZWFyY2ggZm9yd2FyZAorICAgKCg8IGFyZyAwKQorICAgIChlbmQtb2YtbGluZSkKKyAgICAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UgMSkKKyAgICA7OyBTdGVwIC1hcmcgZnVuY3Rpb25zIGZvcndhcmQuCisgICAgKHdoaWxlIChhbmQgKDwgYXJnIDApCisJCTs7IFN0ZXAgb25lIGZ1bmN0aW9uIGZvcndhcmQsIG9yIHN0b3AgaWYgdGhlIGVuZCBvZgorCQk7OyB0aGUgYnVmZmVyIHdhcyByZWFjaGVkLiAgUmV0dXJuIHQgaWYgd2UgZm91bmQgdGhlCisJCTs7IGZ1bmN0aW9uLgorCQkobGV0ICgobmFtZSAoZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24pKQorCQkgICAgICAoYXJpdHkgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHkpKQorCQkgICAgICAoZm91bmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIC0xKSkpCisJCSAgKHdoaWxlIChhbmQgZm91bmQKKwkJCSAgICAgIChzdHJpbmctZXF1YWwgbmFtZSAoZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24pKQorCQkJICAgICAgYXJpdHkKKwkJCSAgICAgIChlcXVhbCBhcml0eQorCQkJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJpdHkpKSkKKwkJICAgIChzZXRxIGZvdW5kIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSAtMSkpKQorCQkgIGZvdW5kKSkKKyAgICAgIChzZXRxIGFyZyAoMSsgYXJnKSkpKSkKKyAgKHplcm9wIGFyZykpCisKKworKGRlZnVuIGVybGFuZy1lbmQtb2YtZnVuY3Rpb24gKCZvcHRpb25hbCBhcmcpCisgICJNb3ZlIGZvcndhcmQgdG8gbmV4dCBlbmQgb2YgZnVuY3Rpb24uCisKK1dpdGggYXJndW1lbnQsIGRvIHRoaXMgdGhhdCBtYW55IHRpbWVzLgorV2l0aCBuZWdhdGl2ZSBhcmd1bWVudCBnbyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChvciBhcmcgKHNldHEgYXJnIDEpKQorICAobGV0ICgoZmlyc3QgdCkpCisgICAgOzsgRm9yd2FyZAorICAgICh3aGlsZSAoYW5kICg+IGFyZyAwKSAoPCAocG9pbnQpIChwb2ludC1tYXgpKSkKKyAgICAgIChsZXQgKChwb3MgKHBvaW50KSkpCisJKHdoaWxlIChwcm9nbgorCQkgKGlmIChhbmQgZmlyc3QKKwkJCSAgKHByb2duCisJCQkgICAgKGZvcndhcmQtY2hhciAxKQorCQkJICAgIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSAxKSkpCisJCSAgICAgbmlsCisJCSAgIChvciAoYm9icCkgKGZvcndhcmQtY2hhciAtMSkpCisJCSAgIChlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZSAtMSkpCisJCSAoc2V0cSBmaXJzdCBuaWwpCisJCSAoZXJsYW5nLXBhc3Mtb3Zlci1mdW5jdGlvbikKKwkJIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisJCSAoaWYgKGxvb2tpbmctYXQgIlslXG5dIikKKwkJICAgICAoZm9yd2FyZC1saW5lIDEpKQorCQkgKDw9IChwb2ludCkgcG9zKSkpKQorICAgICAgKHNldHEgYXJnICgxLSBhcmcpKSkKKyAgICA7OyBCYWNrd2FyZAorICAgICh3aGlsZSAoPCBhcmcgMCkKKyAgICAgIChsZXQgKChwb3MgKHBvaW50KSkpCisJKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlIDEpCisJKGVybGFuZy1wYXNzLW92ZXItZnVuY3Rpb24pCisJKGZvcndhcmQtbGluZSAxKQorCShpZiAoPj0gKHBvaW50KSBwb3MpCisJICAgIChpZiAoZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbiAyKQorCQkocHJvZ24KKwkJICAoZXJsYW5nLXBhc3Mtb3Zlci1mdW5jdGlvbikKKwkJICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHQiKQorCQkgIChpZiAobG9va2luZy1hdCAiWyVcbl0iKQorCQkgICAgICAoZm9yd2FyZC1saW5lIDEpKSkKKwkgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKSkpKQorICAgICAgKHNldHEgYXJnICgxKyBhcmcpKSkpKQorCisoZGVmdW4gZXJsYW5nLW1hcmstZnVuY3Rpb24gKCkKKyAgIlB1dCBtYXJrIGF0IGVuZCBvZiBmdW5jdGlvbiwgcG9pbnQgYXQgYmVnaW5uaW5nLiIKKyAgKGludGVyYWN0aXZlKQorICAocHVzaC1tYXJrIChwb2ludCkpCisgIChlcmxhbmctZW5kLW9mLWZ1bmN0aW9uIDEpCisgIDs7IFNldHMgdGhlIHJlZ2lvbi4gSW4gRW1hY3MgMTkgYW5kIFhFbWFjcywgd2Ugd2FudHMgdG8gYWN0aXZhdGUKKyAgOzsgdGhlIHJlZ2lvbi4KKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKHB1c2gtbWFyayAocG9pbnQpIG5pbCB0KQorICAgIChlcnJvciAocHVzaC1tYXJrIChwb2ludCkpKSkKKyAgKGVybGFuZy1iZWdpbm5pbmctb2YtZnVuY3Rpb24gMSkKKyAgOzsgVGhlIGFib3ZlIGZ1bmN0aW9uIGRlYWN0aXZhdGVzIHRoZSBtYXJrLgorICAoaWYgKGJvdW5kcCAnZGVhY3RpdmF0ZS1tYXJrKQorICAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KSAnZGVhY3RpdmF0ZS1tYXJrIG5pbCkpKQorCisoZGVmdW4gZXJsYW5nLXBhc3Mtb3Zlci1mdW5jdGlvbiAoKQorICAod2hpbGUgKHByb2duCisJICAgKGVybGFuZy1za2lwLWJsYW5rKQorCSAgIChhbmQgKG5vdCAobG9va2luZy1hdCAiXFwuXFwoXFxzIFxcfFxuXFx8XFxzPFxcKSIpKQorCQkobm90IChlb2JwKSkpKQorICAgIChmb3J3YXJkLXNleHAgMSkpCisgIChpZiAobm90IChlb2JwKSkKKyAgICAgIChmb3J3YXJkLWNoYXIgMSkpKQorCisoZGVmdW4gZXJsYW5nLW5hbWUtb2YtZnVuY3Rpb24gKCkKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgOzsgU2tpcCBvdmVyIGF0dHJpYnV0ZSBsZWFkZXIuCisgICAgKGlmIChsb29raW5nLWF0ICItWyBcdF0qIikKKwkocmUtc2VhcmNoLWZvcndhcmQgIi1bIFx0XSoiIG5pbCAnbW92ZSkpCisgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQorICAgICAgKGZvcndhcmQtc2V4cCAxKQorICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgc3RhcnQgKHBvaW50KSkpKSkKKworDAorOzs7IE1pc2NlbGxhbmVvdXMKKworKGRlZnVuIGVybGFuZy1maWxsLXBhcmFncmFwaCAoJm9wdGlvbmFsIGp1c3RpZnkpCisgICJMaWtlIFxcW2ZpbGwtcGFyYWdyYXBoXSwgYnV0IGhhbmRsZSBFcmxhbmcgY29tbWVudHMuCitJZiBhbnkgb2YgdGhlIGN1cnJlbnQgbGluZSBpcyBhIGNvbW1lbnQsIGZpbGwgdGhlIGNvbW1lbnQgb3IgdGhlCitwYXJhZ3JhcGggb2YgaXQgdGhhdCBwb2ludCBpcyBpbiwgcHJlc2VydmluZyB0aGUgY29tbWVudCdzIGluZGVudGF0aW9uCithbmQgaW5pdGlhbCBgJSc6cy4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChsZXQgKChoYXMtY29tbWVudCBuaWwpCisJOzsgSWYgaGFzLWNvbW1lbnQsIHRoZSBhcHByb3ByaWF0ZSBmaWxsLXByZWZpeCBmb3IgdGhlIGNvbW1lbnQuCisJY29tbWVudC1maWxsLXByZWZpeCkKKyAgICA7OyBGaWd1cmUgb3V0IHdoYXQga2luZCBvZiBjb21tZW50IHdlIGFyZSBsb29raW5nIGF0LgorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQorICAgICAgKGNvbmQKKyAgICAgICA7OyBGaW5kIHRoZSBjb21tYW5kIHByZWZpeC4KKyAgICAgICAoKGxvb2tpbmctYXQgKGNvbmNhdCAiXFxzICoiIGNvbW1lbnQtc3RhcnQtc2tpcCkpCisJKHNldHEgaGFzLWNvbW1lbnQgdCkKKwkoc2V0cSBjb21tZW50LWZpbGwtcHJlZml4IChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMCkKKwkJCQkJCSAgICAobWF0Y2gtZW5kIDApKSkpCisgICAgICAgOzsgQSBsaW5lIHdpdGggc29tZSBjb2RlLCBmb2xsb3dlZCBieSBhIGNvbW1lbnQ/ICBSZW1lbWJlciB0aGF0IHRoZQorICAgICAgIDs7ICUgd2hpY2ggc3RhcnRzIHRoZSBjb21tZW50IHNob3VsZG4ndCBiZSBwYXJ0IG9mIGEgc3RyaW5nIG9yCisgICAgICAgOzsgY2hhcmFjdGVyLgorICAgICAgICgocHJvZ24KKwkgICh3aGlsZSAobm90IChsb29raW5nLWF0ICIlXFx8JCIpKQorCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICJeJVxuXCJcXFxcIikKKwkgICAgKGNvbmQKKwkgICAgICgoZXEgKGNoYXItYWZ0ZXIgKHBvaW50KSkgP1xcKSAoZm9yd2FyZC1jaGFyIDIpKQorCSAgICAgKChlcSAoY2hhci1hZnRlciAocG9pbnQpKSA/XCIpIChmb3J3YXJkLXNleHAgMSkpKSkKKwkgIChsb29raW5nLWF0IGNvbW1lbnQtc3RhcnQtc2tpcCkpCisJKHNldHEgaGFzLWNvbW1lbnQgdCkKKwkoc2V0cSBjb21tZW50LWZpbGwtcHJlZml4CisJICAgICAgKGNvbmNhdCAobWFrZS1zdHJpbmcgKGN1cnJlbnQtY29sdW1uKSA/ICkKKwkJICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkpKSkpCisgICAgKGlmIChub3QgaGFzLWNvbW1lbnQpCisJKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpCisgICAgICA7OyBOYXJyb3cgdG8gaW5jbHVkZSBvbmx5IHRoZSBjb21tZW50LCBhbmQgdGhlbiBmaWxsIHRoZSByZWdpb24uCisgICAgICAoc2F2ZS1yZXN0cmljdGlvbgorCShuYXJyb3ctdG8tcmVnaW9uCisJIDs7IEZpbmQgdGhlIGZpcnN0IGxpbmUgd2Ugc2hvdWxkIGluY2x1ZGUgaW4gdGhlIHJlZ2lvbiB0byBmaWxsLgorCSAoc2F2ZS1leGN1cnNpb24KKwkgICAod2hpbGUgKGFuZCAoemVyb3AgKGZvcndhcmQtbGluZSAtMSkpCisJCSAgICAgICAobG9va2luZy1hdCAiXlxccyAqJSIpKSkKKwkgICA7OyBXZSBtYXkgaGF2ZSBnb25lIHRvIGZhci4gIEdvIGZvcndhcmQgYWdhaW4uCisJICAgKG9yIChsb29raW5nLWF0ICJeXFxzIColIikKKwkgICAgICAgKGZvcndhcmQtbGluZSAxKSkKKwkgICAocG9pbnQpKQorCSA7OyBGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IGxpbmUgcGFzdCB0aGUgcmVnaW9uIHRvIGZpbGwuCisJIChzYXZlLWV4Y3Vyc2lvbgorCSAgICh3aGlsZSAocHJvZ24gKGZvcndhcmQtbGluZSAxKQorCQkJIChsb29raW5nLWF0ICJeXFxzIColIikpKQorCSAgIChwb2ludCkpKQorCTs7IExpbmVzIHdpdGggb25seSAlIG9uIHRoZW0gY2FuIGJlIHBhcmFncmFwaCBib3VuZGFyaWVzLgorCShsZXQgKChwYXJhZ3JhcGgtc3RhcnQgKGNvbmNhdCBwYXJhZ3JhcGgtc3RhcnQgIlxcfF5bIFx0JV0qJCIpKQorCSAgICAgIChwYXJhZ3JhcGgtc2VwYXJhdGUgKGNvbmNhdCBwYXJhZ3JhcGgtc3RhcnQgIlxcfF5bIFx0JV0qJCIpKQorCSAgICAgIChmaWxsLXByZWZpeCBjb21tZW50LWZpbGwtcHJlZml4KSkKKwkgIChmaWxsLXBhcmFncmFwaCBqdXN0aWZ5KSkpKSkpCisKKworKGRlZnVuIGVybGFuZy11bmNvbW1lbnQtcmVnaW9uIChiZWcgZW5kKQorICAiVW5jb21tZW50IGFsbCBjb21tZW50ZWQgbGluZXMgaW4gdGhlIHJlZ2lvbi4iCisgIChpbnRlcmFjdGl2ZSAiciIpCisgIChjb21tZW50LXJlZ2lvbiBiZWcgZW5kIC0xKSkKKworCisoZGVmdW4gZXJsYW5nLWdlbmVyYXRlLW5ldy1jbGF1c2UgKCkKKyAgIkNyZWF0ZSBhZGRpdGlvbmFsIEVybGFuZyBjbGF1c2UgaGVhZGVyLgorCitQYXJzZXMgdGhlIHNvdXJjZSBmaWxlIGZvciB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBFcmxhbmcgZnVuY3Rpb24uCitDcmVhdGUgdGhlIGhlYWRlciBjb250YWluaW5nIHRoZSBuYW1lLCBBIHBhaXIgb2YgcGFyZW50aGVzZXMsCithbmQgYW4gYXJyb3cuIFRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUKK2ZpcnN0IHBhcmVudGhlc2lzIGlzIHByZXNlcnZlZC4gIFRoZSBwb2ludCBpcyBwbGFjZWQgYmV0d2VlbgordGhlIHBhcmVudGhlc2VzLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgobmFtZSAoc2F2ZS1leGN1cnNpb24KKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tbmFtZSB0KSkpKQorCShhcnJvdyAoc2F2ZS1leGN1cnNpb24KKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tYXJyb3cpKSkpKQorICAgIChpZiAob3IgKG51bGwgYXJyb3cpIChudWxsIG5hbWUpKQorCShlcnJvciAiQ2FuJ3QgZmluZCBuYW1lIG9mIGN1cnJlbnQgRXJsYW5nIGZ1bmN0aW9uLiIpKQorICAgIChpZiAoYW5kIChib2xwKSAoZW9scCkpCisJbmlsCisgICAgICAoZW5kLW9mLWxpbmUpCisgICAgICAobmV3bGluZSkpCisgICAgKGluc2VydCBuYW1lKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGluc2VydCAoY29uY2F0ICIpICIgYXJyb3cpKSkKKyAgICAoaWYgZXJsYW5nLW5ldy1jbGF1c2Utd2l0aC1hcmd1bWVudHMKKwkoZXJsYW5nLWNsb25lLWFyZ3VtZW50cykpKSkKKworCisoZGVmdW4gZXJsYW5nLWNsb25lLWFyZ3VtZW50cyAoKQorICAiSW5zZXJ0LCBhdCB0aGUgcG9pbnQsIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBwcmV2aW91cyBjbGF1c2UuCisKK1RoZSBtYXJrIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnNlcnRlZCB0ZXh0LCB0aGUgcG9pbnQKK2F0IHRoZSBlbmQuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChhcmdzIChzYXZlLWV4Y3Vyc2lvbgorCQkoYmVnaW5uaW5nLW9mLWxpbmUpCisJCShhbmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorCQkgICAgIChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyZ3VtZW50cykpKSkKKwkocCAocG9pbnQpKSkKKyAgICAoaWYgKG51bGwgYXJncykKKwkoZXJyb3IgIkNhbid0IGNsb25lIGFyZ3VtZW50IGxpc3QuIikpCisgICAgKGluc2VydCBhcmdzKQorICAgIChzZXQtbWFyayBwKSkpCisMCis7OzsgSW5mb3JtYXRpb24gcmV0cmVpdmFsIGZ1bmN0aW9ucy4KKworKGRlZnVuIGVybGFuZy1idWZmZXItc3Vic3RyaW5nIChiZWcgZW5kKQorICAiTGlrZSBgYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzJy4KK0FsdGhvdWdoLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIG9uIGFsbCB2ZXJzaW9ucyBvZiBFbWFjcy4iCisgIChpZiAoZmJvdW5kcCAnYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzKQorICAgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzKSBiZWcgZW5kKQorICAgIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1tb2R1bGUgKCkKKyAgIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFzIHNwZWNpZmllZCBieSBgLW1vZHVsZScuCisKK1JldHVybiBuaWwgaWYgZmlsZSBjb250YWlucyBubyBgLW1vZHVsZScgYXR0cmlidXRlLiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICh3aWRlbikKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAobGV0ICgobWQgKG1hdGNoLWRhdGEpKSkKKwkodW53aW5kLXByb3RlY3QKKwkgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZAorCQkgKGNvbmNhdCAiXi1tb2R1bGVcXHMgKihcXHMgKlxcKFxcKCIKKwkJCSBlcmxhbmctYXRvbS1yZWdleHAKKwkJCSAiXFwpP1xcKVxccyAqKVxccyAqXFwuIikKKwkJIChwb2ludC1tYXgpIHQpCisJCShlcmxhbmctcmVtb3ZlLXF1b3RlcworCQkgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMSkKKwkJCQkJICAobWF0Y2gtZW5kIDEpKSkKKwkgICAgICBuaWwpCisJICAoc3RvcmUtbWF0Y2gtZGF0YSBtZCkpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZSAoJm9wdGlvbmFsIGZpbGUpCisgICJFeHRyYWN0IHRoZSBtb2R1bGUgbmFtZSBmcm9tIGEgZmlsZSBuYW1lLgorCitGaXJzdCwgdGhlIGRpcmVjdG9yeSBwYXJ0IGlzIHJlbW92ZWQuICBTZWNvbmQsIHRoZSBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUKK21hdGNoaW5nIGBlcmxhbmctZmlsZS1uYW1lLWV4dGVuc2lvbi1yZWdleHAnIGlzIHJlbW92ZWQuCisKK1Nob3VsZCB0aGUgbWF0Y2ggZmFpbCwgbmlsIGlzIHJldHVybmVkLgorCitCeSBtb2RpZnlpbmcgYGVybGFuZy1maWxlLW5hbWUtZXh0ZW5zaW9uLXJlZ2V4cCcgdG8gbWF0Y2ggZmlsZXMgb3RoZXIKK3RoYW4gRXJsYW5nIHNvdXJjZSBmaWxlcywgRXJsYW5nIHNwZWNpZmljIGZ1bmN0aW9ucyBjb3VsZCBiZSBhcHBsaWVkIG9uCitub24tRXJsYW5nIGZpbGVzLiAgTW9zdCBub3RhYmx5OyB0aGUgc3VwcG9ydCBmb3IgRXJsYW5nIG1vZHVsZXMgaW4gdGhlCit0YWdzIHN5c3RlbSBjb3VsZCBiZSB1c2VkIGJ5IGZpbGVzIHdyaXR0ZW4gaW4gb3RoZXIgbGFuZ3VhZ2VzLiIKKyAgKG9yIGZpbGUgKHNldHEgZmlsZSBidWZmZXItZmlsZS1uYW1lKSkKKyAgKGlmIChudWxsIGZpbGUpCisgICAgICBuaWwKKyAgICAoc2V0cSBmaWxlIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpKQorICAgIChpZiAoc3RyaW5nLW1hdGNoIGVybGFuZy1maWxlLW5hbWUtZXh0ZW5zaW9uLXJlZ2V4cCBmaWxlKQorCShzdWJzdHJpbmcgZmlsZSAwIChtYXRjaC1iZWdpbm5pbmcgMCkpCisgICAgICBuaWwpKSkKKworCis7OyBVc2VkIGJ5IGBlcmxhbmctZ2V0LWV4cG9ydCcgYW5kIGBlcmxhbmctZ2V0LWltcG9ydCcuCisKKyhkZWZ1biBlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5LWxpc3QgKCkKKyAgIlBhcnNlcyBsaXN0IG9mIGBmdW5jdGlvbi9hcml0eScgYXMgdXNlZCBieSBgLWltcG9ydCcgYW5kIGAtZXhwb3J0Jy4KKworVGhlIHBvaW50IG11c3QgYmUgcGxhY2VkIGF0IGJlZm9yZSB0aGUgb3BlbmluZyBicmFja2V0LiAgV2hlbiB0aGUKK2Z1bmN0aW9uIHJldHVybnMgdGhlIHBvaW50IHdpbGwgYmUgcGxhY2VkIGFmdGVyIHRoZSBjbG9zaW5nIGJyYWNrZXQuCisKK1RoZSBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGxpc3QgaXMgaW5jb3JyZWN0bHkKK2Zvcm1hdHRlZC4KKworUmV0dXJuIGxpc3Qgb2YgKGZ1bmN0aW9uIC4gYXJpdHkpLiAgVGhlIG9yZGVyIG9mIHRoZSByZXR1cm5lZCBsaXN0Citjb3JyZXNwb25kcyB0byB0aGUgb3JkZXIgb2YgdGhlIHBhcnNlZCBFcmxhbmcgbGlzdC4iCisgIChsZXQgKChyZXMgJygpKSkKKyAgICAoZXJsYW5nLXNraXAtYmxhbmspCisgICAgKGZvcndhcmQtY2hhciAxKQorICAgIChpZiAobm90IChlcSAocHJlY2VkaW5nLWNoYXIpID9cWykpCisJJygpCQkJCTsgTm90IGxvb2tpbmcgYXQgYW4gRXJsYW5nIGxpc3QuCisgICAgICAod2hpbGUJCQkJOyBOb3RlOiBgd2hpbGUnIGhhcyBubyBib2R5LgorCSAgKHByb2duCisJICAgIChlcmxhbmctc2tpcC1ibGFuaykKKwkgICAgKGFuZCAobG9va2luZy1hdCAoY29uY2F0IGVybGFuZy1hdG9tLXJlZ2V4cAorCQkJCSAgICAgIi9cXChbMC05XStcXClcXD4iKSkKKwkJIChwcm9nbgorCQkgICAoc2V0cSByZXMgKGNvbnMKKwkJCSAgICAgIChjb25zCisJCQkgICAgICAgKGVybGFuZy1yZW1vdmUtcXVvdGVzCisJCQkJKGVybGFuZy1idWZmZXItc3Vic3RyaW5nCisJCQkJIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCQkgICAgICAgKHN0cmluZy10by1pbnQKKwkJCQkoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcKKwkJCQkgKG1hdGNoLWJlZ2lubmluZworCQkJCSAgKCsgMSBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcykpCisJCQkJIChtYXRjaC1lbmQKKwkJCQkgICgrIDEgZXJsYW5nLWF0b20tcmVnZXhwLW1hdGNoZXMpKSkpKQorCQkJICAgICAgcmVzKSkKKwkJICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQorCQkgICAoZXJsYW5nLXNraXAtYmxhbmspCisJCSAgIChmb3J3YXJkLWNoYXIgMSkKKwkJICAgOzsgVGVzdCBpZiB0aGVyZSBhcmUgbW9yZSBleHBvcnRlZCBmdW5jdGlvbnMuCisJCSAgIChlcSAocHJlY2VkaW5nLWNoYXIpID8sKSkpKSkpCisgICAgKG5yZXZlcnNlIHJlcykpKQorCisKKzs7OyAgTm90ZSB0aGF0IGAtZXhwb3J0JyBhbmQgdGhlIG9wZW4gcGFyZW50aGVzaXMgbXVzdCBiZSB3cml0dGVuIG9uCis7OzsgIHRoZSBzYW1lIGxpbmUuCisKKyhkZWZ1biBlcmxhbmctZ2V0LWV4cG9ydCAoKQorICAiUmV0dXJuIGEgbGlzdCBvZiBgKGZ1bmN0aW9uIC4gYXJpdHkpJyBhcyBzcGVjaWZpZWQgYnkgYC1leHBvcnQnLiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAobGV0ICgobWQgKG1hdGNoLWRhdGEpKQorCSAgKHJlcyAnKCkpKQorICAgICAgKHVud2luZC1wcm90ZWN0CisJICAocHJvZ24KKwkgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXi1leHBvcnRcXHMgKigiIChwb2ludC1tYXgpIHQpCisJICAgICAgKGVybGFuZy1za2lwLWJsYW5rKQorCSAgICAgIChzZXRxIHJlcyAobmNvbmMgcmVzIChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5LWxpc3QpKSkpCisJICAgIHJlcykKKwkoc3RvcmUtbWF0Y2gtZGF0YSBtZCkpKSkpCisKKworKGRlZnVuIGVybGFuZy1nZXQtaW1wb3J0ICgpCisgICJQYXJzZSBhbiBFcmxhbmcgc291cmNlIGZpbGUgZm9yIGltcG9ydGVkIGZ1bmN0aW9ucy4KKworUmV0dXJuIGFuIGFsaXN0IHdpdGggbW9kdWxlIG5hbWUgYXMgY2FyIHBhcnQgYW5kIGxpc3Qgb2YgY29uc2VzIGNvbnRhaW5pbmcKK2Z1bmN0aW9uIGFuZCBhcml0eSBhcyBjZHIgcGFydC4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKGxldCAoKG1kIChtYXRjaC1kYXRhKSkKKwkgIChyZXMgJygpKSkKKyAgICAgICh1bndpbmQtcHJvdGVjdAorCSAgKHByb2duCisJICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIl4taW1wb3J0XFxzICooIiAocG9pbnQtbWF4KSB0KQorCSAgICAgIChlcmxhbmctc2tpcC1ibGFuaykKKwkgICAgICAoaWYgKGxvb2tpbmctYXQgZXJsYW5nLWF0b20tcmVnZXhwKQorCQkgIChsZXQgKChtb2R1bGUgKGVybGFuZy1yZW1vdmUtcXVvdGVzCisJCQkJIChlcmxhbmctYnVmZmVyLXN1YnN0cmluZworCQkJCSAgKG1hdGNoLWJlZ2lubmluZyAwKQorCQkJCSAgKG1hdGNoLWVuZCAwKSkpKSkKKwkJICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkKKwkJICAgIChlcmxhbmctc2tpcC1ibGFuaykKKwkJICAgIChpZiAoZXEgKGZvbGxvd2luZy1jaGFyKSA/LCkKKwkJCShwcm9nbgorCQkJICAoZm9yd2FyZC1jaGFyIDEpCisJCQkgIChlcmxhbmctc2tpcC1ibGFuaykKKwkJCSAgKGxldCAoKGZ1bmNzIChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5LWxpc3QpKQorCQkJCShwYWlyIChhc3NvYyBtb2R1bGUgcmVzKSkpCisJCQkgICAgKGlmIHBhaXIKKwkJCQkoc2V0Y2RyIHBhaXIgKG5jb25jIChjZHIgcGFpcikgZnVuY3MpKQorCQkJICAgICAgKHNldHEgcmVzIChjb25zIChjb25zIG1vZHVsZSBmdW5jcykKKwkJCQkJICAgICAgcmVzKSkpKSkpKSkpCisJICAgIChucmV2ZXJzZSByZXMpKQorCShzdG9yZS1tYXRjaC1kYXRhIG1kKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1mdW5jdGlvbi1uYW1lICgmb3B0aW9uYWwgYXJnKQorICAiUmV0dXJuIG5hbWUgb2YgY3VycmVudCBmdW5jdGlvbiwgb3IgbmlsLgorCitJZiBvcHRpb25hbCBhcmd1bWVudCBpcyBub24tbmlsLCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKK3RoZSBmaXJzdCBgKCcgaXMgcmV0dXJuZWQuCisKK05vcm1hbGx5IHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIGBlcmxhbmctYmVnaW5uaW5nLW9mLWNsYXVzZScsIGUuZy46CisgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgIChpZiAobm90IChlb2JwKSkgKGZvcndhcmQtY2hhciAxKSkKKwkJKGFuZCAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCSAgICAgKGVybGFuZy1nZXQtZnVuY3Rpb24tbmFtZSB0KSkpIgorICAobGV0ICgobiAoaWYgYXJnIDAgMSkpKQorICAgIChhbmQgKGxvb2tpbmctYXQgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKSkKKwkgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgbikgKG1hdGNoLWVuZCBuKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1mdW5jdGlvbi1hcnJvdyAoKQorICAiUmV0dXJuIGFycm93IG9mIGN1cnJlbnQgZnVuY3Rpb24sIGNvdWxkIGJlIFwiLT5cIiwgXCI6LVwiIG9yIG5pbC4KKworVGhlIFwiOi1cIiBhcnJvdyBpcyB1c2VkIGJ5IG1uZXNpYSBxdWVyaWVzLgorCitOb3JtYWxseSB1c2VkIGluIGNvbmp1Y3Rpb24gd2l0aCBgZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UnLCBlLmcuOgorICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgICAoaWYgKG5vdCAoZW9icCkpIChmb3J3YXJkLWNoYXIgMSkpCisJCShhbmQgKGVybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorCQkgICAgIChlcmxhbmctZ2V0LWZ1bmN0aW9uLWFycm93KSkpIgorICAoYW5kIChsb29raW5nLWF0IChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFxzICpcXCgoXFwpIikpCisgICAgICAgKGNvbmRpdGlvbi1jYXNlICgpCisJICAgKHNhdmUtZXhjdXJzaW9uCisJICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgKCsgMSBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcykpKQorCSAgICAgKGZvcndhcmQtc2V4cCAxKQorCSAgICAgKGVybGFuZy1za2lwLWJsYW5rKQorCSAgICAgKGFuZCAobG9va2luZy1hdCAiLT5cXHw6LSIpCisJCSAgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nCisJCSAgIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctZ2V0LWZ1bmN0aW9uLWFyaXR5ICgpCisgICJSZXR1cm4gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgb2YgZnVuY3Rpb24gYXQgcG9pbnQsIG9yIG5pbC4iCisgIChhbmQgKGxvb2tpbmctYXQgKGNvbmNhdCAiXiIgZXJsYW5nLWF0b20tcmVnZXhwICJcXHMgKigiKSkKKyAgICAgICAoc2F2ZS1leGN1cnNpb24KKwkgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQorCSAoY29uZGl0aW9uLWNhc2UgbmlsCisJICAgICAobGV0ICgocmVzIDApCisJCSAgIChjb250IHQpKQorCSAgICAgICAod2hpbGUgY29udAorCQkgKGNvbmQgKChlb2JwKQorCQkJKHNldHEgcmVzIG5pbCkKKwkJCShzZXRxIGNvbnQgbmlsKSkKKwkJICAgICAgICgobG9va2luZy1hdCAiXFxzICopIikKKwkJCShzZXRxIGNvbnQgbmlsKSkKKwkJICAgICAgICgobG9va2luZy1hdCAiXFxzICpcXCgkXFx8JVxcKSIpCisJCQkoZm9yd2FyZC1saW5lIDEpKQorCQkgICAgICAgKChsb29raW5nLWF0ICJcXHMgKiwiKQorCQkJKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkKKwkJICAgICAgICh0CisJCQkoc2V0cSByZXMgKCsgMSByZXMpKQorCQkJKGZvcndhcmQtc2V4cCAxKSkpKQorCSAgICAgICByZXMpCisJICAgKGVycm9yIG5pbCkpKSkpCisKKworKGRlZnVuIGVybGFuZy1nZXQtZnVuY3Rpb24tYXJndW1lbnRzICgpCisgICJSZXR1cm4gYXJndW1lbnRzIG9mIGN1cnJlbnQgZnVuY3Rpb24sIG9yIG5pbC4iCisgIChpZiAobm90IChsb29raW5nLWF0IChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFxzICooIikpKQorICAgICAgbmlsCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCisJICAobGV0ICgoc3RhcnQgKG1hdGNoLWVuZCAwKSkpCisJICAgIChnb3RvLWNoYXIgKC0gc3RhcnQgMSkpCisJICAgIChmb3J3YXJkLXNleHApCisJICAgIChlcmxhbmctYnVmZmVyLXN1YnN0cmluZyBzdGFydCAoLSAocG9pbnQpIDEpKSkKKwkoZXJyb3IgbmlsKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWdldC1mdW5jdGlvbi11bmRlci1wb2ludCAoKQorICAiUmV0dXJuIHRoZSBtb2R1bGUgYW5kIGZ1bmN0aW9uIHVuZGVyIHRoZSBwb2ludCwgb3IgbmlsLgorCitTaG91bGQgbm8gZXhwbGljaXQgbW9kdWxlIG5hbWUgYmUgcHJlc2VudCBhdCB0aGUgcG9pbnQsIHRoZQorbGlzdCBvZiBpbXBvcnRlZCBmdW5jdGlvbnMgaXMgc2VhcmNoZWQuCisKK1RoZSBmb2xsb3dpbmcgY291bGQgYmUgcmV0dXJlZDoKKyAgIChcIm1vZHVsZVwiICBcImZ1bmN0aW9uXCIpICAgIC0tIEJvdGggbW9kdWxlIGFuZCBmdW5jdGlvbiBuYW1lIGZvdW5kLgorICAgKG5pbCAgICAgICBcImZ1bmN0aW9uXCIpICAgIC0tIE5vIG1vZHVsZSBuYW1lIHdhcyBmb3VuZC4KKyAgIG5pbCAgICAgICAgICAgICAgICAgICAgICAgLS0gTm8gZnVuY3Rpb24gbmFtZSBmb3VuZAorCitJbiB0aGUgZnV0dXJlIHRoZSBsaXN0IG1heSBjb250YWluIG1vcmUgZWxlbWVudHMuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0ICgobWQgKG1hdGNoLWRhdGEpKQorCSAgKHJlcyBuaWwpKQorICAgICAgKGlmIChlcSAoY2hhci1zeW50YXggKGZvbGxvd2luZy1jaGFyKSkgPyApCisJICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiIFx0IikpCisgICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiYS16QS1aMC05XzonIikKKyAgICAgIChjb25kICgobG9va2luZy1hdCAoY29uY2F0IGVybGFuZy1hdG9tLXJlZ2V4cCAiOiIgZXJsYW5nLWF0b20tcmVnZXhwKSkKKwkgICAgIChzZXRxIHJlcyAobGlzdAorCQkJKGVybGFuZy1yZW1vdmUtcXVvdGVzCisJCQkgKGVybGFuZy1idWZmZXItc3Vic3RyaW5nCisJCQkgIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCQkoZXJsYW5nLXJlbW92ZS1xdW90ZXMKKwkJCSAoZXJsYW5nLWJ1ZmZlci1zdWJzdHJpbmcKKwkJCSAgKG1hdGNoLWJlZ2lubmluZyAoMSsgZXJsYW5nLWF0b20tcmVnZXhwLW1hdGNoZXMpKQorCQkJICAobWF0Y2gtZW5kICgxKyBlcmxhbmctYXRvbS1yZWdleHAtbWF0Y2hlcykpKSkpKSkKKwkgICAgKChsb29raW5nLWF0IGVybGFuZy1hdG9tLXJlZ2V4cCkKKwkgICAgIChsZXQgKChmayAoZXJsYW5nLXJlbW92ZS1xdW90ZXMKKwkJCShlcmxhbmctYnVmZmVyLXN1YnN0cmluZworCQkJIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpKQorCQkgICAobW9kIG5pbCkKKwkJICAgKGltcG9ydHMgKGVybGFuZy1nZXQtaW1wb3J0KSkpCisJICAgICAgICh3aGlsZSAoYW5kIGltcG9ydHMgKG51bGwgbW9kKSkKKwkJIChpZiAoYXNzb2MgZmsgKGNkciAoY2FyIGltcG9ydHMpKSkKKwkJICAgICAoc2V0cSBtb2QgKGNhciAoY2FyIGltcG9ydHMpKSkKKwkJICAgKHNldHEgaW1wb3J0cyAoY2RyIGltcG9ydHMpKSkpCisJICAgICAgIChzZXRxIHJlcyAobGlzdCBtb2QgZmspKSkpKQorICAgICAgKHN0b3JlLW1hdGNoLWRhdGEgbWQpCisgICAgICByZXMpKSkKKworCis7OyBUT0RPOiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbnNpZGUgdGhlIHN0cmluZy4KKyhkZWZ1biBlcmxhbmctYWRkLXF1b3Rlcy1pZi1uZWVkZWQgKHN0cikKKyAgIlJldHVybiBTVFIsIHBvc3NpYmx5IHdpdGggcXVvdGVzLiIKKyAgKGlmIChhbmQgKHN0cmluZ3Agc3RyKQorCSAgIChub3QgKHN0cmluZy1tYXRjaCAoY29uY2F0ICJcXGAiIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFwnIikgc3RyKSkpCisgICAgICAoY29uY2F0ICInIiBzdHIgIiciKQorICAgIHN0cikpCisKKworKGRlZnVuIGVybGFuZy1yZW1vdmUtcXVvdGVzIChzdHIpCisgICJSZXR1cm4gU1RSIHdpdGhvdXQgcXVvdGVzLCBpZiBwcmVzZW50LiIKKyAgKGxldCAoKG1kIChtYXRjaC1kYXRhKSkpCisgICAgKHByb2cxCisJKGlmIChzdHJpbmctbWF0Y2ggIlxcYCdcXCguKlxcKSdcXCciIHN0cikKKwkgICAgKHN1YnN0cmluZyBzdHIgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKQorCSAgc3RyKQorICAgICAgKHN0b3JlLW1hdGNoLWRhdGEgbWQpKSkpCisKKwwKKzs7OyBDaGVjayBtb2R1bGUgbmFtZQorCis7OyBJIGRvbid0IHdhbnQgdG8gdXNlIGBhZHZpY2UnIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIEVtYWNzIDE4LgorOzsKKzs7IFRoZSBmdW5jdGlvbiBgd3JpdGUtZmlsZScsIGJvdW5kIHRvIEMteCBDLXcsIGNhbGxzCis7OyBgc2V0LXZpc2l0ZWQtZmlsZS1uYW1lJyB3aGljaCBjbGVhcnMgdGhlIGhvb2suICA6LSgKKzs7IFRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBob29rIGFsd2F5cyBpcyBwcmVzZW50LCB3ZSBhZGQgYSBwaWVjZSBvZgorOzsgY29kZSB0byB0aGUgZnVuY3Rpb24gYHNldC12aXNpdGVkLWZpbGUtbmFtZScuCisoZGVmdW4gZXJsYW5nLWNoZWNrLW1vZHVsZS1uYW1lLWluaXQgKCkKKyAgIkluaXRpYWxpemUgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY29tcGFyZSBmaWxlIGFuZCBtb2R1bGUgbmFtZXMuCisKK1dlIHJlZGVmaW5lcyB0aGUgZnVuY3Rpb24gYHNldC12aXNpdGVkLWZpbGUtbmFtZScgc2luY2UgaXQgY2xlYXJzCit0aGUgdmFyaWFibGUgYGxvY2FsLXdyaXRlLWZpbGUtaG9va3MnLiAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlZmluaXRpb24KK2lzIHN0b3JlZCBpbiBgZXJsYW5nLW9yaWctc2V0LXZpc2l0ZWQtZmlsZS1uYW1lJy4iCisgIChpZiAoZmJvdW5kcCAnZXJsYW5nLW9yaWctc2V0LXZpc2l0ZWQtZmlsZS1uYW1lKQorICAgICAgKCkKKyAgICAoZnNldCAnZXJsYW5nLW9yaWctc2V0LXZpc2l0ZWQtZmlsZS1uYW1lCisJICAoc3ltYm9sLWZ1bmN0aW9uICdzZXQtdmlzaXRlZC1maWxlLW5hbWUpKQorICAgIChkZWZ1biBzZXQtdmlzaXRlZC1maWxlLW5hbWUgKCZyZXN0IGFyZ3MpCisgICAgICAiUGxlYXNlIHNlZSB0aGUgZnVuY3Rpb24gYGVybGFuZy1vcmlnLXNldC12aXNpdGVkLWZpbGUtbmFtZScuIgorICAgICAgKGludGVyYWN0aXZlICJGU2V0IHZpc2l0ZWQgZmlsZSBuYW1lOiAiKQorICAgICAgKGFwcGx5IChzeW1ib2wtZnVuY3Rpb24gJ2VybGFuZy1vcmlnLXNldC12aXNpdGVkLWZpbGUtbmFtZSkgYXJncykKKyAgICAgIChpZiAoZXEgbWFqb3ItbW9kZSAnZXJsYW5nLW1vZGUpCisJICAoYWRkLWhvb2sgJ2xvY2FsLXdyaXRlLWZpbGUtaG9va3MgJ2VybGFuZy1jaGVjay1tb2R1bGUtbmFtZSkpKSkKKyAgKGFkZC1ob29rICdsb2NhbC13cml0ZS1maWxlLWhvb2tzICdlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUpKQorCisKKyhkZWZ1biBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUgKCkKKyAgIklmIHRoZSBtb2R1bGUgbmFtZSBkb2Vzbid0IG1hdGNoIGZpbGUgbmFtZSwgYXNrIGZvciBwZXJtaXNzaW9uIHRvIGNoYW5nZS4KKworVGhlIHZhcmlhYmxlIGBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUnIGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhpcworZnVuY3Rpb24uICBJdCBpdCBpcyBuaWwsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgSWYgaXQgaXMgdCwgdGhlCitzb3VyY2UgaXMgc2lsZW50bHkgY2hhbmdlZC4gIElmIGl0IGlzIHNldCB0byB0aGUgYXRvbSBgYXNrJywgdGhlIHVzZXIKK2lzIHByb21wdGVkLgorCitUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IHBsYWNlZCBpbiB0aGUgaG9vayBgbG9jYWwtd3JpdGUtZmlsZS1ob29rJy4iCisgIChpZiBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUKKyAgICAgIChsZXQgKChtbiAoZXJsYW5nLWdldC1tb2R1bGUpKQorCSAgICAoZm4gKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lIChidWZmZXItZmlsZS1uYW1lKSkpKQorCShpZiAoYW5kIChzdHJpbmdwIG1uKSAoc3RyaW5ncCBmbikpCisJICAgIChvciAoc3RyaW5nLWVxdWFsIG1uIGZuKQorCQkoaWYgKG9yIChlcSBlcmxhbmctY2hlY2stbW9kdWxlLW5hbWUgdCkKKwkJCSh5LW9yLW4tcAorCQkJICJNb2R1bGUgZG9lcyBub3QgbWF0Y2ggZmlsZSBuYW1lLiBNb2RpZnkgc291cmNlPyAiKSkKKwkJICAgIChzYXZlLWV4Y3Vyc2lvbgorCQkgICAgICAoc2F2ZS1yZXN0cmljdGlvbgorCQkJKHdpZGVuKQorCQkJKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKwkJCShpZiAocmUtc2VhcmNoLWZvcndhcmQKKwkJCSAgICAgKGNvbmNhdCAiXi1tb2R1bGVcXHMgKihcXHMgKlxcKFxcKCIKKwkJCQkgICAgIGVybGFuZy1hdG9tLXJlZ2V4cAorCQkJCSAgICAgIlxcKT9cXClcXHMgKilcXHMgKlxcLiIpCisJCQkgICAgIChwb2ludC1tYXgpIHQpCisJCQkgICAgKHByb2duCisJCQkgICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCisJCQkgICAgICAoZGVsZXRlLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5nIDEpCisJCQkJCSAgICAgKG1hdGNoLWVuZCAxKSkKKwkJCSAgICAgIChpbnNlcnQgZm4pKSkpKSkpKSkpCisgIDs7IE11c3QgcmV0dXJuIG5pbCBzaW5jZSBpdCBpcyBhZGRlZCB0byBgbG9jYWwtd3JpdGUtZmlsZS1ob29rJy4KKyAgbmlsKQorCisMCis7OzsgRWxlY3RyaWMgZnVuY3Rpb25zLgorCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbiAoJm9wdGlvbmFsIGFyZykKKyAgIkluc2VydCBhIHNlbWljb2xvbiBjaGFyYWN0ZXIgYW5kIHBvc3NpYmx5IGEgcHJvdG90eXBlIGZvciB0aGUgbmV4dCBsaW5lLgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24tY3JpdGVyaWEnIHN0YXRlcyBhIGNyaXRlcmEsCit3aGVuIGZ1bGZpbGxlZCBhIG5ld2xpbmUgaXMgaW5zZXJ0ZWQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYW5kIGEKK3Byb3RvdHlwZSBmb3IgdGhlIG5leHQgbGluZSBpcyBpbnNlcnRlZC4gIE5vcm1hbGx5IHRoZSBwcm90b3R5cGUKK2NvbnNpc3RzIG9mIFwiIC0+XCIuICBTaG91bGQgdGhlIHNlbWljb2xvbiBlbmQgdGhlIGNsYXVzZSBhIG5ldyBjbGF1c2UKK2hlYWRlciBpcyBnZW5lcmF0ZWQuCisKK1RoZSB2YXJpYWJsZSBgZXJsYW5nLWVsZWN0cmljLXNlbWljb2xvbi1pbnNlcnQtYmxhbmstbGluZXMnIGNvbnRyb2xzCit0aGUgbnVtYmVyIG9mIGJsYW5rIGxpbmVzIGluc2VydGVkIGJldHdlZW4gdGhlIGN1cnJlbnQgbGluZSBhbmQgbmV3CitmdW5jdGlvbiBoZWFkZXIuCisKK0JlaGF2ZXMganVzdCBsaWtlIHRoZSBub3JtYWwgc2VtaWNvbG9uIHdoZW4gc3VwcGxpZWQgd2l0aCBhCitudW1lcmljYWwgYXJnLCBwb2ludCBpcyBpbnNpZGUgc3RyaW5nIG9yIGNvbW1lbnQsIG9yIHdoZW4gdGhlcmUgYXJlCitub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGUgcG9pbnQgb24gdGhlIGN1cnJlbnQgbGluZS4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChzZWxmLWluc2VydC1jb21tYW5kIChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpKQorICAoaWYgKG9yIGFyZworCSAgKGFuZCAobGlzdHAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKQorCSAgICAgICAobm90IChtZW1xICdlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uCisJCQkgIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykpKQorCSAgKGVybGFuZy1pbi1saXRlcmFsKQorCSAgKG5vdCAobG9va2luZy1hdCAiXFxzICpcXCglLipcXCk/JCIpKQorCSAgKG51bGwgKGVybGFuZy10ZXN0LWNyaXRlcmlhLWxpc3QKKwkJIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24tY3JpdGVyaWEpKSkKKyAgICAgIChzZXRxIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgbmlsKQorICAgIChzZXRxIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgdCkKKyAgICAodW5kby1ib3VuZGFyeSkKKyAgICAoZW5kLW9mLWxpbmUpCisgICAgKG5ld2xpbmUpCisgICAgKGlmIChjb25kaXRpb24tY2FzZSBuaWwKKwkgICAgKHByb2duIChlcmxhbmctaW5kZW50LWxpbmUpIHQpCisJICAoZXJyb3IgKGlmIChib2xwKSAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpKSkKKwkoaWYgKG5vdCAoYm9scCkpCisJICAgIChzYXZlLWV4Y3Vyc2lvbgorCSAgICAgIChpbnNlcnQgIiAtPiIpKQorCSAgKGNvbmRpdGlvbi1jYXNlIG5pbAorCSAgICAgIChwcm9nbgorCQkoZXJsYW5nLWdlbmVyYXRlLW5ldy1jbGF1c2UpCisJCShpZiBlcmxhbmctZWxlY3RyaWMtc2VtaWNvbG9uLWluc2VydC1ibGFuay1saW5lcworCQkgICAgKHNhdmUtZXhjdXJzaW9uCisJCSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKKwkJICAgICAgKG5ld2xpbmUKKwkJICAgICAgIGVybGFuZy1lbGVjdHJpYy1zZW1pY29sb24taW5zZXJ0LWJsYW5rLWxpbmVzKSkpKQorCSAgICAoZXJyb3IgKGlmIChib2xwKSAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1lbGVjdHJpYy1jb21tYSAoJm9wdGlvbmFsIGFyZykKKyAgIkluc2VydCBhIGNvbW1hIGNoYXJhY3RlciBhbmQgcG9zc2libHkgYSBuZXcgaW5kZW50ZWQgbGluZS4KK1RoZSB2YXJpYWJsZSBgZXJsYW5nLWVsZWN0cmljLWNvbW1hLWNyaXRlcmlhJyBzdGF0ZXMgYSBjcml0ZXJhLAord2hlbiBmdWxmaWxsZWQgYSBuZXdsaW5lIGlzIGluc2VydGVkIGFuZCB0aGUgbmV4dCBsaW5lIGlzIGluZGV0ZWQuCisKK0JlaGF2ZXMganVzdCBsaWtlIHRoZSBub3JtYWwgY29tbWEgd2hlbiBzdXBwbGllZCB3aXRoIGEKK251bWVyaWNhbCBhcmcsIHBvaW50IGlzIGluc2lkZSBzdHJpbmcgb3IgY29tbWVudCwgb3Igd2hlbiB0aGVyZSBhcmUKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm9sbG93aW5nIHRoZSBwb2ludCBvbiB0aGUgY3VycmVudCBsaW5lLiIKKyAgKGludGVyYWN0aXZlICJQIikKKworICAoc2VsZi1pbnNlcnQtY29tbWFuZCAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkKKworICAoaWYgKG9yIGFyZworCSAgKGFuZCAobGlzdHAgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKQorCSAgICAgICAobm90IChtZW1xICdlcmxhbmctZWxlY3RyaWMtY29tbWEgZXJsYW5nLWVsZWN0cmljLWNvbW1hbmRzKSkpCisJICAoZXJsYW5nLWluLWxpdGVyYWwpCisJICAobm90IChsb29raW5nLWF0ICJcXHMgKlxcKCUuKlxcKT8kIikpCisJICAobnVsbCAoZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdAorCQkgZXJsYW5nLWVsZWN0cmljLWNvbW1hLWNyaXRlcmlhKSkpCisgICAgICAoc2V0cSBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0IG5pbCkKKyAgICAoc2V0cSBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0IHQpCisgICAgKHVuZG8tYm91bmRhcnkpCisgICAgKGVuZC1vZi1saW5lKQorICAgIChuZXdsaW5lKQorICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkoZXJsYW5nLWluZGVudC1saW5lKQorICAgICAgKGVycm9yIChpZiAoYm9scCkgKGRlbGV0ZS1iYWNrd2FyZC1jaGFyIDEpKSkpKSkKKworKGRlZnVuIGVybGFuZy1lbGVjdHJpYy1sdCAoJm9wdGlvbmFsIGFyZykKKyAgIkluc2VydCBhIGxlc3MtdGhhbiBzaWduLCBhbmQgb3B0aW9uYWxseSBtYXJrIGl0IGFzIGFuIG9wZW4gcGFyZW4uIgorICAKKyAgKGludGVyYWN0aXZlICJwIikKKworICAoc2VsZi1pbnNlcnQtY29tbWFuZCBhcmcpCisKKyAgOzsgV2FzIHRoaXMgdGhlIHNlY29uZCBjaGFyIGluIGJpdC1zeW50YXggb3BlbiAoYDw8Jyk/CisgICh1bmxlc3MgKDwgKHBvaW50KSAyKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGJhY2t3YXJkLWNoYXIgMikKKyAgICAgICh3aGVuIChhbmQgKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID88KQorCQkgKG5vdCAoZXEgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2NhdGVnb3J5KQorCQkJICAnYml0c3ludGF4LW9wZW4taW5uZXIpKSkKKwk7OyBUaGVuIG1hcmsgdGhlIHR3byBjaGFycy4uLgorCShwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICgxKyAocG9pbnQpKSAKKwkJCSAgICdjYXRlZ29yeSAnYml0c3ludGF4LW9wZW4tb3V0ZXIpCisJKGZvcndhcmQtY2hhciAxKQorCShwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICgxKyAocG9pbnQpKQorCQkJICAgJ2NhdGVnb3J5ICdiaXRzeW50YXgtb3Blbi1pbm5lcikKKwk7Oy4uLmFuZCB1bm1hcmsgYW55IHN1YnNlcXVlbnQgbGVzcy10aGFuIGNoYXJzLgorCShmb3J3YXJkLWNoYXIgMSkKKwkod2hpbGUgKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID88KQorCSAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKHBvaW50KSAoMSsgKHBvaW50KSkKKwkJCQkgICcoY2F0ZWdvcnkgbmlsKSkKKwkgIChmb3J3YXJkLWNoYXIgMSkpKSkpKQorCisoZGVmdW4gZXJsYW5nLWFmdGVyLWJpdHN5bnRheC1jbG9zZSAoKQorICAiUmV0dXJucyB0cnVlIGlmIHBvaW50IGlzIHBsYWNlZCBpbW1lZGlhdGVseSBhZnRlciBhIGJpdC1zeW50YXggY2xvc2UgcGFyZW50aGVzaXMgKGA+PicpLiIKKyAgKGFuZCAoPj0gKHBvaW50KSAyKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGJhY2t3YXJkLWNoYXIgMikKKyAgICAgIChhbmQgKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID8+KQorCSAgIChub3QgKGVxIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdjYXRlZ29yeSkKKwkJICAgICdiaXRzeW50YXgtY2xvc2Utb3V0ZXIpKSkpKSkKKwkgCisoZGVmdW4gZXJsYW5nLWFmdGVyLWFycm93ICgpCisgICJSZXR1cm5zIHRydWUgaWYgcG9pbnQgaXMgcGxhY2VkIGltbWVkaWF0ZWx5IGFmdGVyIGEgZnVuY3Rpb24gYXJyb3cgKGAtPicpLiIKKyAgKGFuZCAoPj0gKHBvaW50KSAyKQorCSAoYW5kIAorCSAgKHNhdmUtZXhjdXJzaW9uCisJICAgIChiYWNrd2FyZC1jaGFyKQorCSAgICAoZXEgKGNoYXItYmVmb3JlIChwb2ludCkpID8tKSkKKwkgIChvciAobm90IChsaXN0cCBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMpKQorCSAgICAgIChtZW1xICdlcmxhbmctZWxlY3RyaWMtZ3QKKwkJICAgIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykpCisJICAobm90IChlcmxhbmctaW4tbGl0ZXJhbCkpCisJICAobG9va2luZy1hdCAiXFxzICpcXCglLipcXCk/JCIpCisJICAoZXJsYW5nLXRlc3QtY3JpdGVyaWEtbGlzdCBlcmxhbmctZWxlY3RyaWMtYXJyb3ctY3JpdGVyaWEpKSkpCisKKworKGRlZnVuIGVybGFuZy1lbGVjdHJpYy1ndCAoJm9wdGlvbmFsIGFyZykKKyAgIkluc2VydCBhIGdyZWF0ZXItdGhhbiBzaWduLCBhbmQgb3B0aW9uYWxseSBtYXJrIGl0IGFzIGEgY2xvc2UgcGFyZW4uIgorICAKKyAgKGludGVyYWN0aXZlICJwIikKKworICAoc2VsZi1pbnNlcnQtY29tbWFuZCBhcmcpCisKKyAgKGNvbmQKKyAgIDs7IERpZCB3ZSBqdXN0IHdyaXRlIGEgYml0LXN5bnRheCBjbG9zZSAoYD4+Jyk/CisgICAoKGVybGFuZy1hZnRlci1iaXRzeW50YXgtY2xvc2UpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICA7OyBUaGVuIG1hcmsgdGhlIHR3byBjaGFycy4uLgorICAgICAgKGJhY2t3YXJkLWNoYXIgMikKKyAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICgxKyAocG9pbnQpKSAKKwkJCSAnY2F0ZWdvcnkgJ2JpdHN5bnRheC1jbG9zZS1pbm5lcikKKyAgICAgIChmb3J3YXJkLWNoYXIpCisgICAgICAocHV0LXRleHQtcHJvcGVydHkgKHBvaW50KSAoMSsgKHBvaW50KSkKKwkJCSAnY2F0ZWdvcnkgJ2JpdHN5bnRheC1jbG9zZS1vdXRlcikKKyAgICAgIDs7Li4uYW5kIHVubWFyayBhbnkgc3Vic2VxdWVudCBncmVhdGVyLXRoYW4gY2hhcnMuCisgICAgICAoZm9yd2FyZC1jaGFyKQorICAgICAgKHdoaWxlIChlcSAoY2hhci1hZnRlciAocG9pbnQpKSA/PikKKwkocmVtb3ZlLXRleHQtcHJvcGVydGllcyAocG9pbnQpICgxKyAocG9pbnQpKQorCQkJCScoY2F0ZWdvcnkgbmlsKSkKKwkoZm9yd2FyZC1jaGFyKSkpKQorCisgICA7OyBEaWQgd2UganVzdCB3cml0ZSBhIGZ1bmN0aW9uIGFycm93IChgLT4nKT8KKyAgICgoZXJsYW5nLWFmdGVyLWFycm93KQorICAgIChsZXQgKChlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0IHQpKQorICAgICAgKHVuZG8tYm91bmRhcnkpCisgICAgICAoZW5kLW9mLWxpbmUpCisgICAgICAobmV3bGluZSkKKyAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkgIChlcmxhbmctaW5kZW50LWxpbmUpCisJKGVycm9yIChpZiAoYm9scCkgKGRlbGV0ZS1iYWNrd2FyZC1jaGFyIDEpKSkpKSkKKworICAgOzsgVGhlbiBpdCdzIGp1c3QgYSBwbGFpbiBncmVhdGVyLXRoYW4uCisgICAodAorICAgIG5pbCkpKQorICAgIAorCisoZGVmdW4gZXJsYW5nLWVsZWN0cmljLWFycm93XCBvZmYgKCZvcHRpb25hbCBhcmcpCisgICJJbnNlcnQgYSAnPictc2lnbiBhbmQgcG9zc2libGUgYSBuZXcgaW5kZW50ZWQgbGluZS4KKworVGhpcyBjb21tYW5kIGlzIG9ubHkgYGVsZWN0cmljJyB3aGVuIHRoZSBgPicgaXMgcGFydCBvZiBhbiBgLT4nIGFycm93LgorVGhlIHZhcmlhYmxlIGBlcmxhbmctZWxlY3RyaWMtYXJyb3ctY3JpdGVyaWEnIHN0YXRlcyBhIHNlcXVlbmNlIG9mCitjcml0ZXJpYSwgd2hpY2ggZGVjaWRlcyB3aGVuIGEgbmV3bGluZSBzaG91bGQgYmUgaW5zZXJ0ZWQgYW5kIHRoZSBuZXh0CitsaW5lIGluZGVudGVkLgorCitJdCBiZWhhdmVzIGp1c3QgbGlrZSB0aGUgbm9ybWFsIGdyZWF0ZXIgdGhhbiBzaWduIHdoZW4gc3VwcGxpZWQgd2l0aCBhCitudW1lcmljYWwgYXJnLCBwb2ludCBpcyBpbnNpZGUgc3RyaW5nIG9yIGNvbW1lbnQsIG9yIHdoZW4gdGhlcmUgYXJlCitub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGUgcG9pbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKworQWZ0ZXIgYmVpbmcgc3BsaXQvbWVyZ2VkIGludG8gZXJsYW5nLWFmdGVyLWFycm93IGFuZAorZXJsYW5nLWVsZWN0cmljLWd0LCBpdCBpcyBub3cgdW51c2VkIGFuZCBkaXNhYmxlZC4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChsZXQgKChwcmVjIChwcmVjZWRpbmctY2hhcikpKQorICAgIChzZWxmLWluc2VydC1jb21tYW5kIChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpKQorICAgIChpZiAob3IgYXJnCisJICAgIChhbmQgKGxpc3RwIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykKKwkJIChub3QgKG1lbXEgJ2VybGFuZy1lbGVjdHJpYy1hcnJvdworCQkJICAgIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykpKQorCSAgICAobm90IChlcSBwcmVjID8tKSkKKwkgICAgKGVybGFuZy1pbi1saXRlcmFsKQorCSAgICAobm90IChsb29raW5nLWF0ICJcXHMgKlxcKCUuKlxcKT8kIikpCisJICAgIChudWxsIChlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0CisJCSAgIGVybGFuZy1lbGVjdHJpYy1hcnJvdy1jcml0ZXJpYSkpKQorCShzZXRxIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQgbmlsKQorICAgICAgKHNldHEgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtaW5oaWJpdCB0KQorICAgICAgKHVuZG8tYm91bmRhcnkpCisgICAgICAoZW5kLW9mLWxpbmUpCisgICAgICAobmV3bGluZSkKKyAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkgIChlcmxhbmctaW5kZW50LWxpbmUpCisJKGVycm9yIChpZiAoYm9scCkgKGRlbGV0ZS1iYWNrd2FyZC1jaGFyIDEpKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lICgmb3B0aW9uYWwgYXJnKQorICAiQnJlYWsgbGluZSBhdCBwb2ludCBhbmQgaW5kZW50LCBjb250aW51aW5nIGNvbW1lbnQgaWYgd2l0aGluIG9uZS4KK1RoZSB2YXJpYWJsZSBgZXJsYW5nLWVsZWN0cmljLW5ld2xpbmUtY3JpdGVyaWEnIHN0YXRlcyBhIGNyaXRlcmEsCit3aGVuIGZ1bGZpbGxlZCBhIG5ld2xpbmUgaXMgaW5zZXJ0ZWQgYW5kIHRoZSBuZXh0IGxpbmUgaXMgaW5kZXRlZC4KKworU2hvdWxkIHRoZSBjdXJyZW50IGxpbmUgYmVnaW4gd2l0aCBhIGNvbW1lbnQsIGFuZCB0aGUgdmFyaWFibGUKK2Bjb21tZW50LW11bHRpLWxpbmUnIGJlIG5vbi1uaWwsIGEgbmV3IGNvbW1lbnQgc3RhcnQgaXMgaW5zZXJ0ZWQuCisKK1Nob3VsZCB0aGUgcHJldmlvdXMgY29tbWFuZCBiZSBhbm90aGVyIGVsZWN0cmljIGNvbW1hbmQgd2UgYXNzdW1lIHRoYXQKK3RoZSB1c2VyIHByZXNzZWQgbmV3bGluZSBvdXQgb2Ygb2xkIGhhYml0LCBoZW5jZSB3ZSB3aWxsIGRvIG5vdGhpbmcuIgorICAoaW50ZXJhY3RpdmUgIlAiKQorICAoY29uZCAoKGFuZCAobm90IGFyZykKKwkgICAgICBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1pbmhpYml0CisJICAgICAgKG1lbXEgbGFzdC1jb21tYW5kIGVybGFuZy1lbGVjdHJpYy1uZXdsaW5lLWluaGliaXQtbGlzdCkpCisJICgpKQkJCQk7IERvIG5vdGhpbmchCisJKChvciBhcmcKKwkgICAgIChhbmQgKGxpc3RwIGVybGFuZy1lbGVjdHJpYy1jb21tYW5kcykKKwkJICAobm90IChtZW1xICdlcmxhbmctZWxlY3RyaWMtbmV3bGluZQorCQkJICAgICBlcmxhbmctZWxlY3RyaWMtY29tbWFuZHMpKSkKKwkgICAgIChudWxsIChlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0CisJCSAgICBlcmxhbmctZWxlY3RyaWMtbmV3bGluZS1jcml0ZXJpYSkpKQorCSAobmV3bGluZSAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkpCisJKHQKKwkgKGlmIChhbmQgY29tbWVudC1tdWx0aS1saW5lCisJCSAgKHNhdmUtZXhjdXJzaW9uCisJCSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCisJCSAgICAobG9va2luZy1hdCAoY29uY2F0ICJcXHMgKiIgY29tbWVudC1zdGFydC1za2lwKSkpKQorCSAgICAgKGxldCAoKHN0ciAoYnVmZmVyLXN1YnN0cmluZworCQkJIChvciAobWF0Y2gtZW5kIDEpIChtYXRjaC1iZWdpbm5pbmcgMCkpCisJCQkgKG1pbiAobWF0Y2gtZW5kIDApIChwb2ludCkpKSkpCisJICAgICAgIChuZXdsaW5lKQorCSAgICAgICAodW5kby1ib3VuZGFyeSkKKwkgICAgICAgKGluc2VydCBzdHIpKQorCSAgIChuZXdsaW5lKQorCSAgICh1bmRvLWJvdW5kYXJ5KQorCSAgIChpbmRlbnQtYWNjb3JkaW5nLXRvLW1vZGUpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctdGVzdC1jcml0ZXJpYS1saXN0IChjcml0ZXJpYSkKKyAgIkdpdmVuIGEgbGlzdCBvZiBjcml0ZXJpYSBmdW5jdGlvbnMsIHRlc3QgaWYgY3JpdGVyaWEgaXMgZnVsZmlsbGVkLgorCitFYWNoIGVsZW1lbnQgaW4gdGhlIGNyaXRlcmlhIGxpc3QgY2FuIGEgZnVuY3Rpb24gcmV0dXJuaW5nIG5pbCwgdCBvcgordGhlIGF0b20gYHN0b3AnLiAgdCBtZWFucyB0aGF0IHRoZSBjcml0ZXJpYSBpcyBmdWxmaWxsZWQsIGBzdG9wJyBtZWFucwordGhhdCBpdCB0aGUgY3JpdGVyaWEgaXNuJ3QgZnVsZmlsbGVkIGFuZCB0aGF0IHRoZSBzZWFyY2ggc2hvdWxkIHN0b3AsCithbmQgbmlsIG1lYW5zIGNvbnRpbnVlIHNlYXJjaGluZy4KKworU2hvdWxkIHRoZSBsaXN0IGNvbnRhaW4gdGhlIGF0b20gdCB0aGUgY3JpdGVyaWEgaXMgYXNzdW1lZCB0byBiZQorZnVsZmlsbGVkLCB1bmxlc3MgcHJlY2VkZWQgYnkgYSBmdW5jdGlvbiByZXR1cm5pbmcgYHN0b3AnLCBvZiBjb3Vyc2UuCisKK1Nob3VsZCB0aGUgYXJndW1lbnQgYmUgdGhlIGF0b20gdCBpbnN0ZWFkIG9mIGEgbGlzdCwgdGhlIGNyaXRlcmlhIGlzCithc3N1bWVkIHRvIGJlIHRyaXZpYWxseSB0cnVlLgorCitTaG91bGQgYWxsIGZ1bmN0aW9uIHJldHVybiBuaWwsIHRoZSBjcml0ZXJpYSBpcyBhc3N1bWVkIG5vdCB0byBiZQorZnVsZmlsbGVkLgorCitSZXR1cm4gdCBpZiBjcml0ZXJpYSBmdWxmaWxsZWQsIG5pbCBvdGhlcndpc2UuIgorICAoaWYgKGVxIGNyaXRlcmlhIHQpCisgICAgICB0CisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAobGV0ICgoYW5zd2VyIG5pbCkpCisJKHdoaWxlIChhbmQgY3JpdGVyaWEgKG51bGwgYW5zd2VyKSkKKwkgIChpZiAoZXEgKGNhciBjcml0ZXJpYSkgdCkKKwkgICAgICAoc2V0cSBhbnN3ZXIgdCkKKwkgICAgKHNldHEgYW5zd2VyIChmdW5jYWxsIChjYXIgY3JpdGVyaWEpKSkpCisJICAoc2V0cSBjcml0ZXJpYSAoY2RyIGNyaXRlcmlhKSkpCisJKGlmIChhbmQgYW5zd2VyIChub3QgKGVxIGFuc3dlciAnc3RvcCkpKQorCSAgICB0CisJICBuaWwpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctaW4tbGl0ZXJhbCAoJm9wdGlvbmFsIGxpbSkKKyAgIlRlc3QgaWYgcG9pbnQgaXMgaW4gc3RyaW5nLCBxdW90ZWQgYXRvbSBvciBjb21tZW50LgorCitSZXR1cm4gb25lIG9mIHRoZSB0aHJlZSBhdG9tcyBgYXRvbScsIGBzdHJpbmcnLCBhbmQgYGNvbW1lbnQnLgorU2hvdWxkIHRoZSBwb2ludCBiZSBpbnNpZGUgbm9uZSBvZiB0aGUgYWJvdmUgbWVudGlvbmVkIHR5cGVzIG9mCitjb250ZXh0LCBuaWwgaXMgcmV0dXJuZWQuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0KiAoKGxpbSAob3IgbGltIChzYXZlLWV4Y3Vyc2lvbgorCQkJICAoZXJsYW5nLWJlZ2lubmluZy1vZi1jbGF1c2UpCisJCQkgIChwb2ludCkpKSkKKwkgICAoc3RhdGUgKHBhcnNlLXBhcnRpYWwtc2V4cCBsaW0gKHBvaW50KSkpKQorICAgICAgKGNvbmQKKyAgICAgICAoKGVxIChudGggMyBzdGF0ZSkgPycpICdhdG9tKQorICAgICAgICgobnRoIDMgc3RhdGUpICdzdHJpbmcpCisgICAgICAgKChudGggNCBzdGF0ZSkgJ2NvbW1lbnQpCisgICAgICAgKHQgbmlsKSkpKSkKKworCisoZGVmdW4gZXJsYW5nLWF0LWVuZC1vZi1mdW5jdGlvbi1wICgpCisgICJUZXN0IGlmIHBvaW50IGlzIGF0IGVuZCBvZiBhbiBFcmxhbmcgZnVuY3Rpb24uCisKK1RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgYSBtZW1iZXIgb2YgYSBjcml0ZXJpYSBsaXN0LiIKKyAgKGVxIChzYXZlLWV4Y3Vyc2lvbiAoZXJsYW5nLXNraXAtYmxhbmspIChwb2ludCkpCisgICAgICAoc2F2ZS1leGN1cnNpb24KKwkoZXJsYW5nLWJlZ2lubmluZy1vZi1mdW5jdGlvbiAtMSkgKHBvaW50KSkpKQorCisKKyhkZWZ1biBlcmxhbmctc3RvcC13aGVuLWluc2lkZS1hcmd1bWVudC1saXN0ICgpCisgICJSZXR1cm4gYHN0b3AnIGlmIGluc2lkZSBwYXJlbnRoZXNpcyBsaXN0LCBuaWwgb3RoZXJ3aXNlLgorCitLbm93cyBhYm91dCB0aGUgbGlzdCBjb21wcmVoZW5zaW9uIHN5bnRheC4gIFdoZW4gdGhlIHBvaW50IGlzCithZnRlciBgfHwnLCBgc3RvcCcgaXMgbm90IHJldHVybmVkLgorCitUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGEgbWVtYmVyIG9mIGEgY3JpdGVyaWEgbGlzdC4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkobGV0ICgob3JpZy1wb2ludCAocG9pbnQpKQorCSAgICAgIChzdGF0ZSBuaWwpKQorCSAgKHVwLWxpc3QgLTEpCisJICAoaWYgKG5vdCAoZXEgKGZvbGxvd2luZy1jaGFyKSA/XFspKQorCSAgICAgICdzdG9wCisJICAgIDs7IERvIG5vdCByZXR1cm4gYHN0b3AnIHdoZW4gaW5zaWRlIGEgbGlzdCBjb21wcmVoZW5zaW9uCisJICAgIDs7IGNvbnN0cnVuY3Rpb24uICAoVGhlIHBvaW50IG11c3QgYmUgYWZ0ZXIgYHx8JykuCisJICAgICh3aGlsZSAoPCAocG9pbnQpIG9yaWctcG9pbnQpCisJICAgICAgKHNldHEgc3RhdGUgKGVybGFuZy1wYXJ0aWFsLXBhcnNlIChwb2ludCkgb3JpZy1wb2ludCBzdGF0ZSkpKQorCSAgICAoaWYgKGFuZCAoY2FyIHN0YXRlKSAoZXEgKGNhciAoY2FyIChjYXIgc3RhdGUpKSkgJ3x8KSkKKwkJbmlsCisJICAgICAgJ3N0b3ApKSkKKyAgICAgIChlcnJvciAKKyAgICAgICBuaWwpKSkpCisKKworKGRlZnVuIGVybGFuZy1zdG9wLXdoZW4tYXQtZ3VhcmQgKCkKKyAgIlJldHVybiBgc3RvcCcgd2hlbiBhdCBmdW5jdGlvbiBndWFyZHMuCisKK1RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgYSBtZW1iZXIgb2YgYSBjcml0ZXJpYSBsaXN0LiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGJlZ2lubmluZy1vZi1saW5lKQorICAgIChpZiAoYW5kIChsb29raW5nLWF0IChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiXFxzICooIikpCisJICAgICAobm90IChsb29raW5nLWF0CisJCSAgIChjb25jYXQgIl4iIGVybGFuZy1hdG9tLXJlZ2V4cCAiLipcXCgtPlxcfDotXFwpIikpKSkKKwknc3RvcAorICAgICAgbmlsKSkpCisKKworKGRlZnVuIGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXAgKCkKKyAgIlJldHVybiBub24tbmlsIGlmIG5leHQgbGluZXMgYXJlIGVtcHR5LgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1uZXh0LWxpbmVzLWVtcHR5LXRocmVzaG9sZCcgY29udGFpbnMgdGhlIG51bWJlcgorb2YgbGluZXMgcmVxdWlyZWQgdG8gYmUgZW1wdHkuCisKK0EgbGluZSBjb250YWluaW5nIG9ubHkgc3BhY2VzIGFuZCB0YWJzIGlzIGNvbnNpZGVyZWQgZW1wdHkuCisKK1RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgYSBtZW1iZXIgb2YgYSBjcml0ZXJpYSBsaXN0LiIKKyAgKGFuZCBlcmxhbmctbmV4dC1saW5lcy1lbXB0eS10aHJlc2hvbGQKKyAgICAgICAoc2F2ZS1leGN1cnNpb24KKwkgKGxldCAoKGxlZnQgZXJsYW5nLW5leHQtbGluZXMtZW1wdHktdGhyZXNob2xkKQorCSAgICAgICAoY29udCB0KSkKKwkgICAod2hpbGUgKGFuZCBjb250ICg+IGxlZnQgMCkpCisJICAgICAoZm9yd2FyZC1saW5lIDEpCisJICAgICAoc2V0cSBjb250IChsb29raW5nLWF0ICJcXHMgKiQiKSkKKwkgICAgIChzZXRxIGxlZnQgKC0gbGVmdCAxKSkpCisJICAgY29udCkpKSkKKworCisoZGVmdW4gZXJsYW5nLWF0LWtleXdvcmQtZW5kLXAgKCkKKyAgIlRlc3QgaWYgbmV4dCByZWFkYWJsZSB0b2tlbiBpcyB0aGUga2V5d29yZCBlbmQuCisKK1RoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgYSBtZW1iZXIgb2YgYSBjcml0ZXJpYSBsaXN0LiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGVybGFuZy1za2lwLWJsYW5rKQorICAgIChsb29raW5nLWF0ICJlbmRbXl9hLXpBLVowLTldIikpKQorCisMCis7OyBFcmxhbmcgdGFncyBzdXBwb3J0IHdoaWNoIGlzIGF3YXJlIG9mIGVybGFuZyBtb2R1bGVzLgorOzsKKzs7IE5vdCB5ZXQgaW1wbGVtZW50ZWQgdW5kZXIgWEVtYWNzLiAgKEhpbnQ6ICBUaGUgRW1hY3MgMTkgZXRhZ3MKKzs7IHBhY2thZ2Ugd29yayB1bmRlciBYRW1hY3MuKQorCisoZXZhbC13aGVuLWNvbXBpbGUKKyAgKGlmIChvciAoZmVhdHVyZXAgJ2J5dGVjb21wKQorCSAgKGZlYXR1cmVwICdieXRlLWNvbXBpbGUpKQorICAgICAgKHByb2duCisJKHJlcXVpcmUgJ2V0YWdzKSkpKQorCisKKzs7IFZhcmlhYmxlczoKKworKGRlZnZhciBlcmxhbmctdGFncy1mdW5jdGlvbi1hbGlzdAorICAgJygoZmluZC10YWcgICAgICAgICAgICAgICAgIC4gZXJsYW5nLWZpbmQtdGFnKQorICAgICAoZmluZC10YWctb3RoZXItd2luZG93ICAgIC4gZXJsYW5nLWZpbmQtdGFnLW90aGVyLXdpbmRvdykKKyAgICAgKGZpbmQtdGFnLXJlZ2V4cCAgICAgICAgICAuIGVybGFuZy1maW5kLXRhZy1yZWdleHApCisgICAgIChmaW5kLXRhZy1vdGhlci1mcmFtZSAgICAgLiBlcmxhbmctZmluZC10YWctb3RoZXItZnJhbWUpKQorICAgIkFsaXN0IG9mIG9sZCB0YWdzIGNvbW1hbmRzIGFuZCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb25zLiIpCisKKyhkZWZ2YXIgZXJsYW5nLXRhZ3MtaW5zdGFsbGVkIG5pbAorICAiTm9uLW5pbCB3aGVuIHRoZSBFcmxhbmcgdGFncyBzeXN0ZW0gaXMgaW5zdGFsbGVkLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLWZpbGUtbGlzdCAnKCkKKyAgIkxpc3Qgb2YgZmlsZXMgaW4gdGFnIGxpc3QuIFVzZWQgd2hlbiBmaW5kaW5nIHRhZyBvbiBmb3JtIGBtb2R1bGU6Jy4iKQorKGRlZnZhciBlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlIG5pbAorICAiTGlrZSBgdGFncy1jb21wbGV0aW9uLXRhYmxlJywgdGhpcyB0YWJsZSBjb250YWlucyBgdGFnJyBhbmQgYG1vZHVsZTp0YWcnLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLWJ1ZmZlci1pbnN0YWxsZWQtcCBuaWwKKyAgIk5vbi1uaWwgd2hlbiBlcmxhbmcgbW9kdWxlIHJlY29nbmlzaW5nIGZ1bmN0aW9ucyBpbnN0YWxsZWQuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3MtYnVmZmVyLWxpc3QgJygpCisgICJUZW1wb3JhcnkgbGlzdCBvZiBidWZmZXJzLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLW9yaWctY29tcGxldGlvbi10YWJsZSBuaWwKKyAgIlRlbXBvcmFyeSBzdG9yYWdlIGZvciBgdGFncy1jb21wbGV0aW9uLXRhYmxlJy4iKQorKGRlZnZhciBlcmxhbmctdGFncy1vcmlnLXRhZy1vcmRlciBuaWwKKyAgIlRlbXBvcmFyeSBzdG9yYWdlIGZvciBgZmluZC10YWctdGFnLW9yZGVyJy4iKQorKGRlZnZhciBlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC10YWctb3JkZXIgbmlsCisgICJUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgYGZpbmQtdGFnLXJlZ2V4cC10YWctb3JkZXInLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLW9yaWctc2VhcmNoLWZ1bmN0aW9uIG5pbAorICAiVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGBmaW5kLXRhZy1zZWFyY2gtZnVuY3Rpb24nLiIpCisoZGVmdmFyIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbiBuaWwKKyAgIlRlbXBvcmFyeSBzdG9yYWdlIGZvciBgZmluZC10YWctcmVnZXhwLXNlYXJjaC1mdW5jdGlvbicuIikKKyhkZWZ2YXIgZXJsYW5nLXRhZ3Mtb3JpZy1mb3JtYXQtaG9va3MgbmlsCisgICJUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgYHRhZ3MtdGFibGUtZm9ybWF0LWhvb2tzJy4iKQorCisoZGVmdW4gZXJsYW5nLXRhZ3MtaW5pdCAoKQorICAiSW5zdGFsbCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0YWdzLCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4KKworQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgdGFncyBmdW5jdGlvbnMgYXJlIGF3YXJlIG9mCitFcmxhbmcgbW9kdWxlcy4gIFRhZ3MgY2FuIGJlIGVudGVyZWQgb24gdGhlIGZvciBgbW9kdWxlOnRhZycgYXN3ZWxsCithcyBvbiB0aGUgb2xkIGZvcm0gYHRhZycuCisKK0luIHRoZSBjb21wbGV0aW9uIGxpc3QsIGBtb2R1bGU6dGFnJyBhbmQgYG1vZHVsZTonIHNob3dzIHVwLgorCitDYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbiBhcHByb3ByaWF0ZSBpbml0IGZpbGUsIG9yIGFkZCBpdCB0bworRXJsYW5nIG1vZGUgaG9vayB3aXRoIHRoZSBjb21tYW5kczoKKyAgICAoYWRkLWhvb2sgJ2VybGFuZy1tb2RlLWhvb2sgJ2VybGFuZy10YWdzLWluaXQpCisgICAgKGFkZC1ob29rICdlcmxhbmctc2hlbGwtbW9kZS1ob29rICdlcmxhbmctdGFncy1pbml0KQorCitUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgdW5kZXIgRW1hY3MgMTggYW5kIEVtYWNzIDE5LiAgQ3VycmVudGx5LCBJdAoraXMgbm90IGltcGxlbWVudGVkIHVuZGVyIFhFbWFjcy4gIChIaW50OiBUaGUgRW1hY3MgMTkgZXRhZ3MgbW9kdWxlCit3b3JrcyB1bmRlciBYRW1hY3MuKSIKKyAgKGludGVyYWN0aXZlKQorICAoY29uZCAoKD0gZXJsYW5nLWVtYWNzLW1ham9yLXZlcnNpb24gMTgpCisJIChyZXF1aXJlICd0YWdzKQorCSAoZXJsYW5nLXRhZ3MtZGVmaW5lLWtleXMgKGN1cnJlbnQtbG9jYWwtbWFwKSkKKwkgKHNldHEgZXJsYW5nLXRhZ3MtaW5zdGFsbGVkIHQpKQorCSh0CisJIChyZXF1aXJlICdldGFncykKKwkgOzsgVGVzdCBvbiBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBpbiB0aGUgRW1hY3MgMTkgdmVyc2lvbgorCSA7OyBvZiB0YWdzIGJ1dCBub3QgaW4gdGhlIFhFbWFjcyB2ZXJzaW9uLgorCSAoaWYgKG5vdCAoZmJvdW5kcCAnZmluZC10YWctbm9zZWxlY3QpKQorCSAgICAgKCkKKwkgICAoZXJsYW5nLXRhZ3MtZGVmaW5lLWtleXMgKGN1cnJlbnQtbG9jYWwtbWFwKSkKKwkgICAoc2V0cSBlcmxhbmctdGFncy1pbnN0YWxsZWQgdCkpKSkpCisKKworOzsgU2V0IGFsbCBrZXlzIGJvdW5kIHRvIGBmaW5kLXRhZycgZXQuYWwuIGluIHRoZSBnbG9iYWwgbWFwIGFuZCB0aGUKKzs7IG1lbnUgdG8gYGVybGFuZy1maW5kLXRhZycgZXQuYWwuIGluIGBtYXAnLgorOzsKKzs7IFRoZSBmdW5jdGlvbiBgc3Vic3RpdHV0ZS1rZXktZGVmaW5pdGlvbicgZG9lcyBub3Qgd29yayBwcm9wZXJseQorOzsgaW4gYWxsIHZlcnNpb24gb2YgRW1hY3MuCisKKyhkZWZ1biBlcmxhbmctdGFncy1kZWZpbmUta2V5cyAobWFwKQorICAiQmluZCB0YWdzIGNvbW1hbmRzIHRvIGtleW1hcCBNQVAgYXdhcmUgb2YgRXJsYW5nIG1vZHVsZXMuIgorICAobGV0ICgoYWxpc3QgZXJsYW5nLXRhZ3MtZnVuY3Rpb24tYWxpc3QpKQorICAgICh3aGlsZSBhbGlzdAorICAgICAgKGxldCogKChvbGQgKGNhciAoY2FyIGFsaXN0KSkpCisJICAgICAobmV3IChjZHIgKGNhciBhbGlzdCkpKQorCSAgICAgKGtleXMgKGFwcGVuZCAod2hlcmUtaXMtaW50ZXJuYWwgb2xkIGdsb2JhbC1tYXApKSkpCisJKHdoaWxlIGtleXMKKwkgIChkZWZpbmUta2V5IG1hcCAoY2FyIGtleXMpIG5ldykKKwkgIChzZXRxIGtleXMgKGNkciBrZXlzKSkpKQorICAgICAgKHNldHEgYWxpc3QgKGNkciBhbGlzdCkpKSkKKyAgOzsgVXBkYXRlIHRoZSBtZW51LgorICAoZXJsYW5nLW1lbnUtc3Vic3RpdHV0ZSBlcmxhbmctbWVudS1iYXNlLWl0ZW1zIGVybGFuZy10YWdzLWZ1bmN0aW9uLWFsaXN0KQorICAoZXJsYW5nLW1lbnUtaW5pdCkpCisKKworOzsgVGhlcmUgZXhpc3RzIGEgdmFyaWFibGUgYGZpbmQtdGFnLWRlZmF1bHQtZnVuY3Rpb24nLiAgSXQgaXMgbm90IHVzZWQKKzs7IHNpbmNlIGBjb21wbGV0ZS10YWcnIHVzZXMgaXQgdG8gZ2V0IGN1cnJlbnQgd29yZCB1bmRlciBwb2ludC4gIEluIHRoYXQKKzs7IHNpdHVhdGlvbiB3ZSBkb2Vzbid0IHdhbnQgdGhlIG1vZHVsZSB0byBiZSBwcmVwZW5kZWQuCisKKyhkZWZ1biBlcmxhbmctZmluZC10YWctZGVmYXVsdCAoKQorICAiUmV0dXJuIHRoZSBkZWZhdWx0IHRhZywgc2VhcmNoZXMgYC1pbXBvcnQnIGxpc3Qgb2YgaW1wb3J0ZWQgZnVuY3Rpb25zLgorU2luZ2xlIHF1b3RlcyBoYXMgYmVlbiBzdHJpcHBlZCBhd2F5LiIKKyAgKGxldCAoKG1vZC1mdW5jIChlcmxhbmctZ2V0LWZ1bmN0aW9uLXVuZGVyLXBvaW50KSkpCisgICAgKGNvbmQgKChudWxsIG1vZC1mdW5jKQorCSAgIG5pbCkKKwkgICgobnVsbCAoY2FyIG1vZC1mdW5jKSkKKwkgICAobnRoIDEgbW9kLWZ1bmMpKQorCSAgKHQKKwkgICAoY29uY2F0IChjYXIgbW9kLWZ1bmMpICI6IiAobnRoIDEgbW9kLWZ1bmMpKSkpKSkKKworCis7OyBSZXR1cm4gYHQnIHNpbmNlIGl0IGlzIHVzZWQgaW5zaWRlIGB0YWdzLWxvb3AtZm9ybScuCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIGVybGFuZy1maW5kLXRhZyAobW9kdGFnbmFtZSAmb3B0aW9uYWwgbmV4dC1wIHJlZ2V4cC1wKQorICAiTGlrZSBgZmluZC10YWcnLiAgQ2FwYWJsZSBvZiByZXRyZWl2aW5nIEVybGFuZyBtb2R1bGVzLgorCitUYWdzIGNhbiBiZSBnaXZlbiBvbiB0aGUgZm9ybXMgYHRhZycsIGBtb2R1bGU6JywgYG1vZHVsZTp0YWcnLiIKKyAgKGludGVyYWN0aXZlIChlcmxhbmctdGFnLWludGVyYWN0aXZlICJGaW5kIGBtb2R1bGU6dGFnJyBvciBgdGFnJzogIikpCisgIChzd2l0Y2gtdG8tYnVmZmVyIChlcmxhbmctZmluZC10YWctbm9zZWxlY3QgbW9kdGFnbmFtZSBuZXh0LXAgcmVnZXhwLXApKQorICB0KQorCisKKzs7IENvZGUgbWFpbmx5IGZyb20gYGZpbmQtdGFnLW90aGVyLXdpbmRvdycgaW4gYGV0YWdzLmVsJy4KKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZXJsYW5nLWZpbmQtdGFnLW90aGVyLXdpbmRvdyAodGFnbmFtZSAmb3B0aW9uYWwgbmV4dC1wIHJlZ2V4cC1wKQorICAiTGlrZSBgZmluZC10YWctb3RoZXItd2luZG93JyBidXQgYXdhcmUgb2YgRXJsYW5nIG1vZHVsZXMuIgorICAoaW50ZXJhY3RpdmUgKGVybGFuZy10YWctaW50ZXJhY3RpdmUKKwkJIkZpbmQgYG1vZHVsZTp0YWcnIG9yIGB0YWcnIG90aGVyIHdpbmRvdzogIikpCisKKyAgOzsgVGhpcyBpcyB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHRhZyBpcyBmb3VuZCBpbiB0aGUKKyAgOzsgc2VsZWN0ZWQgd2luZG93J3MgYnVmZmVyOyB3aXRob3V0IHRoaXMsIHBvaW50IGlzIG1vdmVkIGluIGJvdGgKKyAgOzsgd2luZG93cy4gIFRvIHByZXZlbnQgdGhpcywgd2Ugc2F2ZSB0aGUgc2VsZWN0ZWQgd2luZG93J3MgcG9pbnQKKyAgOzsgYmVmb3JlIGRvaW5nIGZpbmQtdGFnLW5vc2VsZWN0LCBhbmQgcmVzdG9yZSBpdCBhZnRlcndhcmRzLgorICAobGV0KiAoKHdpbmRvdy1wb2ludCAod2luZG93LXBvaW50IChzZWxlY3RlZC13aW5kb3cpKSkKKwkgKHRhZ2J1ZiAoZXJsYW5nLWZpbmQtdGFnLW5vc2VsZWN0IHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKSkKKwkgKHRhZ3BvaW50IChwcm9nbiAoc2V0LWJ1ZmZlciB0YWdidWYpIChwb2ludCkpKSkKKyAgICAoc2V0LXdpbmRvdy1wb2ludCAocHJvZzEKKwkJCSAgKHNlbGVjdGVkLXdpbmRvdykKKwkJCShzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdyB0YWdidWYpCisJCQk7OyBXZSBoYXZlIHRvIHNldCB0aGlzIG5ldyB3aW5kb3cncyBwb2ludDsgaXQKKwkJCTs7IG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGRpc3BsYXlpbmcgYQorCQkJOzsgZGlmZmVyZW50IHBvcnRpb24gb2YgdGFnYnVmLCBpbiB3aGljaCBjYXNlCisJCQk7OyBzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdyBkb2Vzbid0IHNldAorCQkJOzsgdGhlIHdpbmRvdydzIHBvaW50IGZyb20gdGhlIGJ1ZmZlci4KKwkJCShzZXQtd2luZG93LXBvaW50IChzZWxlY3RlZC13aW5kb3cpIHRhZ3BvaW50KSkKKwkJICAgICAgd2luZG93LXBvaW50KSkpCisKKworKGRlZnVuIGVybGFuZy1maW5kLXRhZy1vdGhlci1mcmFtZSAodGFnbmFtZSAmb3B0aW9uYWwgbmV4dC1wKQorICAiTGlrZSBgZmluZC10YWctb3RoZXItZnJhbWUnIGJ1dCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4iCisgIChpbnRlcmFjdGl2ZSAoZXJsYW5nLXRhZy1pbnRlcmFjdGl2ZQorCQkiRmluZCBgbW9kdWxlOnRhZycgb3IgYHRhZycgb3RoZXIgZnJhbWU6ICIpKQorICAobGV0ICgocG9wLXVwLWZyYW1lcyB0KSkKKyAgICAoZXJsYW5nLWZpbmQtdGFnLW90aGVyLXdpbmRvdyB0YWduYW1lIG5leHQtcCkpKQorCisKKyhkZWZ1biBlcmxhbmctZmluZC10YWctcmVnZXhwIChyZWdleHAgJm9wdGlvbmFsIG5leHQtcCBvdGhlci13aW5kb3cpCisgICJMaWtlIGBmaW5kLXRhZy1yZWdleHAnIGJ1dCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlcy4iCisgIChpbnRlcmFjdGl2ZSAoaWYgKGZib3VuZHAgJ2ZpbmQtdGFnLXJlZ2V4cCkKKwkJICAgKGVybGFuZy10YWctaW50ZXJhY3RpdmUKKwkJICAgICJGaW5kIGBtb2R1bGU6cmVnZXhwJyBvciBgcmVnZXhwJzogIikKKwkJIChlcnJvciAiVGhpcyB2ZXJzaW9uIG9mIEVtYWNzIGNhbid0IGZpbmQgdGFncyBieSByZWdleHBzLiIpKSkKKyAgKGZ1bmNhbGwgKGlmIG90aGVyLXdpbmRvdworCSAgICAgICAnZXJsYW5nLWZpbmQtdGFnLW90aGVyLXdpbmRvdworCSAgICAgJ2VybGFuZy1maW5kLXRhZykKKwkgICByZWdleHAgbmV4dC1wIHQpKQorCisKKzs7IEp1c3QgbGlrZSBDLXUgTS0uICBUaGlzIGNvdWxkIGJlIGFkZGVkIHRvIHRoZSBtZW51LgorKGRlZnVuIGVybGFuZy1maW5kLW5leHQtdGFnICgpCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAoaWYgZXJsYW5nLXRhZ3MtaW5zdGFsbGVkCisJKGNhbGwtaW50ZXJhY3RpdmVseSAnZXJsYW5nLWZpbmQtdGFnKQorICAgICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnZmluZC10YWcpKSkpCisKKworOzsgTWltaWNzIGBmaW5kLXRhZy1ub3NlbGVjdCcgZm91bmQgaW4gYGV0YWdzLmVsJywgYnV0IHVzZXMgYGZpbmQtdGFnJyB0bworOzsgYmUgY29tcGF0aWJsZSB3aXRoIGB0YWdzLmVsJy4KKzs7Cis7OyBIYW5kbGVzIHRocmVlIGNhc2VzOgorOzsgKiBgbW9kdWxlOicgIExvb3Agb3ZlciBhbGwgcG9zc2libGUgZmlsZW4tYW1lcy4gIFN0b3AgaWYgYSBmaWxlLW5hbWUKKzs7ICAgICAgICAgICAgICB3aXRob3V0IGV4dGVuc2lvbiBhbmQgZGlyZWN0b3J5IG1hdGNoZXMgdGhlIG1vZHVsZS4KKzs7Cis7OyAqIGBtb2R1bGU6dGFnJworOzsJCUVtYWNzIDE5OiBSZXBsYWNlIHRlc3RmdW5jdGlvbnMgd2l0aCBmdW5jdGlvbnMgYXdhcmUgb2YKKzs7CSAgICAgICAgRXJsYW5nIG1vZHVsZXMuICBUcmlja3kgYmVjYXVzZSB0aGUgZXRhZ3Mgc3lzdGVtIHdhc24ndAorOzsJCWJ1aWx0IGZvciB0aGVzZSBraW5kIG9mIG9wZXJhdGlvbnMuLi4KKzs7Cis7OyAgICAgICAgICAgICAgRW1hY3MgMTg6IFdlIGxvb3Agb3ZlciBgZmluZC10YWcnIHVudGlsIHdlIGZpbmQgYSBmaWxlCis7OyAgICAgICAgICAgICAgd2hvc2UgbW9kdWxlIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBtb2R1bGUuICBUaGUKKzs7ICAgICAgICAgICAgICBkcmF3YmFjayBpcyB0aGF0IGEgbG90IG9mIGZpbGVzIGNvdWxkIGJlIGxvYWRlZCBpbnRvCis7OyAgICAgICAgICAgICAgRW1hY3MuCis7OworOzsgKiBgdGFnJyAgICAgIEp1c3QgZ2l2ZSBpdCB0byBgZmluZC10YWcnLgorCisoZGVmdW4gZXJsYW5nLWZpbmQtdGFnLW5vc2VsZWN0IChtb2R0YWduYW1lICZvcHRpb25hbCBuZXh0LXAgcmVnZXhwLXApCisgICJMaWtlIGBmaW5kLXRhZy1ub3NlbGVjdCcgYnV0IGF3YXJlIG9mIEVybGFuZyBtb2R1bGVzLiIKKyAgKGludGVyYWN0aXZlIChlcmxhbmctdGFnLWludGVyYWN0aXZlICJGaW5kIGBtb2R1bGU6dGFnJyBvciBgdGFnJzogIikpCisgIChvciBtb2R0YWduYW1lCisgICAgICAoc2V0cSBtb2R0YWduYW1lIChzeW1ib2wtdmFsdWUgJ2xhc3QtdGFnKSkpCisgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkgJ2xhc3QtdGFnIG1vZHRhZ25hbWUpCisgIDs7IGB0YWdzLmVsJyB1c2VzIHRoaXMgdmFyaWFibGUgdG8gcmVjb3JkIGhvdyBNLSwgd291bGQKKyAgOzsga25vdyB3aGVyZSB0byByZXN0YXJ0IGEgdGFncyBjb21tYW5kLgorICAoaWYgKGJvdW5kcCAndGFncy1sb29wLWZvcm0pCisgICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJICAgICAgICd0YWdzLWxvb3AtZm9ybSAnKGVybGFuZy1maW5kLXRhZyBuaWwgdCkpKQorICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCisgICAgKGNvbmQKKyAgICAgKChzdHJpbmctbWF0Y2ggIjokIiBtb2R0YWduYW1lKQorICAgICAgOzsgT25seSB0aGUgbW9kdWxlIG5hbWUgd2FzIGdpdmVuLiAgUmVhZCBhbGwgZmlsZXMgd2hvc2UgZmlsZSBuYW1lCisgICAgICA7OyBtYXRjaC4KKyAgICAgIChsZXQgKChtb2RuYW1lIChzdWJzdHJpbmcgbW9kdGFnbmFtZSAwIChtYXRjaC1iZWdpbm5pbmcgMCkpKQorCSAgICAoZmlsZSBuaWwpKQorCShpZiAobm90IG5leHQtcCkKKwkgICAgKHNhdmUtZXhjdXJzaW9uCisJICAgICAgKHZpc2l0LXRhZ3MtdGFibGUtYnVmZmVyKQorCSAgICAgIChzZXRxIGVybGFuZy10YWdzLWZpbGUtbGlzdAorCQkgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAndGFncy10YWJsZS1maWxlcykpKSkpCisJKHdoaWxlIChudWxsIGZpbGUpCisJICAob3IgZXJsYW5nLXRhZ3MtZmlsZS1saXN0CisJICAgICAgKHNhdmUtZXhjdXJzaW9uCisJCShpZiAoYW5kIChmZWF0dXJlcCAnZXRhZ3MpCisJCQkgKGZ1bmNhbGwKKwkJCSAgKHN5bWJvbC1mdW5jdGlvbiAndmlzaXQtdGFncy10YWJsZS1idWZmZXIpICdzYW1lKQorCQkJIChmdW5jYWxsCisJCQkgIChzeW1ib2wtZnVuY3Rpb24gJ3Zpc2l0LXRhZ3MtdGFibGUtYnVmZmVyKSB0KSkKKwkJICAgIChzZXRxIGVybGFuZy10YWdzLWZpbGUtbGlzdAorCQkJICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICd0YWdzLXRhYmxlLWZpbGVzKSkpCisJCSAgKGVycm9yICJObyAlc3RhZ3MgY29udGFpbmluZyAlcyIgKGlmIG5leHQtcCAibW9yZSAiICIiKQorCQkJIG1vZHRhZ25hbWUpKSkpCisJICAoaWYgZXJsYW5nLXRhZ3MtZmlsZS1saXN0CisJICAgICAgKGxldCAoKHRoaXMtbW9kdWxlIChlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZQorCQkJCSAgKGNhciBlcmxhbmctdGFncy1maWxlLWxpc3QpKSkpCisJCShpZiAoYW5kIChzdHJpbmdwIHRoaXMtbW9kdWxlKQorCQkJIChzdHJpbmc9IG1vZG5hbWUgdGhpcy1tb2R1bGUpKQorCQkgICAgKHNldHEgZmlsZSAoY2FyIGVybGFuZy10YWdzLWZpbGUtbGlzdCkpKQorCQkoc2V0cSBlcmxhbmctdGFncy1maWxlLWxpc3QgKGNkciBlcmxhbmctdGFncy1maWxlLWxpc3QpKSkpKQorCShzZXQtYnVmZmVyIChvciAoZ2V0LWZpbGUtYnVmZmVyIGZpbGUpCisJCQkoZmluZC1maWxlLW5vc2VsZWN0IGZpbGUpKSkpKQorCisgICAgICgoc3RyaW5nLW1hdGNoICI6IiBtb2R0YWduYW1lKQorICAgICAgKGlmIChib3VuZHAgJ2ZpbmQtdGFnLXRhZy1vcmRlcikKKwkgIDs7IE1ldGhvZCBvbmU6IEFkZCBtb2R1bGUtcmVjb2duaXNpbmcgZnVuY3Rpb25zIHRvIHRoZQorCSAgOzsgbGlzdCBvZiBvcmRlciBmdW5jdGlvbnMuICBIb3dldmVyLCB0aGUgdGFncyBzeXN0ZW0KKwkgIDs7IGZyb20gRW1hY3MgMTgsIGFuZCBkZXJpdmVzIHRoZXJlb2YgKHJlYWQ6IFhFbWFjcykKKwkgIDs7IGhhc24ndCBnb3QgdGhpcyBmZWF0dXJlLgorCSAgKHByb2duCisJICAgIChlcmxhbmctdGFncy1pbnN0YWxsLW1vZHVsZS1jaGVjaykKKwkgICAgKHVud2luZC1wcm90ZWN0CisJCShmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2ZpbmQtdGFnKQorCQkJIG1vZHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKQorCSAgICAgIChlcmxhbmctdGFncy1yZW1vdmUtbW9kdWxlLWNoZWNrKSkpCisJOzsgTWV0aG9kIHR3bzogQ2FsbCB0aGUgdGFncyBzeXN0ZW0gdW50aWwgYSBmaWxlIG1hdGNoaW5nCisJOzsgdGhlIG1vZHVsZSBpcyBmb3VuZC4gIFRoaXMgY291bGQgcmVzdWx0IGluIHRoYXQgbWFueQorCTs7IGZpbGVzIGFyZSByZWFkLiAoZS5nLiBUaGUgdGFnICJmb286ZmlsZSIgd2lsbCB0YWtlIGEKKwk7OyB3aGlsZSB0byBwcm9jZXNzLikKKwkobGV0KiAoKG1vZG5hbWUgKHN1YnN0cmluZyBtb2R0YWduYW1lIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpCisJICAgICAgICh0YWduYW1lIChzdWJzdHJpbmcgbW9kdGFnbmFtZSAobWF0Y2gtZW5kIDApIG5pbCkpCisJICAgICAgIChsYXN0LXRhZyB0YWduYW1lKQorCSAgICAgICBmaWxlKQorCSAgKHdoaWxlCisJICAgICAgKHByb2duCisJCShmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2ZpbmQtdGFnKSB0YWduYW1lIG5leHQtcCByZWdleHAtcCkKKwkJKHNldHEgbmV4dC1wIHQpCisJCTs7IERldGVybWluZSB0aGUgbW9kdWxlIGZvcm0gdGhlIGZpbGUgbmFtZS4gIChUaGUKKwkJOzsgYWx0ZXJuYXRpdmUsIHRvIGNoZWNrIGAtbW9kdWxlJywgd291bGQgbWFrZSB0aGlzCisJCTs7IGNvZGUgdXNlbGVzcyBmb3Igbm9uLUVybGFuZyBwcm9ncmFtcy4pCisJCShzZXRxIGZpbGUgKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lIGJ1ZmZlci1maWxlLW5hbWUpKQorCQkobm90IChhbmQgKHN0cmluZ3AgZmlsZSkKKwkJCSAgKHN0cmluZz0gbW9kbmFtZSBmaWxlKSkpKSkpKSkKKyAgICAgKHQKKyAgICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2ZpbmQtdGFnKSBtb2R0YWduYW1lIG5leHQtcCByZWdleHAtcCkpKQorICAgIChjdXJyZW50LWJ1ZmZlcikpKQkJOyBSZXR1cm4gdGhlIG5ldyBidWZmZXIuCisKKworOzsgUHJvY2VzcyBpbnRlcmFjdGl2ZSBhcmd1bWVudHMgZm9yIGVybGFuZy1maW5kLXRhZy0qLgorOzsKKzs7IE5lZ2F0aXZlIGFyZ3VtZW50cyB3b3JrIG9ubHkgZm9yIGBldGFncycsIG5vdCBgdGFncycuICBUaGlzIGlzIG5vdAorOzsgYSBwcm9ibGVtIHNpbmNlIG5lZ2F0aXZlIGFyZ3VtZW50cyBtZWFucyBzdGVwIGJhY2sgaW50byB0aGUKKzs7IGhpc3RvcnkgbGlzdCwgYSBmZWF0dXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBgdGFncycuCisKKyhkZWZ1biBlcmxhbmctdGFnLWludGVyYWN0aXZlIChwcm9tcHQpCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZXF1aXJlICdldGFncykKKyAgICAoZXJyb3IKKyAgICAgKHJlcXVpcmUgJ3RhZ3MpKSkKKyAgKGlmIGN1cnJlbnQtcHJlZml4LWFyZworICAgICAgKGxpc3QgbmlsIChpZiAoPCAocHJlZml4LW51bWVyaWMtdmFsdWUgY3VycmVudC1wcmVmaXgtYXJnKSAwKQorCQkgICAgJy0KKwkJICB0KSkKKyAgICAobGV0KiAoKGRlZmF1bHQgKGVybGFuZy1maW5kLXRhZy1kZWZhdWx0KSkKKwkgICAocHJvbXB0IChpZiBkZWZhdWx0CisJCSAgICAgICAoZm9ybWF0ICIlcyhkZWZhdWx0ICVzKSAiIHByb21wdCBkZWZhdWx0KQorCQkgICAgIHByb21wdCkpCisJICAgKHNwZWMgKGlmIChmZWF0dXJlcCAnZXRhZ3MpCisJCSAgICAgKGNvbXBsZXRpbmctcmVhZCBwcm9tcHQgJ2VybGFuZy10YWdzLWNvbXBsZXRlLXRhZykKKwkJICAgKHJlYWQtc3RyaW5nIHByb21wdCkpKSkKKyAgICAgIChsaXN0IChpZiAoZXF1YWwgc3BlYyAiIikKKwkJKG9yIGRlZmF1bHQgKGVycm9yICJUaGVyZSBpcyBubyBkZWZhdWx0IHRhZyIpKQorCSAgICAgIHNwZWMpKSkpKQorCisMCis7OyBTZWFyY2ggdGFnIGZ1bmN0aW9ucyB3aGljaCBhcmUgYXdhcmUgb2YgRXJsYW5nIG1vZHVsZXMuICBUaGUgdGFjdGljCis7OyBpcyB0byBzdG9yZSBuZXcgc2VhcmNoIGZ1bmN0aW9ucyBpbnRvIHRoZSBsb2NhbCB2YXJpYWJlbHMgb2YgdGhlCis7OyBUQUdTIGJ1ZmZlcnMuICBUaGUgdmFyaWFibGVzIGFyZSByZXN0b3JlZCBkaXJlY3RseSBhZnRlciB0aGUKKzs7IHNlYXJjaC4gIFRoZSBzaXR1YXRpb24gaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBuZXcgVEFHUworOzsgZmlsZXMgY2FuIGJlIGxvYWRlZCBkdXJpbmcgdGhlIHNlYXJjaC4KKzs7Cis7OyBUaGlzIGNvZGUgaXMgRW1hY3MgMTkgYGV0YWdzJyBzcGVjaWZpYy4KKworKGRlZnVuIGVybGFuZy10YWdzLWluc3RhbGwtbW9kdWxlLWNoZWNrICgpCisgICJJbnN0YWxsIG91ciBvd24gdGFnIHNlYXJjaCBmdW5jdGlvbnMuIgorICA7OyBNYWtlIHN1cmUgb3VyIGZ1bmN0aW9ucyBhcmUgaW5zdGFsbGVkIGluIFRBR1MgZmlsZXMgbG9hZGVkCisgIDs7IGludG8gRW1hY3Mgd2hpbGUgc2VhcmNoaW5nLgorICAoc2V0cSBlcmxhbmctdGFncy1vcmlnLWZvcm1hdC1ob29rcworCShzeW1ib2wtdmFsdWUgJ3RhZ3MtdGFibGUtZm9ybWF0LWhvb2tzKSkKKyAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KSAndGFncy10YWJsZS1mb3JtYXQtaG9va3MKKwkgICAoY29ucyAnZXJsYW5nLXRhZ3MtcmVjb2duaXplLXRhZ3MtdGFibGUKKwkJIGVybGFuZy10YWdzLW9yaWctZm9ybWF0LWhvb2tzKSkKKyAgKHNldHEgZXJsYW5nLXRhZ3MtYnVmZmVyLWxpc3QgJygpKQorICA7OyBJbnN0YWxsIG91ciBmdW5jdGlvbnMgaW4gdGhlIFRBR1MgZmlsZXMgYWxyZWFkeSByZXNpZGVudC4KKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCAoKGZpbGVzIChzeW1ib2wtdmFsdWUgJ3RhZ3MtdGFibGUtY29tcHV0ZWQtbGlzdCkpKQorICAgICAgKHdoaWxlIGZpbGVzCisJKGlmIChzdHJpbmdwIChjYXIgZmlsZXMpKQorCSAgICAoaWYgKGdldC1maWxlLWJ1ZmZlciAoY2FyIGZpbGVzKSkKKwkJKHByb2duCisJCSAgKHNldC1idWZmZXIgKGdldC1maWxlLWJ1ZmZlciAoY2FyIGZpbGVzKSkpCisJCSAgKGVybGFuZy10YWdzLWluc3RhbGwtbG9jYWwpKSkpCisJKHNldHEgZmlsZXMgKGNkciBmaWxlcykpKSkpKQorCisKKyhkZWZ1biBlcmxhbmctdGFncy1pbnN0YWxsLWxvY2FsICgpCisgICJJbnN0YWxsIG91ciB0YWcgc2VhcmNoIGZ1bmN0aW9ucyBpbiBjdXJyZW50IGJ1ZmZlci4iCisgIChpZiBlcmxhbmctdGFncy1idWZmZXItaW5zdGFsbGVkLXAKKyAgICAgICgpCisgICAgOzsgTWFyayB0aGlzIGJ1ZmZlciBhcyAiaW5zdGFsbGVkIiBhbmQgcmVjb3JkLgorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2VybGFuZy10YWdzLWJ1ZmZlci1pbnN0YWxsZWQtcCkgdCkKKyAgICAoc2V0cSBlcmxhbmctdGFncy1idWZmZXItbGlzdAorCSAgKGNvbnMgKGN1cnJlbnQtYnVmZmVyKSBlcmxhbmctdGFncy1idWZmZXItbGlzdCkpCisKKyAgICA7OyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZXMuCisgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZXJsYW5nLXRhZ3Mtb3JpZy10YWctb3JkZXIpCisJIChzeW1ib2wtdmFsdWUgJ2ZpbmQtdGFnLXRhZy1vcmRlcikpCisgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZXJsYW5nLXRhZ3Mtb3JpZy1yZWdleHAtdGFnLW9yZGVyKQorCSAoc3ltYm9sLXZhbHVlICdmaW5kLXRhZy1yZWdleHAtdGFnLW9yZGVyKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdlcmxhbmctdGFncy1vcmlnLXNlYXJjaC1mdW5jdGlvbikKKwkgKHN5bWJvbC12YWx1ZSAnZmluZC10YWctc2VhcmNoLWZ1bmN0aW9uKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24pCisJIChzeW1ib2wtdmFsdWUgJ2ZpbmQtdGFnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24pKQorCisgICAgOzsgSW5zdGFsbCBvdXIgb3duIGZ1bmN0aW9ucy4KKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmaW5kLXRhZy1zZWFyY2gtZnVuY3Rpb24pCisJICdlcmxhbmctdGFncy1zZWFyY2gtZm9yd2FyZCkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmaW5kLXRhZy1yZWdleHAtc2VhcmNoLWZ1bmN0aW9uKQorCSAnZXJsYW5nLXRhZ3MtcmVnZXhwLXNlYXJjaC1mb3J3YXJkKQorICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZpbmQtdGFnLXRhZy1vcmRlcikKKwkgJyhlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1wKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmaW5kLXRhZy1yZWdleHAtdGFnLW9yZGVyKQorCSAnKGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLXJlZ2V4cC1wKSkpKQorCisKKyhkZWZ1biBlcmxhbmctdGFncy1yZW1vdmUtbW9kdWxlLWNoZWNrICgpCisgICJSZW1vdmUgb3VyIG93biB0YWdzIHNlYXJjaCBmdW5jdGlvbnMuIgorICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJICAgJ3RhZ3MtdGFibGUtZm9ybWF0LWhvb2tzCisJICAgZXJsYW5nLXRhZ3Mtb3JpZy1mb3JtYXQtaG9va3MpCisgIDs7IFJlbW92ZSBvdXIgZnVuY3Rpb25zIGZyb20gdGhlIFRBR1MgZmlsZXMuICAoTm90ZSB0aGF0CisgIDs7IGB0YWdzLXRhYmxlLWNvbXB1dGVkLWxpc3QnIG5lZWQgbm90IGJlIHRoZSBzYW1lIGxpc3QgYXMgd2hlbgorICA7OyB0aGUgc2VhcmNoIHdhcyBzdGFydGVkLikKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgKGxldCAoKGJ1ZmZlcnMgZXJsYW5nLXRhZ3MtYnVmZmVyLWxpc3QpKQorICAgICAgKHdoaWxlIGJ1ZmZlcnMKKwkoaWYgKGJ1ZmZlci1uYW1lIChjYXIgYnVmZmVycykpCisJICAgIChwcm9nbgorCSAgICAgIChzZXQtYnVmZmVyIChjYXIgYnVmZmVycykpCisJICAgICAgKGVybGFuZy10YWdzLXJlbW92ZS1sb2NhbCkpKQorCShzZXRxIGJ1ZmZlcnMgKGNkciBidWZmZXJzKSkpKSkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLXJlbW92ZS1sb2NhbCAoKQorICAiUmVtb3ZlIG91ciB0YWcgc2VhcmNoIGZ1bmN0aW9ucyBmcm9tIGN1cnJlbnQgYnVmZmVyLiIKKyAgKGlmIChudWxsIGVybGFuZy10YWdzLWJ1ZmZlci1pbnN0YWxsZWQtcCkKKyAgICAgICgpCisgICAgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnc2V0KSAnZXJsYW5nLXRhZ3MtYnVmZmVyLWluc3RhbGxlZC1wIG5pbCkKKyAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJICAgICAnZmluZC10YWctdGFnLW9yZGVyIGVybGFuZy10YWdzLW9yaWctdGFnLW9yZGVyKQorICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAgICdmaW5kLXRhZy1yZWdleHAtdGFnLW9yZGVyIGVybGFuZy10YWdzLW9yaWctcmVnZXhwLXRhZy1vcmRlcikKKyAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdzZXQpCisJICAgICAnZmluZC10YWctc2VhcmNoLWZ1bmN0aW9uIGVybGFuZy10YWdzLW9yaWctc2VhcmNoLWZ1bmN0aW9uKQorICAgIChmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ3NldCkKKwkgICAgICdmaW5kLXRhZy1yZWdleHAtc2VhcmNoLWZ1bmN0aW9uCisJICAgICBlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24pKSkKKworCisoZGVmdW4gZXJsYW5nLXRhZ3MtcmVjb2duaXplLXRhZ3MtdGFibGUgKCkKKyAgIkluc3RhbGwgb3VyIGZ1bmN0aW9ucyBpbiBhbGwgbG9hZGVkIFRBR1MgZmlsZXMuCisKK1RoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gYHRhZ3MtdGFibGUtZm9ybWF0LWhvb2tzJyB3aGVuIHNlYXJjaGluZworZm9yIGEgdGFnIG9uIHRoZSBmb3JtIGBtb2R1bGU6dGFnJy4iCisgIChpZiAobnVsbCAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdldGFncy1yZWNvZ25pemUtdGFncy10YWJsZSkpKQorICAgICAgbmlsCisgICAgKGVybGFuZy10YWdzLWluc3RhbGwtbG9jYWwpCisgICAgdCkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLXNlYXJjaC1mb3J3YXJkICh0YWcgJm9wdGlvbmFsIGJvdW5kIG5vZXJyb3IgY291bnQpCisgICJGb3J3YXJkIHNlYXJjaCBmdW5jdGlvbiwgYXdhcmUgb2YgRXJsYW5nIG1vZHVsZSBwcmVmaXguIgorICAoaWYgKHN0cmluZy1tYXRjaCAiOiIgdGFnKQorICAgICAgKHNldHEgdGFnIChzdWJzdHJpbmcgdGFnIChtYXRjaC1lbmQgMCkgbmlsKSkpCisgIDs7IEF2b2lkIHVuaW50ZWRlZCByZWN1cnNpb24uCisgIChpZiAoZXEgZXJsYW5nLXRhZ3Mtb3JpZy1zZWFyY2gtZnVuY3Rpb24gJ2VybGFuZy10YWdzLXNlYXJjaC1mb3J3YXJkKQorICAgICAgKHNlYXJjaC1mb3J3YXJkIHRhZyBib3VuZCBub2Vycm9yIGNvdW50KQorICAgIChmdW5jYWxsIGVybGFuZy10YWdzLW9yaWctc2VhcmNoLWZ1bmN0aW9uIHRhZyBib3VuZCBub2Vycm9yIGNvdW50KSkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLXJlZ2V4cC1zZWFyY2gtZm9yd2FyZCAodGFnICZvcHRpb25hbCBib3VuZCBub2Vycm9yIGNvdW50KQorICAiRm9yd2FyZCByZWdleHAgc2VhcmNoIGZ1bmN0aW9uLCBhd2FyZSBvZiBFcmxhbmcgbW9kdWxlIHByZWZpeC4iCisgIChpZiAoc3RyaW5nLW1hdGNoICI6IiB0YWcpCisgICAgICAoc2V0cSB0YWcgKHN1YnN0cmluZyB0YWcgKG1hdGNoLWVuZCAwKSBuaWwpKSkKKyAgKGlmIChlcSBlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC1zZWFyY2gtZnVuY3Rpb24KKwkgICdlcmxhbmctdGFncy1yZWdleHAtc2VhcmNoLWZvcndhcmQpCisgICAgICAocmUtc2VhcmNoLWZvcndhcmQgdGFnIGJvdW5kIG5vZXJyb3IgY291bnQpCisgICAgKGZ1bmNhbGwgZXJsYW5nLXRhZ3Mtb3JpZy1yZWdleHAtc2VhcmNoLWZ1bmN0aW9uCisJICAgICB0YWcgYm91bmQgbm9lcnJvciBjb3VudCkpKQorCisKKzs7IHQgaWYgcG9pbnQgaXMgYXQgYSB0YWcgbGluZSB0aGF0IG1hdGNoZXMgVEFHLCBjb250YWluaW5nCis7OyBtb2R1bGUgaW5mb3JtYXRpb24uICBBc3N1bWVzIHRoYXQgYWxsIG90aGVyIG9yZGVyIGZ1bmN0aW9ucworOzsgYXJlIHN0b3JlZCBpbiBgZXJsYW5nLXRhZ3Mtb3JpZy1bcmVnZXhdLXRhZy1vcmRlcicuCisKKyhkZWZ1biBlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1wICh0YWcpCisgIChlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1jb21tb24tcCB0YWcgZXJsYW5nLXRhZ3Mtb3JpZy10YWctb3JkZXIpKQorCisoZGVmdW4gZXJsYW5nLXRhZy1tYXRjaC1tb2R1bGUtcmVnZXhwLXAgKHRhZykKKyAgKGVybGFuZy10YWctbWF0Y2gtbW9kdWxlLWNvbW1vbi1wIHRhZyBlcmxhbmctdGFncy1vcmlnLXJlZ2V4cC10YWctb3JkZXIpKQorCisoZGVmdW4gZXJsYW5nLXRhZy1tYXRjaC1tb2R1bGUtY29tbW9uLXAgKHRhZyBvcmRlcikKKyAgKGxldCAoKG1vZCBuaWwpCisJKGZvdW5kIG5pbCkpCisgIChpZiAoc3RyaW5nLW1hdGNoICI6IiB0YWcpCisgICAgICAocHJvZ24KKwkoc2V0cSBtb2QgKHN1YnN0cmluZyB0YWcgMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKKwkoc2V0cSB0YWcgKHN1YnN0cmluZyB0YWcgKG1hdGNoLWVuZCAwKSBuaWwpKSkpCisgICh3aGlsZSAoYW5kIG9yZGVyIChub3QgZm91bmQpKQorICAgIChzZXRxIGZvdW5kCisJICAoYW5kIChub3QgKG1lbXEgKGNhciBvcmRlcikKKwkJCSAgJyhlcmxhbmctdGFnLW1hdGNoLW1vZHVsZS1wCisJCQkgICAgZXJsYW5nLXRhZy1tYXRjaC1tb2R1bGUtcmVnZXhwLXApKSkKKwkgICAgICAgKGZ1bmNhbGwgKGNhciBvcmRlcikgdGFnKSkpCisgICAgKHNldHEgb3JkZXIgKGNkciBvcmRlcikpKQorICAoYW5kIGZvdW5kCisgICAgICAgKG9yIChudWxsIG1vZCkKKwkgICAoc3RyaW5nPSBtb2QgKGVybGFuZy1nZXQtbW9kdWxlLWZyb20tZmlsZS1uYW1lCisJCQkgKGZpbGUtb2YtdGFnKSkpKSkpKQorCisMCis7OzsgVGFncyBjb21wbGV0aW9uLCBFbWFjcyAxOSBgZXRhZ3MnIHNwZWNpZmljLgorOzs7Cis7OzsgVGhlIGJhc2ljIGlkZWEgaXMgdG8gY3JlYXRlIGEgc2Vjb25kIGNvbXBsZXRpb24gdGFibGUgYGVybGFuZy10YWdzLQorOzs7IGNvbXBsZXRpb24tdGFibGUnIGNvbnRhaW5pbmcgYWxsIG5vcm1hbCB0YWdzIHBsdXMgdGFncyBvbiB0aGUgZm9ybQorOzs7IGBtb2R1bGU6dGFnJy4KKworCisoZGVmdW4gZXJsYW5nLWNvbXBsZXRlLXRhZyAoKQorICAiUGVyZm9ybSB0YWdzIGNvbXBsZXRpb24gb24gdGhlIHRleHQgYXJvdW5kIHBvaW50LgorQ29tcGxldGVzIHRvIHRoZSBzZXQgb2YgbmFtZXMgbGlzdGVkIGluIHRoZSBjdXJyZW50IHRhZ3MgdGFibGUuCisKK1Nob3VsZCB0aGUgRXJsYW5nIHRhZ3Mgc3lzdGVtIGJlIGluc3RhbGxlZCB0aGlzIGNvbW1hbmQga25vd3MKK2Fib3V0IEVybGFuZyBtb2R1bGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocmVxdWlyZSAnZXRhZ3MpCisgICAgKGVycm9yIG5pbCkpCisgIChjb25kICgoYW5kIGVybGFuZy10YWdzLWluc3RhbGxlZAorCSAgICAgIChmYm91bmRwICdjb21wbGV0ZS10YWcpKQk7IEVtYWNzIDE5CisJIChsZXQgKChvcmlnLXRhZ3MtY29tcGxldGUtdGFnIChzeW1ib2wtZnVuY3Rpb24gJ3RhZ3MtY29tcGxldGUtdGFnKSkpCisJICAgKGZzZXQgJ3RhZ3MtY29tcGxldGUtdGFnCisJCSAoc3ltYm9sLWZ1bmN0aW9uICdlcmxhbmctdGFncy1jb21wbGV0ZS10YWcpKQorCSAgICh1bndpbmQtcHJvdGVjdAorCSAgICAgICAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdjb21wbGV0ZS10YWcpKQorCSAgICAgKGZzZXQgJ3RhZ3MtY29tcGxldGUtdGFnIG9yaWctdGFncy1jb21wbGV0ZS10YWcpKSkpCisJKChmYm91bmRwICdjb21wbGV0ZS10YWcpCTsgRW1hY3MgMTkKKwkgKGZ1bmNhbGwgKHN5bWJvbC1mdW5jdGlvbiAnY29tcGxldGUtdGFnKSkpCisJKChmYm91bmRwICd0YWctY29tcGxldGUtc3ltYm9sKQk7IFhFbWFjcworCSAoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICd0YWctY29tcGxldGUtc3ltYm9sKSkpCisJKHQKKwkgKGVycm9yICJUaGlzIHZlcnNpb24gb2YgRW1hY3MgY2FuJ3QgY29tcGxldGUgdGFncy4iKSkpKQorCisKKzs7IEJhc2VkIG9uIGB0YWdzLWNvbXBsZXRlLXRhZycsIGJ1dCB0aGlzIG9uZSB1c2VzCis7OyBgZXJsYW5nLXRhZy1jb21wbGV0aW9uLXRhYmxlJyBpbnN0ZWFkIG9mIGB0YWctY29tcGxldGlvbi10YWJsZScuCis7OworOzsgVGhpcyBpcyB0aGUgZW50cnktcG9pbnQgY2FsbGVkIGJ5IHN5c3RlbSBmdW5jdGlvbiBgY29tcGxldGluZy1yZWFkJy4KKyhkZWZ1biBlcmxhbmctdGFncy1jb21wbGV0ZS10YWcgKHN0cmluZyBwcmVkaWNhdGUgd2hhdCkKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAgOzsgSWYgd2UgbmVlZCB0byBhc2sgZm9yIHRoZSB0YWcgdGFibGUsIGFsbG93IHRoYXQuCisgICAgKGxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkpCisgICAgICAodmlzaXQtdGFncy10YWJsZS1idWZmZXIpKQorICAgIChpZiAoZXEgd2hhdCB0KQorCShhbGwtY29tcGxldGlvbnMgc3RyaW5nIChlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlKSBwcmVkaWNhdGUpCisgICAgICAodHJ5LWNvbXBsZXRpb24gc3RyaW5nIChlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlKSBwcmVkaWNhdGUpKSkpCisKKworOzsgYHRhZ3MtY29tcGxldGlvbi10YWJsZScgY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5LCBtYWtlIGl0Cis7OyBjYWxsIG91ciBvd24gd2VkZ2UgaW5zdGVhZC4gIE5vdGUgdGhhdCB0aGUgcmVjdXJzaXZlIGNhbGwKKzs7IGlzIHZlcnkgcmFyZTsgIGl0IG9ubHkgb2NjdXJzIHdoZW4gYSB0YWdzLWZpbGUgY29udGFpbnMKKzs7IGBpbmNsdWRlJy1zdGF0ZW1lbnRzLgorKGRlZnVuIGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUgKCkKKyAgIkJ1aWxkIGNvbXBsZXRpb24gdGFibGUuICBUYWdzIG9uIHRoZSBmb3JtIGB0YWcnIG9yIGBtb2R1bGU6dGFnJy4iCisgIChzZXRxIGVybGFuZy10YWdzLW9yaWctY29tcGxldGlvbi10YWJsZQorCShzeW1ib2wtZnVuY3Rpb24gJ3RhZ3MtY29tcGxldGlvbi10YWJsZSkpCisgIChmc2V0ICd0YWdzLWNvbXBsZXRpb24tdGFibGUKKwkoc3ltYm9sLWZ1bmN0aW9uICdlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlLTEpKQorICAodW53aW5kLXByb3RlY3QKKyAgICAgIChlcmxhbmctdGFncy1jb21wbGV0aW9uLXRhYmxlLTEpCisgICAgKGZzZXQgJ3RhZ3MtY29tcGxldGlvbi10YWJsZQorCSAgZXJsYW5nLXRhZ3Mtb3JpZy1jb21wbGV0aW9uLXRhYmxlKSkpCisKKworKGRlZnVuIGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUtMSAoKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZXJsYW5nLXRhZ3MtY29tcGxldGlvbi10YWJsZSkKKyAgKG9yIGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUKKyAgICAgIChsZXQgKCh0YWdzLWNvbXBsZXRpb24tdGFibGUgbmlsKQorCSAgICAodGFncy1jb21wbGV0aW9uLXRhYmxlLWZ1bmN0aW9uCisJICAgICAnZXJsYW5nLWV0YWdzLXRhZ3MtY29tcGxldGlvbi10YWJsZSkpCisJKGZ1bmNhbGwgZXJsYW5nLXRhZ3Mtb3JpZy1jb21wbGV0aW9uLXRhYmxlKQorCShzZXRxIGVybGFuZy10YWdzLWNvbXBsZXRpb24tdGFibGUgdGFncy1jb21wbGV0aW9uLXRhYmxlKSkpKQorCisKKzs7IEJhc2VkIG9uIGBldGFncy10YWdzLWNvbXBsZXRpb24tdGFibGUnLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB3ZQorOzsgYWRkcyB0aHJlZSBzeW1ib2xzIHRvIHRoZSB2ZWN0b3IsIHRoZSB0YWcsIG1vZHVsZTogYW5kIG1vZHVsZTp0YWcuCis7OyBUaGUgbW9kdWxlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBmaWxlIG5hbWUgb2YgYSB0YWcuICAoVGhpcyBvbmUKKzs7IG9ubHkgd29ya3MgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYW4gYGV0YWdzJyBmaWxlLiBIb3dldmVyLCB0aGlzIGlzCis7OyB0aGUgb25seSBmb3JtYXQgc3VwcG9ydGVkIGJ5IEVtYWNzLCBzbyBmYXIuKQorKGRlZnVuIGVybGFuZy1ldGFncy10YWdzLWNvbXBsZXRpb24tdGFibGUgKCkKKyAgKGxldCAoKHRhYmxlIChtYWtlLXZlY3RvciA1MTEgMCkpCisJKGZpbGUgbmlsKSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICA7OyBUaGlzIG1vbnN0ZXIgcmVnZXhwIG1hdGNoZXMgYW4gZXRhZ3MgdGFnIGxpbmUuCisgICAgICA7OyAgIFwxIGlzIHRoZSBzdHJpbmcgdG8gbWF0Y2g7CisgICAgICA7OyAgIFwyIGlzIG5vdCBpbnRlcmVzdGluZzsKKyAgICAgIDs7ICAgXDMgaXMgdGhlIGd1ZXNzZWQgdGFnIG5hbWU7IFhYWCBndWVzcyBzaG91bGQgYmUgYmV0dGVyIGVnIERFRlVOCisgICAgICA7OyAgIFw0IGlzIG5vdCBpbnRlcmVzdGluZzsKKyAgICAgIDs7ICAgXDUgaXMgdGhlIGV4cGxpY2l0bHktc3BlY2lmaWVkIHRhZyBuYW1lLgorICAgICAgOzsgICBcNiBpcyB0aGUgbGluZSB0byBzdGFydCBzZWFyY2hpbmcgYXQ7CisgICAgICA7OyAgIFw3IGlzIHRoZSBjaGFyIHRvIHN0YXJ0IHNlYXJjaGluZyBhdC4KKyAgICAgICh3aGlsZSAocHJvZ24KKwkgICAgICAgKHdoaWxlIChhbmQKKwkJICAgICAgIChlcSAoZm9sbG93aW5nLWNoYXIpID9cZikKKwkJICAgICAgIChsb29raW5nLWF0ICJcZlxuXFwoW14sXG5dKlxcKSwuKlxuIikpCisJCSAoc2V0cSBmaWxlIChidWZmZXItc3Vic3RyaW5nCisJCQkgICAgIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCisJCSAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQorCSAgICAgICAocmUtc2VhcmNoLWZvcndhcmQKKwkJIlwKK15cXChcXChbXlwxNzddK1teLWEtekEtWjAtOV8kXDE3N10rXFwpP1xcKFstYS16QS1aMC05XyQ/Ol0rXFwpXAorXFteLWEtekEtWjAtOV8kPzpcMTc3XSpcXClcMTc3XFwoXFwoW15cblwwMDFdK1xcKVwwMDFcXCk/XAorXFwoWzAtOV0rXFwpPyxcXChbMC05XStcXCk/XG4iCisJCW5pbCB0KSkKKwkobGV0ICgodGFnIChpZiAobWF0Y2gtYmVnaW5uaW5nIDUpCisJCSAgICAgICA7OyBUaGVyZSBpcyBhbiBleHBsaWNpdCB0YWcgbmFtZS4KKwkJICAgICAgIChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgNSkgKG1hdGNoLWVuZCA1KSkKKwkJICAgICA7OyBObyBleHBsaWNpdCB0YWcgbmFtZS4gIEJlc3QgZ3Vlc3MuCisJCSAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAzKSAobWF0Y2gtZW5kIDMpKSkpCisJICAgICAgKG1vZHVsZSAoYW5kIGZpbGUKKwkJCSAgIChlcmxhbmctZ2V0LW1vZHVsZS1mcm9tLWZpbGUtbmFtZSBmaWxlKSkpKQorCSAgKGludGVybiB0YWcgdGFibGUpCisJICAoaWYgKHN0cmluZ3AgbW9kdWxlKQorCSAgICAgIChwcm9nbgorCQkoaW50ZXJuIChjb25jYXQgbW9kdWxlICI6IiB0YWcpIHRhYmxlKQorCQk7OyBPbmx5IHRoZSBmaXJzdCBvbmUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHRhYmxlLgorCQkoaW50ZXJuIChjb25jYXQgbW9kdWxlICI6IikgdGFibGUpKSkpKSkKKyAgICB0YWJsZSkpCisMCis7OzsKKzs7OyBQcmVwYXJlIGZvciBvdGhlciBtZXRob2RzIHRvIHJ1biBhbiBFcmxhbmcgc2xhdmUgcHJvY2Vzcy4KKzs7OworCisoZGVmdmFyIGVybGFuZy1zaGVsbC1mdW5jdGlvbiAnaW5mZXJpb3ItZXJsYW5nCisgICJDb21tYW5kIHRvIGV4ZWN1dGUgc3RhcnQgYSBuZXcgRXJsYW5nIHNoZWxsLgorCitDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB1c2UgeW91ciBmYXZvcml0ZQorRXJsYW5nIGNvbXBpbGF0aW9uIHBhY2thZ2UuIikKKworKGRlZnZhciBlcmxhbmctc2hlbGwtZGlzcGxheS1mdW5jdGlvbiAnaW5mZXJpb3ItZXJsYW5nLXJ1bi1vci1zZWxlY3QKKyAgIkNvbW1hbmQgdG8gZXhlY3V0ZSB0byBkaXNwbGF5IEVybGFuZyBzaGVsbC4KKworQ2hhbmdlIHRoaXMgdmFyaWFibGUgdG8gdXNlIHlvdXIgZmF2b3JpdGUKK0VybGFuZyBjb21waWxhdGlvbiBwYWNrYWdlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWNvbXBpbGUtZnVuY3Rpb24gJ2luZmVyaW9yLWVybGFuZy1jb21waWxlCisgICJDb21tYW5kIHRvIGV4ZWN1dGUgdG8gY29tcGlsZSBjdXJyZW50IGJ1ZmZlci4KKworQ2hhbmdlIHRoaXMgdmFyaWFibGUgdG8gdXNlIHlvdXIgZmF2b3JpdGUKK0VybGFuZyBjb21waWxhdGlvbiBwYWNrYWdlLiIpCisKKyhkZWZ2YXIgZXJsYW5nLWNvbXBpbGUtZGlzcGxheS1mdW5jdGlvbiAnaW5mZXJpb3ItZXJsYW5nLXJ1bi1vci1zZWxlY3QKKyAgIkNvbW1hbmQgdG8gZXhlY3V0ZSB0byB2aWV3IGxhc3QgY29tcGlsYXRpb24uCisKK0NoYW5nZSB0aGlzIHZhcmlhYmxlIHRvIHVzZSB5b3VyIGZhdm9yaXRlCitFcmxhbmcgY29tcGlsYXRpb24gcGFja2FnZS4iKQorCisoZGVmdmFyIGVybGFuZy1uZXh0LWVycm9yLWZ1bmN0aW9uICdpbmZlcmlvci1lcmxhbmctbmV4dC1lcnJvcgorICAiQ29tbWFuZCB0byBleGVjdXRlIHRvIGdvIHRvIHRoZSBuZXh0IGVycm9yLgorCitDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB1c2UgeW91ciBmYXZvcml0ZQorRXJsYW5nIGNvbXBpbGF0aW9uIHBhY2thZ2UuIikKKworCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIGVybGFuZy1zaGVsbCAoKQorICAiU3RhcnQgYSBuZXcgRXJsYW5nIHNoZWxsLgorCitUaGUgdmFyaWFibGUgYGVybGFuZy1zaGVsbC1mdW5jdGlvbicgZGVjaWRlcyB3aGljaCBtZXRob2QgdG8gdXNlLAorZGVmYXVsdCBpcyB0byBzdGFydCBhIG5ldyBFcmxhbmcgaG9zdC4gIEl0IGlzIHBvc3NpYmxlIHRoYXQsIGluIHRoZQorZnV0dXJlLCBhIG5ldyBzaGVsbCBvbiBhbiBhbHJlYWR5IHJ1bm5pbmcgaG9zdCB3aWxsIGJlIHN0YXJ0ZWQuIgorICAoaW50ZXJhY3RpdmUpCisgIChjYWxsLWludGVyYWN0aXZlbHkgZXJsYW5nLXNoZWxsLWZ1bmN0aW9uKSkKKworCis7OzsjIyNhdXRvbG9hZCAoYXV0b2xvYWQgJ3J1bi1lcmxhbmcgImVybGFuZyIgIlN0YXJ0IGEgbmV3IEVybGFuZyBzaGVsbC4iIHQpCisKKzs7IEl0IGlzIGN1c3RvbWFyeSBmb3IgRW1hY3MgcGFja2FnZXMgdG8gc3VwcGx5IGEgZnVuY3Rpb24gb24gdGhpcworOzsgZm9ybSwgZXZlbiB0aG91Z2ggaXQgdmlvbGF0ZXMgdGhlIGBlcmxhbmctKicgbmFtZSBjb252ZW50aW9uLgorKGZzZXQgJ3J1bi1lcmxhbmcgJ2VybGFuZy1zaGVsbCkKKworCisoZGVmdW4gZXJsYW5nLXNoZWxsLWRpc3BsYXkgKCkKKyAgIkRpc3BsYXkgYW4gRXJsYW5nIHNoZWxsLCBvciBzdGFydCBhIG5ldy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGNhbGwtaW50ZXJhY3RpdmVseSBlcmxhbmctc2hlbGwtZGlzcGxheS1mdW5jdGlvbikpCisKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBlcmxhbmctY29tcGlsZSAoKQorICAiQ29tcGlsZSBFcmxhbmcgbW9kdWxlIGluIGN1cnJlbnQgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlKQorICAoY2FsbC1pbnRlcmFjdGl2ZWx5IGVybGFuZy1jb21waWxlLWZ1bmN0aW9uKSkKKworCisoZGVmdW4gZXJsYW5nLWNvbXBpbGUtZGlzcGxheSAoKQorICAiRGlzcGxheSBjb21waWxhdGlvbiBvdXRwdXQuIgorICAoaW50ZXJhY3RpdmUpCisgIChjYWxsLWludGVyYWN0aXZlbHkgZXJsYW5nLWNvbXBpbGUtZGlzcGxheS1mdW5jdGlvbikpCisKKworKGRlZnVuIGVybGFuZy1uZXh0LWVycm9yICgpCisgICJEaXNwbGF5IG5leHQgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBsYXRlc3QgY29tcGlsYXRpb24uIgorICAoaW50ZXJhY3RpdmUpCisgIChjYWxsLWludGVyYWN0aXZlbHkgZXJsYW5nLW5leHQtZXJyb3ItZnVuY3Rpb24pKQorCisKKwwKKzs7OworOzs7IEVybGFuZyBTaGVsbCBNb2RlIC0tIE1ham9yIG1vZGUgdXNlZCBmb3IgRXJsYW5nIHNoZWxscy4KKzs7OworCis7OyBUaGlzIG1vZGUgaXMgZGVzaWduZWQgdG8gYmUgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQsCis7OyBlLmcuIGl0IGRvZXMgbm90IGFzc3VtZSB0aGF0IHdlIGFyZSBydW5uaW5nIGFuIGluZmVyaW9yCis7OyBFcmxhbmcsIHRoZXJlIGV4aXN0cyBhIGxvdCBvZiBvdGhlciBwb3NzaWJpbGl0aWVzLgorCisKKyhkZWZ2YXIgZXJsYW5nLXNoZWxsLWJ1ZmZlci1uYW1lICIqZXJsYW5nKiIKKyAgIipUaGUgbmFtZSBvZiB0aGUgRXJsYW5nIGxpbmsgc2hlbGwgYnVmZmVyLiIpCisKKworKGRlZnZhciBlcmxhbmctc2hlbGwtbW9kZS1tYXAgbmlsCisgICIqS2V5bWFwIHVzZWQgYnkgRXJsYW5nIHNoZWxscy4iKQorCisKKyhkZWZ2YXIgZXJsYW5nLXNoZWxsLW1vZGUtaG9vayBuaWwKKyAgIipVc2VyIGZ1bmN0aW9ucyB0byBydW4gd2hlbiBhbiBFcmxhbmcgc2hlbGwgaXMgc3RhcnRlZC4KKworVGhpcyBob29rIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgRXJsYW5nIG1vZGUuICBJdCBpcworbm9ybWFsbHkgdXNlZCBieSB0aGUgdXNlciB0byBwZXJzb25hbGlzZSB0aGUgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQuCitXaGVuIHVzZWQgaW4gYSBzaXRlIGluaXQgZmlsZSwgaXQgY291bGQgYmUgdXNlZCB0byBjdXN0b21pc2UgRXJsYW5nCittb2RlIGZvciBhbGwgdXNlcnMgb24gdGhlIHN5c3RlbS4KKworVGhlIGZ1bmN0aW9uZWQgYWRkZWQgdG8gdGhpcyBob29rIGlzIHJ1bmVkIGV2ZXJ5IHRpbWUgYSBuZXcgRXJsYW5nCitzaGVsbCBpcyBzdGFydGVkLgorCitTZWUgYWxzbyBgZXJsYW5nLWxvYWQtaG9vaycsIGEgaG9vayB3aGljaCBpcyBydW5lZCBvbmNlLCB3aGVuIEVybGFuZworbW9kZSBpcyBsb2FkZWQsIGFuZCBgZXJsYW5nLW1vZGUtaG9vaycgd2hpY2ggaXMgcnVuZWQgZXZlcnkgdGltZSBhIG5ldworRXJsYW5nIHNvdXJjZSBmaWxlIGlzIGxvYWRlZCBpbnRvIEVtYWNzLiIpCisKKworKGRlZnZhciBlcmxhbmctaW5wdXQtcmluZy1maWxlLW5hbWUgIn4vLmVybGFuZ19oaXN0b3J5IgorICAiKldoZW4gbm9uLW5pbCwgZmlsZSBuYW1lIHVzZWQgdG8gc3RvcmUgZXJsYW5nIHNoZWxsIGhpc3RvcnkgaW5mb3JtYXRpb24uIikKKworCisoZGVmdW4gZXJsYW5nLXNoZWxsLW1vZGUgKCkKKyAgIk1ham9yIG1vZGUgZm9yIGludGVyYWN0aW5nIHdpdGggYW4gRXJsYW5nIHNoZWxsLgorCitXZSBhc3N1bWUgdGhhdCB3ZSBhbHJlYWR5IGFyZSBpbiBjb21pbnQtbW9kZS4KKworVGhlIGZvbGxvd2luZyBzcGVjaWFsIGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CitcXHtlcmxhbmctc2hlbGwtbW9kZS1tYXB9IgorICAoaW50ZXJhY3RpdmUpCisgIChzZXRxIG1ham9yLW1vZGUgJ2VybGFuZy1zaGVsbC1tb2RlKQorICAoc2V0cSBtb2RlLW5hbWUgIkVybGFuZyBTaGVsbCIpCisgIChlcmxhbmctbW9kZS12YXJpYWJsZXMpCisgIChpZiBlcmxhbmctc2hlbGwtbW9kZS1tYXAKKyAgICAgIG5pbAorICAgIChzZXRxIGVybGFuZy1zaGVsbC1tb2RlLW1hcCAoY29weS1rZXltYXAgY29taW50LW1vZGUtbWFwKSkKKyAgICAoZXJsYW5nLXNoZWxsLW1vZGUtY29tbWFuZHMgZXJsYW5nLXNoZWxsLW1vZGUtbWFwKSkKKyAgKHVzZS1sb2NhbC1tYXAgZXJsYW5nLXNoZWxsLW1vZGUtbWFwKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21waWxhdGlvbi1wYXJzaW5nLWVuZCkgMSkKKyAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tcGlsYXRpb24tZXJyb3ItbGlzdCkgbmlsKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21waWxhdGlvbi1vbGQtZXJyb3ItbGlzdCkgbmlsKQorICA7OyBOZWVkZWQgd2hlbiBjb21waWxpbmcgZGlyZWN0bHkgZnJvbSB0aGUgRXJsYW5nIHNoZWxsLgorICAoc2V0cSBjb21waWxhdGlvbi1sYXN0LWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorICAoZXJsYW5nLWFkZC1jb21waWxhdGlvbi1hbGlzdCBlcmxhbmctZXJyb3ItcmVnZXhwLWFsaXN0KQorICAoc2V0cSBjb21pbnQtcHJvbXB0LXJlZ2V4cCAiXltePj1dKj4gKiIpCisgIChzZXRxIGNvbWludC1lb2wtb24tc2VuZCB0KQorICAoc2V0cSBjb21pbnQtaW5wdXQtaWdub3JlZHVwcyB0KQorICAoc2V0cSBjb21pbnQtc2Nyb2xsLXNob3ctbWF4aW11bS1vdXRwdXQgdCkKKyAgKHNldHEgY29taW50LXNjcm9sbC10by1ib3R0b20tb24tb3V0cHV0IHQpCisgIDs7IEluIEVtYWNzIDE5LjMwLCBgYWRkLWhvb2snIGhhcyBnb3QgYSBgbG9jYWwnIGZsYWcsIHVzZSBpdC4gIElmCisgIDs7IHRoZSBjYWxsIGZhaWxzLCBqdXN0IGNhbGwgdGhlIG5vcm1hbCBgYWRkLWhvb2snLgorICAoY29uZGl0aW9uLWNhc2UgbmlsCisgICAgICAocHJvZ24KKwkoZnVuY2FsbCAoc3ltYm9sLWZ1bmN0aW9uICdhZGQtaG9vaykgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucworCQkgICdpbmZlcmlvci1lcmxhbmctc3RyaXAtZGVsZXRlIG5pbCB0KQorCShmdW5jYWxsIChzeW1ib2wtZnVuY3Rpb24gJ2FkZC1ob29rKSAnY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zCisJCSAgJ2luZmVyaW9yLWVybGFuZy1zdHJpcC1jdHJsLW0gbmlsIHQpKQorICAgIChlcnJvcgorICAgICAoYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucyAnaW5mZXJpb3ItZXJsYW5nLXN0cmlwLWRlbGV0ZSkKKyAgICAgKGFkZC1ob29rICdjb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbnMgJ2luZmVyaW9yLWVybGFuZy1zdHJpcC1jdHJsLW0pKSkKKyAgOzsgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBjb21pbnQgZG9lc24ndCBoYXZlIGFuIGlucHV0IHJpbmcuCisgIChpZiAoZmJvdW5kcCAnY29taW50LXJlYWQtaW5wdXQtcmluZykKKyAgICAgIChwcm9nbgorCShzZXRxIGNvbWludC1pbnB1dC1yaW5nLWZpbGUtbmFtZSBlcmxhbmctaW5wdXQtcmluZy1maWxlLW5hbWUpCisJKGNvbWludC1yZWFkLWlucHV0LXJpbmcgdCkKKwkobWFrZS1sb2NhbC12YXJpYWJsZSAna2lsbC1idWZmZXItaG9vaykKKwkoYWRkLWhvb2sgJ2tpbGwtYnVmZmVyLWhvb2sgJ2NvbWludC13cml0ZS1pbnB1dC1yaW5nKSkpCisgIChydW4taG9va3MgJ2VybGFuZy1zaGVsbC1tb2RlLWhvb2spKQorCisKKyhkZWZ1biBlcmxhbmctc2hlbGwtbW9kZS1jb21tYW5kcyAobWFwKQorICAoZGVmaW5lLWtleSBtYXAgIlxNLVx0IiAgICAnZXJsYW5nLWNvbXBsZXRlLXRhZykKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1hIiAgICAgJ2NvbWludC1ib2wpIDsgTm9ybWFsbHkgdGhlIG90aGVyIHdheSBhcm91bmQuCisgIChkZWZpbmUta2V5IG1hcCAiXEMtY1xDLWEiICdiZWdpbm5pbmctb2YtbGluZSkKKyAgKGRlZmluZS1rZXkgbWFwICJcQy1kIiAgICAgbmlsKQk7IFdhcyBgY29taW50LWRlbGNoYXItb3ItbWF5YmUtZW9mJworICAoZGVmaW5lLWtleSBtYXAgIlxDLXhgIiAgICAnZXJsYW5nLW5leHQtZXJyb3IpKQorDAorOzs7Cis7OzsgSW5mZXJpb3IgRXJsYW5nIC0tIFJ1biBhbiBFcmxhbmcgc2hlbGwgYXMgYSBzdWJwcm9jZXNzLgorOzs7CisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyLWFueS1mcmFtZSBuaWwKKyAgIipXaGVuIG5pbCwgYGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlcicgdXNlIG9ubHkgc2VsZWN0ZWQgZnJhbWUuCitXaGVuIHQsIGFsbCBmcmFtZXMgYXJlIHNlYXJjaGVkLiAgV2hlbiAncmFpc2UsIHRoZSBmcmFtZSBpcyByYWlzZWQuIikKKworKGRlZnZhciBpbmZlcmlvci1lcmxhbmctc2hlbGwtdHlwZSAnbmV3c2hlbGwKKyAgIlRoZSB0eXBlIG9mIEVybGFuZyBzaGVsbCB0byB1c2UuCisKK1doZW4gdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIGF0b20gYG9sZHNoZWxsJywgdGhlIG9sZCBzaGVsbCBpcyB1c2VkLgorV2hlbiBzZXQgdG8gYG5ld3NoZWxsJyB0aGUgbmV3IHNoZWxsIGlzIHVzZWQuICBTaG91bGQgdGhlIHZhcmlhYmxlIGJlCituaWwsIHRoZSBkZWZhdWx0IHNoZWxsIGlzIHVzZWQuCisKK1RoaXMgdmFyaWFibGUgaW5mbHVlbmNlIHRoZSBzZXR0aW5nIG9mIG90aGVyIHZhcmlhYmxlcy4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1tYWNoaW5lICJlcmwiCisgICIqVGhlIG5hbWUgb2YgdGhlIEVybGFuZyBzaGVsbC4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1tYWNoaW5lLW9wdGlvbnMgJygpCisgICIqVGhlIG9wdGlvbnMgdXNlZCB3aGVuIGFjdGl2YXRpbmcgdGhlIEVybGFuZyBzaGVsbC4KKworVGhpcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzLiIpCisKKyhkZWZ2YXIgaW5mZXJpb3ItZXJsYW5nLXByb2Nlc3MtbmFtZSAiaW5mZXJpb3ItZXJsYW5nIgorICAiKlRoZSBuYW1lIG9mIHRoZSBpbmZlcmlvciBFcmxhbmcgcHJvY2Vzcy4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1idWZmZXItbmFtZSBlcmxhbmctc2hlbGwtYnVmZmVyLW5hbWUKKyAgIipUaGUgbmFtZSBvZiB0aGUgaW5mZXJpb3IgZXJsYW5nIGJ1ZmZlci4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1wcm9tcHQtdGltZW91dCA2MAorICAiKk51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBgaW5mZXJpb3ItZXJsYW5nLXdhaXQtcHJvbXB0JyB0aW1lb3V0cy4KKworVGhlIHRpbWUgc3BlY2lmaWVkIGlzIHdhaXRlZCBhZnRlciBldmVyeSBvdXRwdXQgbWFkZSBieSB0aGUgaW5mZXJpb3IKK0VybGFuZyBzaGVsbC4gIFdoZW4gdGhpcyB2YXJpYWJsZSBpcyB0LCB3ZSBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgaGF2ZQorYSBwcm9tcHQuICBXaGVuIG5pbCwgd2Ugd2lsbCB3YWl0IGZvcmV2ZXIsIG9yIHVudGlsIEMtZy4iKQorCisoZGVmdmFyIGluZmVyaW9yLWVybGFuZy1wcm9jZXNzIG5pbAorICAiUHJvY2VzcyBvZiBsYXN0IGludm9rZWQgaW5mZXJpb3IgRXJsYW5nLCBvciBuaWwuIikKKworKGRlZnZhciBpbmZlcmlvci1lcmxhbmctYnVmZmVyIG5pbAorICAiQnVmZmVyIG9mIGxhc3QgaW52b2tlZCBpbmZlcmlvciBFcmxhbmcsIG9yIG5pbC4iKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIGluZmVyaW9yLWVybGFuZyAoKQorICAiUnVuIGFuIGluZmVyaW9yIEVybGFuZy4KKworVGhpcyBpcyBqdXN0IGxpa2UgcnVubmluZyBFcmxhbmcgaW4gYSBub3JtYWwgc2hlbGwsIGV4Y2VwdCB0aGF0CithbiBFbWFjcyBidWZmZXIgaXMgdXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dC4KKworVGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5IGNhbiBiZSBhY2Nlc3NlZCB3aXRoICBNLXAgIGFuZCAgTS1uLgorVGhlIGhpc3RvcnkgaXMgc2F2ZWQgYmV0d2VlbiBzZXNzaW9ucy4KKworRW50cnkgdG8gdGhpcyBtb2RlIGNhbGxzIHRoZSBmdW5jdGlvbnMgaW4gdGhlIHZhcmlhYmxlcworYGNvbWludC1tb2RlLWhvb2snIGFuZCBgZXJsYW5nLXNoZWxsLW1vZGUtaG9vaycgd2l0aCBubyBhcmd1bWVudHMuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW1pdGF0ZSB0aGUgdXN1YWwgVW5peCBpbnRlcnJ1cHQgYW5kCitlZGl0aW5nIGNvbnRyb2wgY2hhcmFjdGVyczoKK1xce2VybGFuZy1zaGVsbC1tb2RlLW1hcH0iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHJlcXVpcmUgJ2NvbWludCkKKyAgKGxldCAoKG9wdHMgaW5mZXJpb3ItZXJsYW5nLW1hY2hpbmUtb3B0aW9ucykpCisgICAgKGNvbmQgKChlcSBpbmZlcmlvci1lcmxhbmctc2hlbGwtdHlwZSAnb2xkc2hlbGwpCisJICAgKHNldHEgb3B0cyAoY29ucyAiLW9sZHNoZWxsIiBvcHRzKSkpCisJICAoKGVxIGluZmVyaW9yLWVybGFuZy1zaGVsbC10eXBlICduZXdzaGVsbCkKKwkgICAoc2V0cSBvcHRzIChhcHBlbmQgJygiLW5ld3NoZWxsIiAiLWVudiIgIlRFUk0iICJ2dDEwMCIpIG9wdHMpKSkpCisgICAgKHNldHEgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcgorCSAgKGFwcGx5ICdtYWtlLWNvbWludAorCQkgaW5mZXJpb3ItZXJsYW5nLXByb2Nlc3MtbmFtZSBpbmZlcmlvci1lcmxhbmctbWFjaGluZQorCSAgICAgICBuaWwgb3B0cykpKQorICAoc2V0cSBpbmZlcmlvci1lcmxhbmctcHJvY2VzcworCShnZXQtYnVmZmVyLXByb2Nlc3MgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikpCisgIChwcm9jZXNzLWtpbGwtd2l0aG91dC1xdWVyeSBpbmZlcmlvci1lcmxhbmctcHJvY2VzcykKKyAgKHN3aXRjaC10by1idWZmZXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikKKyAgKGlmIChhbmQgKG5vdCAoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpKQorCSAgIChlcSBpbmZlcmlvci1lcmxhbmctc2hlbGwtdHlwZSAnbmV3c2hlbGwpKQorICAgICAgKHNldHEgY29taW50LXByb2Nlc3MtZWNob2VzIHQpKQorICA7OyBgcmVuYW1lLWJ1ZmZlcicgdGFrZXMgb25seSBvbmUgYXJndW1lbnQgaW4gRW1hY3MgMTguCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChyZW5hbWUtYnVmZmVyIGluZmVyaW9yLWVybGFuZy1idWZmZXItbmFtZSB0KQorICAgIChlcnJvciAocmVuYW1lLWJ1ZmZlciBpbmZlcmlvci1lcmxhbmctYnVmZmVyLW5hbWUpKSkKKyAgKGVybGFuZy1zaGVsbC1tb2RlKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXJ1bi1vci1zZWxlY3QgKCkKKyAgIlN3aXRjaCB0byBhbiBpbmZlcmlvciBFcmxhbmcgYnVmZmVyLCBwb3NzaWJseSBzdGFydGluZyBuZXcgcHJvY2Vzcy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChudWxsIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKSkKKyAgICAgIChpbmZlcmlvci1lcmxhbmcpCisgICAgKGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlciB0KSkpCisKKworKGRlZnVuIGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlciAoJm9wdGlvbmFsIHNlbGVjdCkKKyAgIk1ha2UgdGhlIGluZmVyaW9yIEVybGFuZyBwcm9jZXNzIHZpc2libGUuCitUaGUgd2luZG93IGlzIHJldHVybmVkLgorCitTaG91bGQgYGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlci1hbnktZnJhbWUnIGJlIG5pbCB0aGUgYnVmZmVyIGlzCitkaXNwbGF5ZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUuICBTaG91bGQgaXQgYmUgbm9uLW5pbCwgYW5kIHRoZSBidWZmZXIKK2FscmVhZHkgaXMgdmlzaWJsZSBpbiBhbnkgb3RoZXIgZnJhbWUsIG5vIG5ldyB3aW5kb3cgd2lsbCBiZSBjcmVhdGVkLgorU2hvdWxkIGl0IGJlIHRoZSBhdG9tICdyYWlzZSwgdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIHdpbmRvdyB3aWxsCitiZSByYWlzZWQuCisKK1Nob3VsZCB0aGUgb3B0aW9uYWwgYXJndW1lbnQgU0VMRUNUIGJlIG5vbi1uaWwsIHRoZSB3aW5kb3cgaXMKK3NlbGVjdGVkLiAgU2hvdWxkIHRoZSB3aW5kb3cgYmUgaW4gYW5vdGhlciBmcmFtZSwgdGhhdCBmcmFtZSBpcyByYWlzZWQuCisKK05vdGUsIHNob3VsZCB0aGUgbW91c2UgcG9pbnRlciBiZSBwbGFjZXMgb3V0c2lkZSB0aGUgcmFpc2VkIGZyYW1lLCB0aGF0CitmcmFtZSB3aWxsIGJlY29tZSBkZXNlbGVjdGVkIGJlZm9yZSB0aGUgbmV4dCBjb21tYW5kLiIKKyAgKGludGVyYWN0aXZlKQorICAob3IgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAoZXJyb3IgIk5vIGluZmVyaW9yIEVybGFuZyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikpCisgIChsZXQgKCh3aW4gKGluZmVyaW9yLWVybGFuZy13aW5kb3cKKwkgICAgICBpbmZlcmlvci1lcmxhbmctZGlzcGxheS1idWZmZXItYW55LWZyYW1lKSkKKwkoZnJhbWVzLXAgKGZib3VuZHAgJ3NlbGVjdGVkLWZyYW1lKSkpCisgICAgKGlmIChudWxsIHdpbikKKwkobGV0ICgob2xkLXdpbiAoc2VsZWN0ZWQtd2luZG93KSkpCisJICAoc2F2ZS1leGN1cnNpb24KKwkgICAgKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IGluZmVyaW9yLWVybGFuZy1idWZmZXIpCisJICAgIChzZXRxIHdpbiAoc2VsZWN0ZWQtd2luZG93KSkpCisJICAoc2VsZWN0LXdpbmRvdyBvbGQtd2luKSkKKyAgICAgIChpZiAoYW5kIHdpbmRvdy1zeXN0ZW0KKwkgICAgICAgZnJhbWVzLXAKKwkgICAgICAgKG9yIHNlbGVjdAorCQkgICAoZXEgaW5mZXJpb3ItZXJsYW5nLWRpc3BsYXktYnVmZmVyLWFueS1mcmFtZSAncmFpc2UpKQorCSAgICAgICAobm90IChlcSAoc2VsZWN0ZWQtZnJhbWUpICh3aW5kb3ctZnJhbWUgd2luKSkpKQorCSAgKHJhaXNlLWZyYW1lICh3aW5kb3ctZnJhbWUgd2luKSkpKQorICAgIChpZiBzZWxlY3QKKwkoc2VsZWN0LXdpbmRvdyB3aW4pKQorICAgIChzaXQtZm9yIDApCisgICAgd2luKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXJ1bm5pbmctcCAoKQorICAiTm9uLW5pbCB3aGVuIGFuIGluZmVyaW9yIEVybGFuZyBpcyBydW5uaW5nLiIKKyAgKGFuZCBpbmZlcmlvci1lcmxhbmctcHJvY2VzcworCSAgIChtZW1xIChwcm9jZXNzLXN0YXR1cyBpbmZlcmlvci1lcmxhbmctcHJvY2VzcykgJyhydW4gb3BlbikpCisJICAgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcgorCSAgIChidWZmZXItbmFtZSBpbmZlcmlvci1lcmxhbmctYnVmZmVyKSkpCisKKworKGRlZnVuIGluZmVyaW9yLWVybGFuZy13aW5kb3cgKCZvcHRpb25hbCBhbGwtZnJhbWVzKQorICAiUmV0dXJuIHRoZSB3aW5kb3cgY29udGFpbmluZyB0aGUgaW5mZXJpb3IgRXJsYW5nLCBvciBuaWwuIgorICAoYW5kIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKQorICAgICAgIChpZiAoYW5kIGFsbC1mcmFtZXMgKD49IGVybGFuZy1lbWFjcy1tYWpvci12ZXJzaW9uIDE5KSkKKwkgICAoZ2V0LWJ1ZmZlci13aW5kb3cgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlciB0KQorCSAoZ2V0LWJ1ZmZlci13aW5kb3cgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLXdhaXQtcHJvbXB0ICgpCisgICJXYWl0IHVudGlsIHRoZSBpbmZlcmlvciBFcmxhbmcgc2hlbGwgcHJvbXB0IGFwcGVhci4iCisgIChpZiAoZXEgaW5mZXJpb3ItZXJsYW5nLXByb21wdC10aW1lb3V0IHQpCisgICAgICAoKQorICAgIChvciAoaW5mZXJpb3ItZXJsYW5nLXJ1bm5pbmctcCkKKwkoZXJyb3IgIk5vIGluZmVyaW9yIEVybGFuZyBzaGVsbCBpcyBydW5uaW5nLiIpKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKHNldC1idWZmZXIgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikKKyAgICAgIChsZXQgKChtc2cgbmlsKSkKKwkod2hpbGUgKHNhdmUtZXhjdXJzaW9uCisJCSAoZ290by1jaGFyIChwcm9jZXNzLW1hcmsgaW5mZXJpb3ItZXJsYW5nLXByb2Nlc3MpKQorCQkgKGZvcndhcmQtbGluZSAwKQorCQkgKG5vdCAobG9va2luZy1hdCBjb21pbnQtcHJvbXB0LXJlZ2V4cCkpKQorCSAgKGlmIG1zZworCSAgICAgICgpCisJICAgIChzZXRxIG1zZyB0KQorCSAgICAobWVzc2FnZSAiV2FpdGluZyBmb3IgRXJsYW5nIHNoZWxsIHByb21wdCAocHJlc3MgQy1nIHRvIGFib3J0KS4iKSkKKwkgIChvciAoYWNjZXB0LXByb2Nlc3Mtb3V0cHV0IGluZmVyaW9yLWVybGFuZy1wcm9jZXNzCisJCQkJICAgICBpbmZlcmlvci1lcmxhbmctcHJvbXB0LXRpbWVvdXQpCisJICAgICAgKGVycm9yICJObyBFcmxhbmcgc2hlbGwgcHJvbXB0IGJlZm9yZSB0aW1lb3V0LiIpKSkKKwkoaWYgbXNnIChtZXNzYWdlICIiKSkpKSkpCisKKworKGRlZnVuIGluZmVyaW9yLWVybGFuZy1zZW5kLWNvbW1hbmQgKGNtZCAmb3B0aW9uYWwgaGlzdCkKKyAgIlNlbmQgY29tbWFuZCBDTUQgdG8gdGhlIGluZmVyaW9yIEVybGFuZy4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGNvbW1hbmQgbGluZSAoaWYgYW55KSB3aWxsCitiZSBwbGFjZWQgYXQgdGhlIG5leHQgcHJvbXB0LgorCitJZiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgaXMgbm9uLW5pbCB0aGUgY29tbWFuZCBpcyBpbnNlcnRlZCBpbnRvCit0aGUgaGlzdG9yeSBsaXN0LgorCitSZXR1cm4gdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBuZXdseSBpbnNlcnRlZCBjb21tYW5kLiIKKyAgKG9yIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKQorICAgICAgKGVycm9yICJObyBpbmZlcmlvciBFcmxhbmcgcHJvY2VzcyBpcyBydW5uaW5nLiIpKQorICAobGV0ICgob2xkLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorCShpbnNlcnQtcG9pbnQgKG1hcmtlci1wb3NpdGlvbgorCQkgICAgICAgKHByb2Nlc3MtbWFyayBpbmZlcmlvci1lcmxhbmctcHJvY2VzcykpKQorCShpbnNlcnQtbGVuZ3RoIChpZiBjb21pbnQtcHJvY2Vzcy1lY2hvZXMKKwkJCSAgIDAKKwkJCSAoMSsgKGxlbmd0aCBjbWQpKSkpKQorICAgIChzZXQtYnVmZmVyIGluZmVyaW9yLWVybGFuZy1idWZmZXIpCisgICAgKGdvdG8tY2hhciBpbnNlcnQtcG9pbnQpCisgICAgKGluc2VydCBjbWQpCisgICAgOzsgU3RyYW5nZSB0aGluZ3MgaGFwcGVuZCBpZiBgY29taW50LWVvbC1vbi1zZW5kJyBpcyBkZWNsYXJlZAorICAgIDs7IGluIHRoZSBgbGV0JyBleHByZXNzaW9uIGFib3ZlLCBidXQgc2V0cTpkIGhlcmUuIFRoZQorICAgIDs7IGBzZXQtYnVmZmVyJyBzdGF0ZW1lbnQgb2J2aW91c2x5IG1ha2VzIHRoZSBidWZmZXIgbG9jYWwKKyAgICA7OyBpbnN0YW5jZSBvZiBgY29taW50LWVvbC1vbi1zZW5kJyBzaGFkb3cgdGhpcyBvbmUuCisgICAgOzsgSSdtIGNvbnNpZGVyaW5nIHRoaXMgYSBidWcgaW4gRWxpc3AuCisgICAgKGxldCAoKGNvbWludC1lb2wtb24tc2VuZCBuaWwpCisJICAoY29taW50LWlucHV0LWZpbHRlciAoaWYgaGlzdCBjb21pbnQtaW5wdXQtZmlsdGVyICdpZ25vcmUpKSkKKyAgICAgIChjb21pbnQtc2VuZC1pbnB1dCkpCisgICAgOzsgQWRqdXN0IGFsbCB3aW5kb3dzIHdob3NlIHBvaW50cyBhcmUgaW5jb3JyZWN0LgorICAgIChpZiAobnVsbCBjb21pbnQtcHJvY2Vzcy1lY2hvZXMpCisJKHdhbGstd2luZG93cworCSAoZnVuY3Rpb24KKwkgIChsYW1iZGEgKHdpbmRvdykKKwkgICAgKGlmIChhbmQgKGVxICh3aW5kb3ctYnVmZmVyIHdpbmRvdykgaW5mZXJpb3ItZXJsYW5nLWJ1ZmZlcikKKwkJICAgICAoZXEgKHdpbmRvdy1wb2ludCB3aW5kb3cpIGluc2VydC1wb2ludCkpCisJCShzZXQtd2luZG93LXBvaW50IHdpbmRvdworCQkJCSAgKCsgaW5zZXJ0LXBvaW50IGluc2VydC1sZW5ndGgpKSkpKQorCSBuaWwgdCkpCisgICAgKHNldC1idWZmZXIgb2xkLWJ1ZmZlcikKKyAgICAoKyBpbnNlcnQtcG9pbnQgaW5zZXJ0LWxlbmd0aCkpKQorCisKKyhkZWZ1biBpbmZlcmlvci1lcmxhbmctc3RyaXAtZGVsZXRlICgmb3B0aW9uYWwgcykKKyAgIlJlbW92ZSBgXkgnIChkZWxldGUpIGFuZCB0aGUgY2hhcmFjdGVycyBpdCB3YXMgc3VwcG9zZWQgdG8gcmVtb3ZlLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKGFuZCAoYm91bmRwICdjb21pbnQtbGFzdC1pbnB1dC1lbmQpCisJICAgKGJvdW5kcCAnY29taW50LWxhc3Qtb3V0cHV0LXN0YXJ0KSkKKyAgICAgIChzYXZlLWV4Y3Vyc2lvbgorCShnb3RvLWNoYXIKKwkgKGlmIChpbnRlcmFjdGl2ZS1wKQorCSAgICAgKHN5bWJvbC12YWx1ZSAnY29taW50LWxhc3QtaW5wdXQtZW5kKQorCSAgIChzeW1ib2wtdmFsdWUgJ2NvbWludC1sYXN0LW91dHB1dC1zdGFydCkpKQorCSh3aGlsZSAocHJvZ24gKHNraXAtY2hhcnMtZm9yd2FyZCAiXlxDLWgiKQorCQkgICAgICAobm90IChlcSAocG9pbnQpIChwb2ludC1tYXgpKSkpCisJICAoZGVsZXRlLWNoYXIgMSkKKwkgIChvciAoYm9scCkKKwkgICAgICAoYmFja3dhcmQtZGVsZXRlLWNoYXIgMSkpKSkpKQorCisKKzs7IEJhc2ljYWxseSBgY29taW50LXN0cmlwLWN0cmwtbScsIHdpdGggYSBmZXcgZXh0cmEgY2hlY2tzLgorKGRlZnVuIGluZmVyaW9yLWVybGFuZy1zdHJpcC1jdHJsLW0gKCZvcHRpb25hbCBzdHJpbmcpCisgICJTdHJpcCB0cmFpbGluZyBgXk0nIGNoYXJhY3RlcnMgZnJvbSB0aGUgY3VycmVudCBvdXRwdXQgZ3JvdXAuIgorICAoaW50ZXJhY3RpdmUpCisgIChpZiAoYW5kIChib3VuZHAgJ2NvbWludC1sYXN0LWlucHV0LWVuZCkKKwkgICAoYm91bmRwICdjb21pbnQtbGFzdC1vdXRwdXQtc3RhcnQpKQorICAgICAgKGxldCAoKHBtYXJrIChwcm9jZXNzLW1hcmsgKGdldC1idWZmZXItcHJvY2VzcyAoY3VycmVudC1idWZmZXIpKSkpKQorCShzYXZlLWV4Y3Vyc2lvbgorCSAgKGdvdG8tY2hhcgorCSAgIChpZiAoaW50ZXJhY3RpdmUtcCkKKwkgICAgICAgKHN5bWJvbC12YWx1ZSAnY29taW50LWxhc3QtaW5wdXQtZW5kKQorCSAgICAgKHN5bWJvbC12YWx1ZSAnY29taW50LWxhc3Qtb3V0cHV0LXN0YXJ0KSkpCisJICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJcciskIiBwbWFyayB0KQorCSAgICAocmVwbGFjZS1tYXRjaCAiIiB0IHQpKSkpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLWNvbXBpbGUgKCkKKyAgIkNvbXBpbGUgdGhlIGZpbGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgorCitTaG91bGQgRXJsYW5nIHJldHVybiBge2Vycm9yLCBub2ZpbGV9JyBpdCBjb3VsZCBub3QgbG9hZCB0aGUgb2JqZWN0Cittb2R1bGUgYWZ0ZXIgY29tcGxldGluZyB0aGUgY29tcGlsYXRpb24uICBUaGlzIGlzIGR1ZSB0byBhIGJ1ZyBpbiB0aGUKK2NvbXBpbGUgY29tbWFuZCBgYycgd2hlbiB1c2luZyB0aGUgb3B0aW9uIGBvdXRkaXInLgorCitUaGVyZSBleGlzdHMgdHdvIHdvcmthcm91bmRzIGZvciB0aGlzIGJ1ZzoKKworICAxKSBQbGFjZSB0aGUgZGlyZWN0b3J5IGluIHRoZSBFcmxhbmcgbG9hZCBwYXRoLgorCisgIDIpIFNldCB0aGUgRW1hY3MgdmFyaWFibGUgYGVybGFuZy1jb21waWxlLXVzZS1vdXRkaXInIHRvIG5pbC4KKyAgICAgVG8gZG8gc28sIHBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyIGB+Ly5lbWFjcyctZmlsZToKKyAgICAgICAgKHNldHEgZXJsYW5nLWNvbXBpbGUtdXNlLW91dGRpciBuaWwpIgorICAoaW50ZXJhY3RpdmUpCisgIChzYXZlLXNvbWUtYnVmZmVycykKKyAgKG9yIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKQorICAgICAgKHNhdmUtZXhjdXJzaW9uCisJKGluZmVyaW9yLWVybGFuZykpKQorICAob3IgKGluZmVyaW9yLWVybGFuZy1ydW5uaW5nLXApCisgICAgICAoZXJyb3IgIkVycm9yIHN0YXJ0aW5nIGluZmVyaW9yIEVybGFuZyBzaGVsbC4iKSkKKyAgKGxldCAoKGRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSAoYnVmZmVyLWZpbGUtbmFtZSkpKQorCTs7OyAoZmlsZSAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSAoYnVmZmVyLWZpbGUtbmFtZSkpKQorCShub2V4dCAoc3Vic3RyaW5nIChidWZmZXItZmlsZS1uYW1lKSAwIC00KSkKKwk7OyBIb3BlZnVsbHksIG5vb25lIGVsc2Ugd2lsbCBldmVyIHVzZSB0aGVzZS4uLgorCSh0bXB2YXIgIlRtcDcyMzYiKQorCSh0bXB2YXIyICJUbXA4NzQyIikKKwllbmQpCisgICAgKGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlcikKKyAgICAoaW5mZXJpb3ItZXJsYW5nLXdhaXQtcHJvbXB0KQorICAgIChzZXRxIGVuZCAoaW5mZXJpb3ItZXJsYW5nLXNlbmQtY29tbWFuZAorCSAgICAgICAoaWYgZXJsYW5nLWNvbXBpbGUtdXNlLW91dGRpcgorCQkgICAoZm9ybWF0ICJjKFwiJXNcIiwgW3tvdXRkaXIsIFwiJXNcIn1dKS4iIG5vZXh0IGRpcikKKwkJIChmb3JtYXQKKwkJICAoY29uY2F0CisJCSAgICJmKCVzKSwge29rLCAlc30gPSBmaWxlOmdldF9jd2QoKSwgIgorCQkgICAiZmlsZTpzZXRfY3dkKFwiJXNcIiksICIKKwkJICAgIiVzID0gYyhcIiVzXCIpLCBmaWxlOnNldF9jd2QoJXMpLCBmKCVzKSwgJXMuIikKKwkJICB0bXB2YXIyIHRtcHZhcgorCQkgICAgZGlyCisJCSAgICB0bXB2YXIyIG5vZXh0IHRtcHZhciB0bXB2YXIgdG1wdmFyMikpCisJICAgICAgIG5pbCkpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoc2V0LWJ1ZmZlciBpbmZlcmlvci1lcmxhbmctYnVmZmVyKQorICAgICAgKHNldHEgY29tcGlsYXRpb24tZXJyb3ItbGlzdCBuaWwpCisgICAgICAoc2V0cSBjb21waWxhdGlvbi1wYXJzaW5nLWVuZCBlbmQpKQorICAgIChzZXRxIGNvbXBpbGF0aW9uLWxhc3QtYnVmZmVyIGluZmVyaW9yLWVybGFuZy1idWZmZXIpKSkKKworCis7OyBgbmV4dC1lcnJvcicgb25seSBhY2NlcHRzIGJ1ZmZlcnMgd2l0aCBtYWpvciBtb2RlIGBjb21waWxhdGlvbi1tb2RlJworOzsgb3Igd2l0aCB0aGUgbWlub3IgbW9kZSBgY29tcGlsYXRpb24tbWlub3ItbW9kZScgYWN0aXZhdGVkLgorOzsgKFRvIGFjdGl2YXRlIHRoZSBtaW5vciBtb2RlIGlzIG91dCBvZiB0aGUgcXVlc3Rpb24sIHNpbmNlIGl0IHdpbGwKKzs7IHJ1aW4gdGhlIGluZmVyaW9yIEVybGFuZyBrZXltYXAuKQorKGRlZnVuIGluZmVyaW9yLWVybGFuZy1uZXh0LWVycm9yICgmb3B0aW9uYWwgYXJncCkKKyAgIkp1c3QgbGlrZSBgbmV4dC1lcnJvcicuCitDYXBhYmxlIG9mIGZpbmRpbmcgZXJyb3IgbWVzc2FnZXMgaW4gYW4gaW5mZXJpb3IgRXJsYW5nIGJ1ZmZlci4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChsZXQgKChkb25lIG5pbCkKKwkoYnVmIChhbmQgKGJvdW5kcCAnY29tcGlsYXRpb24tbGFzdC1idWZmZXIpCisJCSAgY29tcGlsYXRpb24tbGFzdC1idWZmZXIpKSkKKyAgICAoaWYgKGFuZCAoYnVmZmVycCBidWYpCisJICAgICAoc2F2ZS1leGN1cnNpb24KKwkgICAgICAgKHNldC1idWZmZXIgYnVmKQorCSAgICAgICAoYW5kIChlcSBtYWpvci1tb2RlICdlcmxhbmctc2hlbGwtbW9kZSkKKwkJICAgIChzZXRxIG1ham9yLW1vZGUgJ2NvbXBpbGF0aW9uLW1vZGUpKSkpCisJKHVud2luZC1wcm90ZWN0CisJICAgIChwcm9nbgorCSAgICAgIChzZXRxIGRvbmUgdCkKKwkgICAgICAobmV4dC1lcnJvciBhcmdwKSkKKwkgIChzYXZlLWV4Y3Vyc2lvbgorCSAgICAoc2V0LWJ1ZmZlciBidWYpCisJICAgIChzZXRxIG1ham9yLW1vZGUgJ2VybGFuZy1zaGVsbC1tb2RlKSkpKQorICAgIChvciBkb25lCisJKG5leHQtZXJyb3IgYXJncCkpKSkKKworCisoZGVmdW4gaW5mZXJpb3ItZXJsYW5nLWNoYW5nZS1kaXJlY3RvcnkgKCZvcHRpb25hbCBkaXIpCisgICJNYWtlIHRoZSBpbmZlcmlvciBlcmxhbmcgY2hhbmdlIGRpcmVjdG9yeS4KK1RoZSBkZWZhdWx0IGlzIHRvIGdvIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlKQorICAob3IgZGlyIChzZXRxIGRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSAoYnVmZmVyLWZpbGUtbmFtZSkpKSkKKyAgKG9yIChpbmZlcmlvci1lcmxhbmctcnVubmluZy1wKQorICAgICAgKGVycm9yICJObyBpbmZlcmlvciBFcmxhbmcgaXMgcnVubmluZy4iKSkKKyAgKGluZmVyaW9yLWVybGFuZy1kaXNwbGF5LWJ1ZmZlcikKKyAgKGluZmVyaW9yLWVybGFuZy13YWl0LXByb21wdCkKKyAgKGluZmVyaW9yLWVybGFuZy1zZW5kLWNvbW1hbmQgKGZvcm1hdCAiY2QoJyVzJykuIiBkaXIpIG5pbCkpCisMCis7OyBBbGlhc2VzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgRXJsYW5nIE1vZGUuCis7OworOzsgVW5mb3J0dWFudGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRW1hY3MgZG9lc24ndCBoYXZlIGBkZWZhbGlhcycgYW5kCis7OyBgbWFrZS1vYnNvbGV0ZScgc28gd2UgaGF2ZSB0byBkZWZpbmUgb3VyIG93biBgb2Jzb2xldGUnIGZ1bmN0aW9uLgorCisoZGVmdW4gZXJsYW5nLW9ic29sZXRlIChzeW0gbmV3ZGVmKQorICAiTWFrZSB0aGUgb2Jzb2xldGUgZnVuY3Rpb24gU1lNIHJlZmVyIHRvIHRoZSBkZWZpbmVkIGZ1bmN0aW9uIE5FV0RFRi4KKworU2ltcGxpZmllZCB2ZXJzaW9uIG9mIGEgY29tYmluYXRpb24gYGRlZmFsaWFzJyBhbmQgYG1ha2Utb2Jzb2xldGUnLAoraXQgYXNzdW1lcyB0aGF0IE5FV0RFRiBpcyBsb2FkZWQuIgorICAoZnNldCBzeW0gKHN5bWJvbC1mdW5jdGlvbiBuZXdkZWYpKQorICAoaWYgKGZib3VuZHAgJ21ha2Utb2Jzb2xldGUpCisgICAgICAobWFrZS1vYnNvbGV0ZSBzeW0gbmV3ZGVmKSkpCisKKworKGVybGFuZy1vYnNvbGV0ZSAnY2FsY3VsYXRlLWVybGFuZy1pbmRlbnQgJ2VybGFuZy1jYWxjdWxhdGUtaW5kZW50KQorKGVybGFuZy1vYnNvbGV0ZSAnY2FsY3VsYXRlLWVybGFuZy1zdGFjay1pbmRlbnQKKwkJICdlcmxhbmctY2FsY3VsYXRlLXN0YWNrLWluZGVudCkKKyhlcmxhbmctb2Jzb2xldGUgJ2F0LWVybGFuZy1rZXl3b3JkICdlcmxhbmctYXQta2V5d29yZCkKKyhlcmxhbmctb2Jzb2xldGUgJ2F0LWVybGFuZy1vcGVyYXRvciAnZXJsYW5nLWF0LW9wZXJhdG9yKQorKGVybGFuZy1vYnNvbGV0ZSAnYmVnaW5uaW5nLW9mLWVybGFuZy1jbGF1c2UgJ2VybGFuZy1iZWdpbm5pbmctb2YtY2xhdXNlKQorKGVybGFuZy1vYnNvbGV0ZSAnZW5kLW9mLWVybGFuZy1jbGF1c2UgJ2VybGFuZy1lbmQtb2YtY2xhdXNlKQorKGVybGFuZy1vYnNvbGV0ZSAnbWFyay1lcmxhbmctY2xhdXNlICdlcmxhbmctbWFyay1jbGF1c2UpCisoZXJsYW5nLW9ic29sZXRlICdiZWdpbm5pbmctb2YtZXJsYW5nLWZ1bmN0aW9uICdlcmxhbmctYmVnaW5uaW5nLW9mLWZ1bmN0aW9uKQorKGVybGFuZy1vYnNvbGV0ZSAnZW5kLW9mLWVybGFuZy1mdW5jdGlvbiAnZXJsYW5nLWVuZC1vZi1mdW5jdGlvbikKKyhlcmxhbmctb2Jzb2xldGUgJ21hcmstZXJsYW5nLWZ1bmN0aW9uICdlcmxhbmctbWFyay1mdW5jdGlvbikKKyhlcmxhbmctb2Jzb2xldGUgJ3Bhc3Mtb3Zlci1lcmxhbmctY2xhdXNlICdlcmxhbmctcGFzcy1vdmVyLWZ1bmN0aW9uKQorKGVybGFuZy1vYnNvbGV0ZSAnbmFtZS1vZi1lcmxhbmctZnVuY3Rpb24gJ2VybGFuZy1uYW1lLW9mLWZ1bmN0aW9uKQorCisKKzs7IFRoZSBlbmQuLi4KKworKHByb3ZpZGUgJ2VybGFuZykKKworKHJ1bi1ob29rcyAnZXJsYW5nLWxvYWQtaG9vaykKKworOzs7IGVybGFuZy5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2FwcGdlbiBiL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2FwcGdlbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjE5MjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2VybC90b29scy91dGlsaXRpZXMvYXBwZ2VuCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCisKK2lmIFsgJCMgLW5lIDIgXTt0aGVuCisJZWNobyAiIgorCWVjaG8gInVzYWdlOiAkMCA8YXBwbmFtZT4gPHByZWZpeD4iCisJZWNobyAiIgorCWVjaG8gImFwcG5hbWUgaXMgdGhlIHRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSBnZW5lcmF0ZWQiCisJZWNobyAicHJlZml4IGlzIHRoZSBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIGFsbCBmaWxlcyBpbiIKKwllY2hvICJ0aGUgYXBwbGljYXRpb24gZHVlIHRvIGVybGFuZ3MgbGFjayBvZiBhIHBhY2thZ2Ugc3RydWN0dXJlLiAgVGhlIHByZWZpeCIKKwllY2hvICJpcyB0eXBpY2FseSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24iCisJZWNobyAiIgorCWVjaG8gImV4YW1wbGU6ICQwIGNoYXRfc2VydmVyIGNzIgorCWVjaG8gIiIKKwlleGl0IDEKK2ZpCisKK0FQUF9OQU1FPSQxCitBUFBfTkFNRV9VUFBFUl9DQVNFPSQoZWNobyAkQVBQX05BTUUgfCB0ciBhLXogQS1aKQorUFJFRklYPSQyCisKK2NkIC4uLy5hcHBnZW4KK2VjaG8gYHB3ZGAKKworY3AgLXIgYmxhbmtfYXBwICRBUFBfTkFNRQorY3AgLXIgYmxhbmtfYXBwX3JlbCAiJEFQUF9OQU1FIl9yZWwKKworY2QgIiRBUFBfTkFNRSJfcmVsCitscyBibGFua19hcHAqIHwgLi4vcmVuYW1lLnNoIGJsYW5rX2FwcCAkQVBQX05BTUUKK2NkIC4uCisKKyMgVGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSByZWxlYXNlCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRSUlICRBUFBfTkFNRSAiJEFQUF9OQU1FIl9yZWwvIiRBUFBfTkFNRSJfcmVsLnJlbC5zcmMKKworCitjZCAkQVBQX05BTUUvc3JjCitscyBiYSogfCAuLi8uLi9yZW5hbWUuc2ggYmEgJFBSRUZJWAorbHMgYmxhbmtfYXBwKiB8IC4uLy4uL3JlbmFtZS5zaCBibGFua19hcHAgJEFQUF9OQU1FCitjZCAtCisKKyMgVGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBhcHBsaWNhdGlvbgorLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUVfVVBQRVJfQ0FTRSUlICRBUFBfTkFNRV9VUFBFUl9DQVNFICRBUFBfTkFNRS9NYWtlZmlsZQorLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUVfVVBQRVJfQ0FTRSUlICRBUFBfTkFNRV9VUFBFUl9DQVNFICRBUFBfTkFNRS92c24ubWsKKworIyBUaGUgc3JjIGRpcmVjdG9yeSBvZiB0aGUgYXBwbGljYXRpb24KKy4vc3Vic3RpdHV0ZS5zaCAlJUFQUF9OQU1FJSUgJEFQUF9OQU1FICRBUFBfTkFNRS9zcmMvTWFrZWZpbGUKKy4vc3Vic3RpdHV0ZS5zaCAlJUFQUF9OQU1FX1VQUEVSX0NBU0UlJSAkQVBQX05BTUVfVVBQRVJfQ0FTRSAkQVBQX05BTUUvc3JjL01ha2VmaWxlCisuL3N1YnN0aXR1dGUuc2ggJSVQRlglJSAkUFJFRklYICRBUFBfTkFNRS9zcmMvTWFrZWZpbGUKKworLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUUlJSAkQVBQX05BTUUgJEFQUF9OQU1FL3NyYy8iJEFQUF9OQU1FIi5lcmwKKy4vc3Vic3RpdHV0ZS5zaCAlJVBGWCUlICRQUkVGSVggJEFQUF9OQU1FL3NyYy8iJEFQUF9OQU1FIi5lcmwKKy4vc3Vic3RpdHV0ZS5zaCAlJVBGWCUlICRQUkVGSVggJEFQUF9OQU1FL3NyYy8iJFBSRUZJWCJfc3VwLmVybAorLi9zdWJzdGl0dXRlLnNoICUlQVBQX05BTUUlJSAkQVBQX05BTUUgJEFQUF9OQU1FL3NyYy8iJFBSRUZJWCJfc3VwLmVybAorLi9zdWJzdGl0dXRlLnNoICUlUEZYJSUgJFBSRUZJWCAkQVBQX05BTUUvc3JjLyIkUFJFRklYIl9zZXJ2ZXIuZXJsCisuL3N1YnN0aXR1dGUuc2ggJSVBUFBfTkFNRSUlICRBUFBfTkFNRSAkQVBQX05BTUUvc3JjLyIkUFJFRklYIl9zZXJ2ZXIuZXJsCisKKyMgaW5jbHVkZSBkaXJlY3RvcnkKK212ICRBUFBfTkFNRS9pbmNsdWRlL2JsYW5rX2FwcC5ocmwgJEFQUF9OQU1FL2luY2x1ZGUvIiRBUFBfTkFNRSIuaHJsCisKK2ZpbmQgJEFQUF9OQU1FIC1uYW1lICIuc3ZuIiB8IHhhcmdzIHJtIC1yCittdiAkQVBQX05BTUUgLi4vLi4vbGliCittdiAiJEFQUF9OQU1FIl9yZWwgLi4vLi4vcmVsZWFzZQorCitlY2hvICIiCitlY2hvICIkQVBQX05BTUUgaGFzIGJlZW4gZ2VuZXJhdGVkIGFuZCBwbGFjZWQgdW5kZXIgbGliLyRBUFBfTkFNRSIKK2VjaG8gJEFQUF9OQU1FIl9yZWwgaGFzIGJlZW4gZ2VuZXJhdGVkIGFuZCBwbGFjZWQgdW5kZXIgcmVsZWFzZS8kQVBQX05BTUUiIl9yZWwiCitlY2hvICIiCisKK2NkIC4uL3V0aWxpdGllcwpkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy91dGlsaXRpZXMvY2xlYW5fcmVsZWFzZSBiL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2NsZWFuX3JlbGVhc2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTIwMjY5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2NsZWFuX3JlbGVhc2UKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL2Jhc2gKKworaWYgWyAkIyAtZXEgMSBdOyB0aGVuCisJUkVMRUFTRV9OQU1FPSQxCitlbHNlCisJUkVMRUFTRV9OQU1FPSQoYmFzZW5hbWUgJChkaXJuYW1lICQoZGlybmFtZSAkKGRpcm5hbWUgJCh3aGljaCAkMCkpKSkpCitmaQorCitMT0NBTD0kKGRpcm5hbWUgJCh3aGljaCAkMCkpCisKK2VjaG8gJExPQ0FMCitlY2hvICRSRUxFQVNFX05BTUUKK2NkICRMT0NBTAorCitlY2hvICIKKy1tb2R1bGUoY2xlYW5fcmVsZWFzZSkuIAorLWV4cG9ydChbY2xlYW5fcmVsZWFzZS8xXSkuIAorCitjbGVhbl9yZWxlYXNlKFtSZWxlYXNlTmFtZV0pIC0+IAorICAgIFJlbEZpbGUgPSBhdG9tX3RvX2xpc3QoUmVsZWFzZU5hbWUpICsrIFwiLnJlbFwiLAorICAgIGNhc2UgZmlsZTpjb25zdWx0KFJlbEZpbGUpIG9mCisJe29rLCBbe3JlbGVhc2UsIHtSZWxOYW1lLCBSZWxWc259LCBFcnRzU3BlYywgUmVsZWFzZVNwZWNzfV19IC0+IGRvX3Jlc3QoUmVsRmlsZSwgUmVsZWFzZVNwZWNzKTsKKwl7ZXJyb3IsIFJlYXNvbn0gLT4gaW86Zm9ybWF0KFwiRVJST1IgLSBDb3VsZCBub3QgZmluZCBmaWxlIH5zfm5cIiwgW1JlbEZpbGVdKSwgZXhpdChSZWFzb24pCisgICAgZW5kLAorICAgIG9zOmNtZChcImNkIC4uLztybSAtcmYgXCIgKysgc3RyaW5nOnN0cmlwKG9zOmNtZChcImJhc2VuYW1lIGBwd2RgXCIpKSkuCisJICAgICAKK2RvX3Jlc3QoUmVsRmlsZSwgUmVsZWFzZVNwZWNzKSAtPgorICAgIGlvOmZvcm1hdChcIkZpbmRpbmcgT3JwaGFucyBpbiB+cCBhbW9uZyBjdXJyZW50IHJlbGVhc2Ugc3BlY3MgfnB+blwiLCBbUmVsRmlsZSwgUmVsZWFzZVNwZWNzXSksCisgICAge29rLCBGaWxlTmFtZUxpc3R9ICAgID0gZmlsZTpsaXN0X2RpcihcIi4uL1wiKSwKKyAgICBEaXJzID0gW0ZpbGVOYW1lIHx8IEZpbGVOYW1lIDwtIEZpbGVOYW1lTGlzdCwgZmlsZWxpYjppc19kaXIoXCIuLi9cIiArKyBGaWxlTmFtZSldIC0tCisJICAgW3N0cmluZzpzdHJpcChvczpjbWQoXCJiYXNlbmFtZSBgcHdkYFwiKSwgcmlnaHQsICRcbildLAorICAgIEJpZ0xpc3RPZlJlbGVhc2VTcGVjcyA9IGxpc3RzOmZvbGRsKGZ1bihEaXIsIEFjYykgLT4gCisJCQkJCQlPdGhlclJlbEZpbGUgPSBcIi4uL1wiICsrIERpciArKyBcIi9cIiArKyBSZWxGaWxlLAorCQkJCQkJaW86Zm9ybWF0KFwiQ2hlY2tpbmcgZXh0ZXJuYWwgcmVsZWFzZSBmaWxlIH5wfm5cIiwgW090aGVyUmVsRmlsZV0pLAorCQkJCQkJY2FzZSBmaWxlOmNvbnN1bHQoT3RoZXJSZWxGaWxlKSBvZgorCQkJCQkJICAgIHtvaywgW3tyZWxlYXNlLCB7UmVsTmFtZSwgUmVsVnNufSwgRXJ0c1NwZWMsIFJlbGVhc2VTcGVjc199XX0gLT4gCisJCQkJCQkJQWNjICsrIFJlbGVhc2VTcGVjc187CisJCQkJCQkgICAgXyAgLT4gCisJCQkJCQkJQWNjCisJCQkJCQllbmQgZW5kLCBbXSwgRGlycyksCisgICAgT3JwaGFucyA9IFJlbGVhc2VTcGVjcyAtLSBCaWdMaXN0T2ZSZWxlYXNlU3BlY3MsCisgICAgaW86Zm9ybWF0KFwiUmVtb3Zpbmcgb3JwaGFuIHJlbGVhc2Ugc3BlY3MgfnAgZnJvbSAuLi8uLi9saWIgfm5cIiwgW09ycGhhbnNdKSwKKyAgICBsaXN0czpmb3JlYWNoKGZ1bihPcnBoYW4pIC0+IAorCQkJICBvczpjbWQoXCJybSAtcmYgLi4vLi4vbGliL1wiICsrIGF0b21fdG9fbGlzdChlbGVtZW50KDEsIE9ycGhhbikpICsrIFwiLVwiICsrIGVsZW1lbnQoMiwgT3JwaGFuKSkgCisJCSAgZW5kLCBPcnBoYW5zKS4KKyIgPiBjbGVhbl9yZWxlYXNlLmVybAorCitlcmxjIGNsZWFuX3JlbGVhc2UuZXJsCisKK0NNRD0iZXJsIC1zIGNsZWFuX3JlbGVhc2UgY2xlYW5fcmVsZWFzZSAkUkVMRUFTRV9OQU1FIC1zIGVybGFuZyBoYWx0IC1ub3NoZWxsIgorJENNRApkaWZmIC0tZ2l0IGEvbGliL2VybC90b29scy91dGlsaXRpZXMvZWRvYyBiL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2Vkb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMyZjI2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9lcmwvdG9vbHMvdXRpbGl0aWVzL2Vkb2MKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCitpZiBbICIkIyIgLW5lICIxIiBdCit0aGVuCisJZWNobyAkVVNBR0UKKwlleGl0IDEKK2ZpCisKK0NVUlJFTlRfRElSPWBwd2RgCitlY2hvICRDVVJSRU5UX0RJUgorCisjIEVzdGFibGlzaCB0aGUgb3RwIGJhc2UgZGlyZWN0b3J5LgorTVlfQ01EPWB3aGljaCAkMGAKK01ZX0NNRF9ESVI9YGRpcm5hbWUgJE1ZX0NNRGAKK09UUF9CQVNFX0RJUj0kTVlfQ01EX0RJUi8uLi8uLgorCitlcmwgLW5vc2hlbGwgLXB6ICRPVFBfQkFTRV9ESVIvbGliL2ZzbGliL2ViaW4gLXMgZnNfbGliIHNfYXBwbHkgZWRvYyBhcHBsaWNhdGlvbiAiJDEiLiAgIlwiLi4vLi4vJDEiXCIuIFtdLiIgIiAtcyBpbml0IHN0b3AgfCBlZ3JlcCAiKEVYSVR8dGVybWluYXRpbmcpIgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWwvZXJsL2NhbGN1bGF0b3JIYW5kbGVyLmVybCBiL3R1dG9yaWFsL2VybC9jYWxjdWxhdG9ySGFuZGxlci5lcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNDIwMTkuLjAwMDAwMDAKLS0tIGEvdHV0b3JpYWwvZXJsL2NhbGN1bGF0b3JIYW5kbGVyLmVybAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS1tb2R1bGUoY2FsY3VsYXRvckhhbmRsZXIpLgotCi0taW5jbHVkZSgidGhyaWZ0L3RocmlmdC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvdHJhbnNwb3J0L3RTb2NrZXQuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3Byb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwiKS4KLS1pbmNsdWRlKCJ0aHJpZnQvc2VydmVyL3RTZXJ2ZXIuaHJsIikuCi0taW5jbHVkZSgidGhyaWZ0L3RyYW5zcG9ydC90U2VydmVyU29ja2V0LmhybCIpLgotCi0taW5jbHVkZSgiZ2VuLWVybC9jYWxjdWxhdG9yLmhybCIpLgotJS1pbmNsdWRlKCJnZW4tZXJsL3NoYXJlZF90eXBlcy5ocmwiKS4KLQotJS1pbmNsdWRlKCJnZW4tZXJsL3R1dG9yaWFsX3R5cGVzLmhybCIpLiAlIFRPRE8oY3Bpcm8pOiBvIHJseT8KLQotLWV4cG9ydChbc3RhcnQvMCwgcGluZy8wLCBhZGQvMiwgY2FsY3VsYXRlLzIsIGdldFN0cnVjdC8xLCB6aXAvMF0pLgotCi0lJSUgICBkZWYgaW5pdGlhbGl6ZSgpCi0lJSUgICAgIEBsb2cgPSB7fQotJSUlICAgZW5kCi0KLSUgVE9ETzogdm9pZHMgdGFrZSBvbmx5IG9rIGFzIHJldHVybj8gCi0KLXBpbmcoKSAtPgotICAgIGlvOmZvcm1hdCgicGluZygpfm4iLFtdKSwKLSAgICB7b2ssIG5pbH0uCi0KLWFkZChOMSwgTjIpIC0+Ci0gICAgaW86Zm9ybWF0KCJhZGQofnAsfnApfm4iLFtOMSxOMl0pLAotICAgIHtvaywgTjErTjJ9LgotCi1jYWxjdWxhdGUoTG9naWQsIFdvcmspIC0+Ci0gICAgeyBPcCwgTnVtMSwgTnVtMiB9ID0geyBXb3JrI3dvcmsub3AsIFdvcmsjd29yay5udW0xLCBXb3JrI3dvcmsubnVtMiB9LAotICAgIGlvOmZvcm1hdCgiY2FsY3VsYXRlKH5wLCB7fnAsfnAsfnB9KX5uIiwgW0xvZ2lkLCBPcCwgTnVtMSwgTnVtMl0pLAotICAgIGNhc2UgT3Agb2YKLSAgICAgICAgP0FERCAgICAgIC0+IHtvaywgTnVtMSArIE51bTJ9OwotCT9TVUJUUkFDVCAtPiB7b2ssIE51bTEgLSBOdW0yfTsKLQk/TVVMVElQTFkgLT4ge29rLCBOdW0xICogTnVtMn07Ci0JP0RJVklERSAtPgotCSAgICBpZiAJTnVtMiA9PSAwIC0+IHtlcnJvciwgI2ludmFsaWRPcGVyYXRpb257d2hhdD1PcCwgd2h5PSJDYW5ub3QgZGl2aWRlIGJ5IDAifX07Ci0JCXRydWUgICAgICAtPiB7b2ssIE51bTEgLyBOdW0yfQotCSAgICBlbmQ7Ci0JdHJ1ZSAtPgotCSAgICB7ZXJyb3IsICNpbnZhbGlkT3BlcmF0aW9ue3doYXQ9T3AsIHdoeT0iSW52YWxpZCBvcGVyYXRpb24ifX0KLSAgICBlbmQuCi0KLWdldFN0cnVjdChLZXkpIC0+Ci0gICAgaW86Zm9ybWF0KCJnZXRTdHJ1Y3QofnApfm4iLCBbS2V5XSksCi0gICAge29rLCBnZXQoS2V5KX0uCi0KLXppcCgpIC0+Ci0gICAgaW86Zm9ybWF0KCJ6aXB+biIpLgotCi1zdGFydCgpIC0+Ci0gICAgVHJhbnNwb3J0ID0gdFNlcnZlclNvY2tldDpuZXcoOTA5MCksCi0gICAgU2VydmVyID0gdFNlcnZlcjpuZXcoY2FsY3VsYXRvciwgP01PRFVMRSwgVHJhbnNwb3J0KSwKLSAgICBpbzpmb3JtYXQoIlN0YXJ0aW5nIHRoZSBzZXJ2ZXIuLi5+biIsIFtdKSwKLSAgICA/TTAoU2VydmVyLCBzZXJ2ZSksCi0gICAgaW86Zm9ybWF0KCJkb25lLn5uIiwgW10pLCAlIHdvbid0IGV2ZXIgcmVhY2gsIHJvb2tpZSBiZW90Y2gKLSAgICBvay4KLQotJSUlIGhhbmRsZXIgPSBDYWxjdWxhdG9ySGFuZGxlci5uZXcoKQotJSUlIHByb2Nlc3NvciA9IENhbGN1bGF0b3I6OlByb2Nlc3Nvci5uZXcoaGFuZGxlcikKLSUlJSB0cmFuc3BvcnQgPSBUU2VydmVyU29ja2V0Lm5ldyg5MDkwKQotJSUlIHRyYW5zcG9ydEZhY3RvcnkgPSBUQnVmZmVyZWRUcmFuc3BvcnRGYWN0b3J5Lm5ldygpCi0lJSUgc2VydmVyID0gVFNpbXBsZVNlcnZlci5uZXcocHJvY2Vzc29yLCB0cmFuc3BvcnQsIHRyYW5zcG9ydEZhY3RvcnkpCi0lJSUgCi0lJSUgcHV0cyAiU3RhcnRpbmcgdGhlIHNlcnZlci4uLiIKLSUlJSBzZXJ2ZXIuc2VydmUoKQotJSUlIHB1dHMgImRvbmUuIgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWwvZXJsL3NlcnZlci5lcmwgYi90dXRvcmlhbC9lcmwvc2VydmVyLmVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI0NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWwvZXJsL3NlcnZlci5lcmwKQEAgLTAsMCArMSw2NiBAQAorLW1vZHVsZShzZXJ2ZXIpLgorCistaW5jbHVkZSgidGhyaWZ0LmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90U29ja2V0LmhybCIpLgorLWluY2x1ZGUoInByb3RvY29sL3RCaW5hcnlQcm90b2NvbC5ocmwiKS4KKworLWluY2x1ZGUoInNlcnZlci90RXJsU2VydmVyLmhybCIpLgorLWluY2x1ZGUoInRyYW5zcG9ydC90RXJsQWNjZXB0b3IuaHJsIikuCisKKy1pbmNsdWRlKCJjYWxjdWxhdG9yLmhybCIpLgorCistZXhwb3J0KFtzdGFydC8wLCBzdG9wLzEsIHBpbmcvMCwgYWRkLzIsIGNhbGN1bGF0ZS8yLCBnZXRTdHJ1Y3QvMSwgemlwLzBdKS4KKworcGluZygpIC0+CisgICAgaW86Zm9ybWF0KCJwaW5nKCl+biIsW10pLAorICAgIHtvaywgbmlsfS4KKworYWRkKE4xLCBOMikgLT4KKyAgICBpbzpmb3JtYXQoImFkZCh+cCx+cCl+biIsW04xLE4yXSksCisgICAge29rLCBOMStOMn0uCisKK2NhbGN1bGF0ZShMb2dpZCwgV29yaykgLT4KKyAgICB7IE9wLCBOdW0xLCBOdW0yIH0gPSB7IFdvcmsjd29yay5vcCwgV29yayN3b3JrLm51bTEsIFdvcmsjd29yay5udW0yIH0sCisgICAgaW86Zm9ybWF0KCJjYWxjdWxhdGUofnAsIHt+cCx+cCx+cH0pfm4iLCBbTG9naWQsIE9wLCBOdW0xLCBOdW0yXSksCisgICAgY2FzZSBPcCBvZgorICAgICAgICA/QUREICAgICAgLT4ge29rLCBOdW0xICsgTnVtMn07CisJP1NVQlRSQUNUIC0+IHtvaywgTnVtMSAtIE51bTJ9OworCT9NVUxUSVBMWSAtPiB7b2ssIE51bTEgKiBOdW0yfTsKKwk/RElWSURFIC0+CisJICAgIGlmIAlOdW0yID09IDAgLT4ge2Vycm9yLCAjaW52YWxpZE9wZXJhdGlvbnt3aGF0PU9wLCB3aHk9IkNhbm5vdCBkaXZpZGUgYnkgMCJ9fTsKKwkJdHJ1ZSAgICAgIC0+IHtvaywgTnVtMSAvIE51bTJ9CisJICAgIGVuZDsKKwl0cnVlIC0+CisJICAgIHtlcnJvciwgI2ludmFsaWRPcGVyYXRpb257d2hhdD1PcCwgd2h5PSJJbnZhbGlkIG9wZXJhdGlvbiJ9fQorICAgIGVuZC4KKworZ2V0U3RydWN0KEtleSkgLT4KKyAgICBpbzpmb3JtYXQoImdldFN0cnVjdCh+cCl+biIsIFtLZXldKSwKKyAgICB7b2ssIGdldChLZXkpfS4KKworemlwKCkgLT4KKyAgICBpbzpmb3JtYXQoInppcH5uIikuCisKKyUlCisKK3N0YXJ0KCkgLT4KKyAgICBIYW5kbGVyICAgPSA/TU9EVUxFLCAlIGNwaXJvOiBvciBnZW5lcmF0ZWQgaGFuZGxlcj8KKyAgICBQcm9jZXNzb3IgPSBjYWxjdWxhdG9yLAorICAgIFBvcnQgICAgICA9IDkwOTAsCisKKyAgICBURiA9IHRCdWZmZXJlZFRyYW5zcG9ydEZhY3Rvcnk6bmV3KCksCisgICAgUEYgPSB0QmluYXJ5UHJvdG9jb2xGYWN0b3J5Om5ldygpLAorCisgICAgU2VydmVyVHJhbnNwb3J0ID0gdEVybEFjY2VwdG9yLAorICAgIFNlcnZlckZsYXZvciAgICA9IHRFcmxTZXJ2ZXIsCisKKyAgICBTZXJ2ZXIgPSBvb3A6c3RhcnRfbmV3KFNlcnZlckZsYXZvciwgW1BvcnQsIEhhbmRsZXIsIFByb2Nlc3NvciwgU2VydmVyVHJhbnNwb3J0LCBURiwgUEZdKSwKKworICAgID9SMChTZXJ2ZXIsIGVmZmVjdGZ1bF9zZXJ2ZSksCisKKyAgICBTZXJ2ZXIuCisKK3N0b3AoU2VydmVyKSAtPgorICAgID9DMChTZXJ2ZXIsIHN0b3ApLAorICAgIG9rLgorCg==