ZGlmZiAtLWdpdCBhL01ha2UucnVsZXMuaW4gYi9NYWtlLnJ1bGVzLmluCmluZGV4IGI0ZGVjMjkuLjQ1NGViNDEgMTAwNjQ0Ci0tLSBhL01ha2UucnVsZXMuaW4KKysrIGIvTWFrZS5ydWxlcy5pbgpAQCAtMjM4LDcgKzIzOCw3IEBACiBtYW46ICQoQ19TUkNTKQogCWZvciBpIGluICQoQ19TUkNTKTsgZG8gJChDMk1BTikgLUwgLW8gJChUT1BPQkpESVIpL2RvY3VtZW50YXRpb24vbWFuM3cgLVMzdyAkKERJVklOQ0wpIC1EX19XSU5FX18gJChNQU5TUEVDUykgJCRpOyBkb25lCiAKLWh0bWw6ICQoQ19TUkNTKQorZG9jLWh0bWw6ICQoQ19TUkNTKQogCWZvciBpIGluICQoQ19TUkNTKTsgZG8gJChDMk1BTikgLUwgLW8gJChUT1BPQkpESVIpL2RvY3VtZW50YXRpb24vaHRtbCAtVGggLWl3aW5kb3dzLmggICQoRElWSU5DTCkgLURfX1dJTkVfXyAkKE1BTlNQRUNTKSAkJGk7IGRvbmUKIAogIyBSdWxlIGZvciBsaW50aW5nCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uLy5jdnNpZ25vcmUgYi9kb2N1bWVudGF0aW9uLy5jdnNpZ25vcmUKaW5kZXggZDRiZGVjOS4uYjQ1N2I1ZCAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi8uY3ZzaWdub3JlCisrKyBiL2RvY3VtZW50YXRpb24vLmN2c2lnbm9yZQpAQCAtMSwyMyArMSwxMyBAQAorKi5hdXgKKyouZHZpCisqLmp1bmsKKyoubG9nCisqLnRleAorREJUT0hUTUxfT1VUUFVUX0RJUioKIE1ha2VmaWxlCi13aW5lLmF1eAord2luZS1kb2MKK3dpbmUtZG9jLnBkZgord2luZS1kb2MucHMKK3dpbmUtZG9jLnJ0Zgogd2luZS5jb25mLm1hbgotd2luZS5jcAotd2luZS5jcHMKLXdpbmUuZHZpCi13aW5lLmZuCi13aW5lLmZucwotd2luZS5odG1sCi13aW5lLmluZm8KLXdpbmUuaW5mby0xCi13aW5lLmluZm8tMgotd2luZS5reQotd2luZS5sb2cKIHdpbmUubWFuCi13aW5lLnBnCi13aW5lLnRleGkKLXdpbmUudG9jCi13aW5lLnRwCi13aW5lLnRwcwotd2luZS52cgotd2luZS52cnMKLXdpbmVfdG9jLmh0bWwKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW4gYi9kb2N1bWVudGF0aW9uL01ha2VmaWxlLmluCmluZGV4IGJlZjgzYjMuLjQzYzJlYTMgMTAwNjQ0Ci0tLSBhL2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW4KKysrIGIvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZS5pbgpAQCAtMyw1MiArMyw1MiBAQAogU1JDRElSICAgID0gQHNyY2RpckAKIFZQQVRIICAgICA9IEBzcmNkaXJACiBNT0RVTEUgICAgPSBub25lCi0KLUlOQ0xVREVTID0gXAotCUFVVEhPUlMgXAotCUxJQ0VOU0UgXAotCVdBUlJBTlRZCi0KLVNPVVJDRVMgPSBcCi0Jd2luZS50ZXhpbmZvIFwKLQkkKElOQ0xVREVTKQotCi1JTkZPRklMRVMgPSBcCi0Jd2luZS5pbmZvIFwKLQl3aW5lLmluZm8tMSBcCi0Jd2luZS5pbmZvLTIKLQotSFRNTEZJTEVTID0gXAotCXdpbmVfdG9jLmh0bWwgXAotCXdpbmUuaHRtbAotCi1EVklGSUxFUyA9IHdpbmUuZHZpCitCT09LTkFNRSAgPSB3aW5lLWRvYwogCiBFWFRSQVNVQkRJUlMgPSBzYW1wbGVzIHN0YXR1cwogCi1hbGw6ICQoSU5GT0ZJTEVTKSAkKERWSUZJTEVTKSAkKEhUTUxGSUxFUykKK0JPT0tfU1JDUyA9IFwKKwlhcmNoaXRlY3R1cmUuc2dtbCBcCisJYnVncy5zZ21sIFwKKwlidWlsZC5zZ21sIFwKKwljb21waWxpbmcuc2dtbCBcCisJY29uZmlndXJpbmcuc2dtbCBcCisJY29uc29sZXMuc2dtbCBcCisJZGVidWdnZXIuc2dtbCBcCisJZGVidWdnaW5nLnNnbWwgXAorCWRsbHMuc2dtbCBcCisJZG9jdW1lbnRhdGlvbi5zZ21sIFwKKwlmb250cy5zZ21sIFwKKwlpMThuLnNnbWwgXAorCWltcGxlbWVudGF0aW9uLnNnbWwgXAorCWluc3RhbGxpbmcuc2dtbCBcCisJb3BlbmdsLnNnbWwgXAorCXBhY2thZ2luZy5zZ21sIFwKKwlwYXRjaGVzLnNnbWwgXAorCXBvcnRpbmcuc2dtbCBcCisJcHJpbnRpbmcuc2dtbCBcCisJcmVnaXN0cnkuc2dtbCBcCisJcnVubmluZy5zZ21sIFwKKwl0b29scy5zZ21sIFwKKwl3aW5lLWRvYy5zZ21sCiAKLWluZm86ICQoSU5GT0ZJTEVTKQorQk9PS19UQVJHRVRTID0gXAorCSQoQk9PS05BTUUpL2luZGV4Lmh0bWwgXAorCSQoQk9PS05BTUUpLnBkZiBcCisJJChCT09LTkFNRSkucHMKIAotZHZpOiAkKERWSUZJTEVTKQotCi1odG1sOiAkKEhUTUxGSUxFUykKK2FsbDogJChCT09LX1RBUkdFVFMpCiAKIEBNQUtFX1JVTEVTQAogCi0kKElORk9GSUxFUyk6ICQoU09VUkNFUykKLQltYWtlaW5mbyAkKFNSQ0RJUikvd2luZS50ZXhpbmZvCiskKEJPT0tOQU1FKS9pbmRleC5odG1sOiAkKEJPT0tfU1JDUykKKwlkYjJodG1sICQoQk9PS05BTUUpLnNnbWwKIAotJChEVklGSUxFUyk6ICQoU09VUkNFUykKLQl0ZXhpMmR2aSAkKFNSQ0RJUikvd2luZS50ZXhpbmZvCiskKEJPT0tOQU1FKS5wZGY6ICQoQk9PS19TUkNTKQorCWRiMnBkZiAkKEJPT0tOQU1FKS5zZ21sCiAKLSQoSFRNTEZJTEVTKTogJChTT1VSQ0VTKQotCW1ha2VpbmZvIC1FIHdpbmUudGV4aSAkKFNSQ0RJUikvd2luZS50ZXhpbmZvCi0JdGV4aTJodG1sIHdpbmUudGV4aSAKLQotJChJTkNMVURFUyk6Ci0JJChSTSkgJChJTkNMVURFUykKLQlmb3IgaSBpbiAkKElOQ0xVREVTKTsgZG8gJChMTl9TKSAkKFRPUFNSQ0RJUikvJCRpICQkaSB8fCBleGl0IDE7IGRvbmUKKyQoQk9PS05BTUUpLnBzOiAkKEJPT0tfU1JDUykKKwlkYjJwcyAkKEJPT0tOQU1FKS5zZ21sCiAKIGluc3RhbGw6OiAKIAkkKElOU1RBTEwpIC1kICQobWFuZGlyKS9tYW4kKHByb2dfbWFuZXh0KQpAQCAtNjIsMTkgKzYyLDggQEAKIAkkKFJNKSAkKG1hbmRpcikvbWFuJChwcm9nX21hbmV4dCkvd2luZS4kKHByb2dfbWFuZXh0KQogCSQoUk0pICQobWFuZGlyKS9tYW4kKGNvbmZfbWFuZXh0KS93aW5lLmNvbmYuJChjb25mX21hbmV4dCkKIAotIyBOb3QgZG9uZSBieSBkZWZhdWx0IGJlY2F1c2Ugb2YgbWFrZWluZm8gYnVncwotaW5zdGFsbF9pbmZvOiAkKElORk9GSUxFUykKLQlbIC1kICQoaW5mb2RpcikgXSB8fCBta2RpciAtcCAkKGluZm9kaXIpCi0JZm9yIGkgaW4gJChJTkZPRklMRVMpOyBkbyAkKElOU1RBTExfREFUQSkgJCRpICQoaW5mb2RpcikvJCRpOyBkb25lCi0KLXVuaW5zdGFsbF9pbmZvOgotCWZvciBpIGluICQoSU5GT0ZJTEVTKTsgZG8gJChSTSkgJChpbmZvZGlyKS8kJGk7IGRvbmUKLQogY2xlYW46OgotCSQoUk0pICQoSU5GT0ZJTEVTKSAkKERWSUZJTEVTKSAkKElOQ0xVREVTKQotCSQoUk0pIHdpbmUuYXV4IHdpbmUuY3Agd2luZS5jcHMgd2luZS5mbiB3aW5lLmZucyB3aW5lLmt5IHdpbmUubG9nIFwKLQkJd2luZS5wZyB3aW5lLnRvYyB3aW5lLnRwIHdpbmUudHBzIHdpbmUudnIgd2luZS52cnMgXAotCQl3aW5lLnRleGkKLQkkKFJNKSAtciBtYW4zdworCSQoUk0pICouYXV4ICouZHZpICoudGV4ICoubG9nICQoQk9PS05BTUUpLnBkZiAkKEJPT0tOQU1FKS5wcworCSQoUk0pIC1yICQoQk9PS05BTUUpIGh0bWwgbWFuM3cgKi5qdW5rIERCVE9IVE1MX09VVFBVVF9ESVIqCiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uIGIvZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhZjY5MC4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLQotCQkJV2luZSBEb2N1bWVudGF0aW9uIFJFQURNRQotCi0KLVdpbmUgTWFuIFBhZ2UKLQotICBUaGUgbWFuIHBhZ2UgZm9yIFdpbmUgaXMgaW4gdGhpcyBkaXJlY3RvcnkuIEl0IGlzIGluc3RhbGxlZCBieSAnbWFrZQotaW5zdGFsbCcuCi0KLVdpbmUgUmVmZXJlbmNlIE1hbnVhbAotCi0gIFRleGluZm8gc291cmNlIGZvciBwcmVsaW1pbmFyeSBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gaXMgaW4KLXRoaXMgZGlyZWN0b3J5LiAgVXNlICdtYWtlIGluZm8nIGluIHRoaXMgZGlyZWN0b3J5IHRvIGdlbmVyYXRlIHRoZSBHTlUKLWluZm8gdmVyc2lvbiwgJ21ha2UgZHZpJyB0byBnZW5lcmF0ZSB0aGUgRFZJIHZlcnNpb24gKGhpdCAncicgdG8KLWlnbm9yZSBlcnJvcnMpLCBvciAnbWFrZSBhbGwnIGZvciBib3RoLiBJdCBpcyBub3QgaW5zdGFsbGVkIGJ5Ci1kZWZhdWx0LgotCi1XaW5lIEFQSSBkb2N1bWVudGF0aW9uCi0KLSAgRG8gYSAnbWFrZSBtYW5wYWdlcycgaW4gdGhlIFdpbmUgdG9wbGV2ZWwgZGlyZWN0b3J5IHRvIGdlbmVyYXRlIHRoZQotQVBJIG1hbnBhZ2VzIGZyb20gdGhlIFdpbmUgc291cmNlLCBvciAnbWFrZSBtYW4nIGluIGFueSBzb3VyY2UKLXN1YmRpcmVjdG9yeSB0byBnZW5lcmF0ZSBtYW5wYWdlcyBmcm9tIG9ubHkgdGhhdCBkaXJlY3RvcnkuIE9ubHkKLWZ1bmN0aW9ucyBtZW50aW9uZWQgaW4gV2luZSBzcGVjIGZpbGVzIHdpbGwgYmUgZG9jdW1lbnRlZDsgdGhlCi1zcGVjaWZpYyAuc3BlYyBmaWxlcyBjaGVja2VkIGFyZSBzZXQgYnkgdGhlIE1BTlNQRUNTIHZhcmlhYmxlIGluCi1NYWtlLnJ1bGVzLiBUaGUgbWFucGFnZXMgd2lsbCBiZSBnZW5lcmF0ZWQgaW50bwotW2RvY3VtZW50YXRpb24vbWFuM3ddLiBGb3IgSFRNTCBmb3JtYXR0ZWQgbWFucGFnZXMsIGRvICdtYWtlCi1odG1scGFnZXMnIGZyb20gdGhlIHRvcGxldmVsLCBvciAnbWFrZSBodG1sJyBmcm9tIGFueQotc3ViZGlyZWN0b3J5LiBIVE1MIGZvcm1hdHRlZCBwYWdlcyBhcmUgZ2VuZXJhdGVkIGludG8KLVtkb2N1bWVudGF0aW9uL2h0bWxdLiBZb3Ugd2lsbCBuZWVkIGMybWFuIGFzIG1vZGlmaWVkIGZvciBXaW5lLAotYXZhaWxhYmxlIGFzIHNvdXJjZSBvciBiaW5hcnkgZnJvbSBmdHA6Ly9mdHAud2luZWhxLmNvbS9wdWIvd2luZS8uCi1UaGUgbWFuIHBhZ2VzIGFyZSBub3QgaW5zdGFsbGVkIGJ5ICdtYWtlIGluc3RhbGwnLgotCi1PdGhlciBSRUFETUVzCi0KLSAgT3RoZXIgaW5mb3JtYXRpb25hbCBmaWxlcyBhcmUgaW4gdGhpcyBkaXJlY3RvcnkgYXMgd2VsbCBhcyBzY2F0dGVyZWQKLXRocm91Z2ggdGhlIHNvdXJjZSB0cmVlLgotCi1PdGhlciByZXNvdXJjZXM6Ci0KLSAgVXNlbmV0OiBuZXdzOmNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZQotICBXV1c6ICAgIGh0dHA6Ly93d3cud2luZWhxLmNvbS8KLQotCi1Xcml0aW5nIFdpbmUgQVBJIERvY3VtZW50YXRpb24KLQotVG8gaW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgV2luZSBBUEksIGp1c3QgYWRkIGNvbW1lbnRzIHRvIHRoZQotZXhpc3Rpbmcgc291cmNlLiBGb3IgZXhhbXBsZSwKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBDb3B5TWV0YUZpbGUzMkEgICAoR0RJMzIuMjMpCi0gKgotICogIENvcGllcyB0aGUgbWV0YWZpbGUgY29ycmVzcG9uZGluZyB0byBoU3JjTWV0YUZpbGUgdG8gZWl0aGVyCi0gKiAgYSBkaXNrIGZpbGUsIGlmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4sIG9yIHRvIGEgbmV3IG1lbW9yeSBiYXNlZAotICogIG1ldGFmaWxlLCBpZiBscEZpbGVOYW1lIGlzIE5VTEwuCi0gKgotICogUkVUVVJOUwotICoKLSAqICBIYW5kbGUgdG8gbWV0YWZpbGUgY29weSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCi0gKgotICogQlVHUwotICoKLSAqICBDb3B5aW5nIHRvIGRpc2sgcmV0dXJucyBOVUxMIGV2ZW4gaWYgc3VjY2Vzc2Z1bC4KLSAqLwotSE1FVEFGSUxFMzIgV0lOQVBJIENvcHlNZXRhRmlsZTMyQSgKLQkJICAgSE1FVEFGSUxFMzIgaFNyY01ldGFGaWxlLCAvKiBoYW5kbGUgb2YgbWV0YWZpbGUgdG8gY29weSAqLwotCQkgICBMUENTVFIgbHBGaWxlbmFtZSAvKiBmaWxlbmFtZSBpZiBjb3B5aW5nIHRvIGEgZmlsZSAqLwotKSB7IC4uLiB9Ci0KLWJlY29tZXMsIGFmdGVyIHByb2Nlc3Npbmcgd2l0aCBjMm1hbiBhbmQgbnJvZmYgLW1hbiwKLQotQ29weU1ldGFGaWxlQSgzdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weU1ldGFGaWxlQSgzdykKLQotCi1OQU1FCi0gICAgICAgQ29weU1ldGFGaWxlQSAtIENvcHlNZXRhRmlsZTMyQSAgIChHREkzMi4yMykKLQotU1lOT1BTSVMKLSAgICAgICBITUVUQUZJTEUzMiBDb3B5TWV0YUZpbGVBCi0gICAgICAgKAotICAgICAgICAgICAgSE1FVEFGSUxFMzIgaFNyY01ldGFGaWxlLAotICAgICAgICAgICAgTFBDU1RSIGxwRmlsZW5hbWUKLSAgICAgICApOwotCi1QQVJBTUVURVJTCi0gICAgICAgSE1FVEFGSUxFMzIgaFNyY01ldGFGaWxlCi0gICAgICAgICAgICAgIEhhbmRsZSBvZiBtZXRhZmlsZSB0byBjb3B5LgotCi0gICAgICAgTFBDU1RSIGxwRmlsZW5hbWUKLSAgICAgICAgICAgICAgRmlsZW5hbWUgaWYgY29weWluZyB0byBhIGZpbGUuCi0KLURFU0NSSVBUSU9OCi0gICAgICAgQ29waWVzICB0aGUgIG1ldGFmaWxlICBjb3JyZXNwb25kaW5nICB0byAgaFNyY01ldGFGaWxlICB0bwotICAgICAgIGVpdGhlciBhIGRpc2sgZmlsZSwgaWYgYSBmaWxlbmFtZSBpcyBnaXZlbiwgb3IgIHRvICBhICBuZXcKLSAgICAgICBtZW1vcnkgYmFzZWQgbWV0YWZpbGUsIGlmIGxwRmlsZU5hbWUgaXMgTlVMTC4KLQotUkVUVVJOUwotICAgICAgIEhhbmRsZSB0byBtZXRhZmlsZSBjb3B5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KLQotQlVHUwotICAgICAgIENvcHlpbmcgdG8gZGlzayByZXR1cm5zIE5VTEwgZXZlbiBpZiBzdWNjZXNzZnVsLgotCi1TRUUgQUxTTwotICAgICAgIEdldE1ldGFGaWxlQSgzdyksICAgR2V0TWV0YUZpbGVXKDN3KSwgICBDb3B5TWV0YUZpbGVXKDN3KSwKLSAgICAgICBQbGF5TWV0YUZpbGUoM3cpLCAgU2V0TWV0YUZpbGVCaXRzRXgoM3cpLCAgR2V0TWV0YUZpbGVCaXQtCi0gICAgICAgc0V4KDN3KQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9hY2NlbGVyYXRvcnMgYi9kb2N1bWVudGF0aW9uL2FjY2VsZXJhdG9ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY0YWRhYi4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2FjY2VsZXJhdG9ycworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLVNvbWUgbm90ZXMgY29uY2VybmluZyBhY2NlbGVyYXRvcnMuCi0KLVRoZXJlIGFyZSBfdGhyZWVfIGRpZmZlcmVudGx5IHNpemVkIGFjY2VsZXJhdG9yIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB0aGUKLXVzZXIuIFRoZSBnZW5lcmFsIGxheW91dCBpczoKLQotCUJZVEUgICBmVmlydDsKLQlXT1JEICAga2V5OwotCVdPUkQgICBjbWQ7Ci0KLVdlIG5vdyBoYXZlIHRocmVlIGRpZmZlcmVudCBhcHBlYXJhbmNlczoKLQotLSBBY2NlbGVyYXRvcnMgaW4gTkUgcmVzb3VyY2VzLiBUaGVzZSBoYXZlIGEgc2l6ZSBvZiA1IGJ5dGUgYW5kIGRvIG5vdCBoYXZlCi0gIGFueSBwYWRkaW5nLiBUaGlzIGlzIGFsc28gdGhlIGludGVybmFsIGxheW91dCBvZiB0aGUgZ2xvYmFsIGhhbmRsZSBIQUNDRUwKLSAgKDE2IGFuZCAzMikgaW4gV2luZG93cyA5NSBhbmQgV0lORS4gRXhwb3NlZCB0byB0aGUgdXNlciBhcyBXaW4xNiBnbG9iYWwKLSAgaGFuZGxlcyBIQUNDRUwxNiBhbmQgSEFDQ0VMMzIgYnkgdGhlIFdpbjE2L1dpbjMyIEFQSS4KLQotLSBBY2NlbGVyYXRvcnMgaW4gUEUgcmVzb3VyY2VzLiBUaGVzZSBoYXZlIGEgc2l6ZSBvZiA4IGJ5dGUuIExheW91dCBpczoKLQlCWVRFICAgZlZpcnQ7Ci0JQllURSAgIHBhZDA7Ci0JV09SRCAgIGtleTsKLQlXT1JEICAgY21kOwotCVdPUkQgICBwYWQxOwotICBUaGV5IGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIG9ubHkgYnkgZGlyZWN0IGFjY2Vzc2luZyBQRSByZXNvdXJjZXMuCi0KLS0gQWNjZWxlcmF0b3JzIGluIHRoZSBXaW4zMiBBUEkuIFRoZXNlIGhhdmUgYSBzaXplIG9mIDYgYnl0ZS4gTGF5b3V0IGlzOgotCUJZVEUgICBmVmlydDsKLQlCWVRFICAgcGFkMDsKLQlXT1JEICAga2V5OwotCVdPUkQgICBjbWQ7Ci0gIFRoZXNlIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGJ5IHRoZSBDb3B5QWNjZWxlcmF0b3JUYWJsZSBhbmQKLSAgQ3JlYXRlQWNjZWxlcmF0b3JUYWJsZSBpbiB0aGUgV2luMzIgQVBJLgotCi1XaHkgdHdvIHR5cGVzIG9mIGFjY2VsZXJhdG9ycyBpbiB0aGUgV2luMzIgQVBJPyBXZSBjYW4gb25seSBndWVzcywgYnV0Ci1teSBiZXN0IGJldCBpcyB0aGF0IHRoZSBXaW4zMiByZXNvdXJjZSBjb21waWxlciBjYW4vZG9lcyBub3QgaGFuZGxlIHN0cnVjdAotcGFja2luZy4gV2luMzIgQUNDRUwgaXMgZGVmaW5lZCB1c2luZyAjcHJhZ21hKDIpIGZvciB0aGUgY29tcGlsZXIgYnV0IHdpdGhvdXQKLWFueSBwYWNraW5nIGZvciBSQywgc28gaXQgd2lsbCBhc3N1bWUgI3ByYWdtYSg0KS4KLQotRmluZGluZ3MgcmVzZWFyY2hlZCBieSBVd2UgQm9ubmVzLCBVbHJpY2ggV2VpZ2FuZCBhbmQgTWFyY3VzIE1laXNzbmVyLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9hcmNoaXRlY3R1cmUuc2dtbCBiL2RvY3VtZW50YXRpb24vYXJjaGl0ZWN0dXJlLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5NDBjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vYXJjaGl0ZWN0dXJlLnNnbWwKQEAgLTAsMCArMSwxMDMyIEBACisgIDxjaGFwdGVyIGlkPSJhcmNoaXRlY3R1cmUiPgorICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+QnJpZWYgb3ZlcnZpZXcgb2YgV2luZSdzIGFyY2hpdGVjdHVyZS4uLjwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0iYmFzaWMtb3ZlcnZpZXciPgorICAgICAgPHRpdGxlPkJhc2ljIE92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgPHBhcmE+V3JpdHRlbiBieSBPdmUgS2FhdmVuPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2l0aCB0aGUgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJlIG9mIFdpbmUgc3RhYmlsaXppbmcsIGFuZAorICAgICAgICBwZW9wbGUgc3RhcnRpbmcgdG8gdGhpbmsgdGhhdCB3ZSBtaWdodCBzb29uIGJlIHJlYWR5IHRvCisgICAgICAgIGFjdHVhbGx5IHJlbGVhc2UgdGhpcyB0aGluZywgaXQgbWF5IGJlIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQKKyAgICAgICAgaG93IFdpbmUgYWN0dWFsbHkgd29ya3MgYW5kIG9wZXJhdGVzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5XaW5lIE92ZXJ2aWV3PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2luZSBpcyBvZnRlbiB1c2VkIGFzIGEgcmVjdXJzaXZlIGFjcm9ueW0sIHN0YW5kaW5nIGZvcgorICAgICAgICAgICJXaW5lIElzIE5vdCBhbiBFbXVsYXRvciIuIFNvbWV0aW1lcyBpdCBpcyBhbHNvIGtub3duIHRvIGJlCisgICAgICAgICAgdXNlZCBmb3IgIldpbmRvd3MgRW11bGF0b3IiLiBJbiBhIHdheSwgYm90aCBtZWFuaW5ncyBhcmUKKyAgICAgICAgICBjb3JyZWN0LCBvbmx5IHNlZW4gZnJvbSBkaWZmZXJlbnQgcGVyc3BlY3RpdmVzLiBUaGUgZmlyc3QKKyAgICAgICAgICBtZWFuaW5nIHNheXMgdGhhdCBXaW5lIGlzIG5vdCBhIHZpcnR1YWwgbWFjaGluZSwgaXQgZG9lcyBub3QKKyAgICAgICAgICBlbXVsYXRlIGEgQ1BVLCBhbmQgeW91IGFyZSBub3Qgc3VwcG9zZWQgdG8gaW5zdGFsbCBuZWl0aGVyCisgICAgICAgICAgV2luZG93cyBub3IgYW55IFdpbmRvd3MgZGV2aWNlIGRyaXZlcnMgb24gdG9wIG9mIGl0OyByYXRoZXIsCisgICAgICAgICAgV2luZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2luZG93cyBBUEksIGFuZCBjYW4gYmUKKyAgICAgICAgICB1c2VkIGFzIGEgbGlicmFyeSB0byBwb3J0IFdpbmRvd3MgYXBwbGljYXRpb25zIHRvIFVuaXguIFRoZQorICAgICAgICAgIHNlY29uZCBtZWFuaW5nLCBvYnZpb3VzbHksIGlzIHRoYXQgdG8gV2luZG93cyBiaW5hcmllcworICAgICAgICAgICg8ZmlsZW5hbWU+LmV4ZTwvZmlsZW5hbWU+IGZpbGVzKSwgV2luZSBkb2VzIGxvb2sgbGlrZQorICAgICAgICAgIFdpbmRvd3MsIGFuZCBlbXVsYXRlcyBpdHMgYmVoYXZpb3VyIGFuZCBxdWlya3MgcmF0aGVyCisgICAgICAgICAgY2xvc2VseS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICA8dGl0bGU+Tm90ZTwvdGl0bGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgIkVtdWxhdG9yIiBwZXJzcGVjdGl2ZSBzaG91bGQgbm90IGJlIHRob3VnaHQgb2YgYXMgaWYKKyAgICAgICAgICAgIFdpbmUgaXMgYSB0eXBpY2FsIGluZWZmaWNpZW50IGVtdWxhdGlvbiBsYXllciB0aGF0IG1lYW5zCisgICAgICAgICAgICBXaW5lIGNhbid0IGJlIGFueXRoaW5nIGJ1dCBzbG93IC0gdGhlIGZhaXRoZnVsbmVzcyB0byB0aGUKKyAgICAgICAgICAgIGJhZGx5IGRlc2lnbmVkIFdpbmRvd3MgQVBJIG1heSBvZiBjb3Vyc2UgaW1wb3NlIGEgbWlub3IKKyAgICAgICAgICAgIG92ZXJoZWFkIGluIHNvbWUgY2FzZXMsIGJ1dCB0aGlzIGlzIGJvdGggYmFsYW5jZWQgb3V0IGJ5CisgICAgICAgICAgICB0aGUgaGlnaGVyIGVmZmljaWVuY3kgb2YgdGhlIFVuaXggcGxhdGZvcm1zIFdpbmUgcnVucyBvbiwKKyAgICAgICAgICAgIGFuZCB0aGF0IG90aGVyIHBvc3NpYmxlIGFic3RyYWN0aW9uIGxpYnJhcmllcyAobGlrZSBNb3RpZiwKKyAgICAgICAgICAgIEdUSyssIENPUkJBLCBldGMpIGhhcyBhIHJ1bnRpbWUgb3ZlcmhlYWQgdHlwaWNhbGx5CisgICAgICAgICAgICBjb21wYXJhYmxlIHRvIFdpbmUncy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPldpbjE2IGFuZCBXaW4zMjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpbjE2IGFuZCBXaW4zMiBhcHBsaWNhdGlvbnMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzOworICAgICAgICAgIGZvciBleGFtcGxlLCBXaW4xNiBhcHBzIGV4cGVjdCBjb29wZXJhdGl2ZSBtdWx0aXRhc2tpbmcKKyAgICAgICAgICBhbW9uZyB0aGVtc2VsdmVzLCBhbmQgdG8gZXhpc3QgaW4gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSwKKyAgICAgICAgICB3aGlsZSBXaW4zMiBhcHBzIGV4Y2VwdCB0aGUgY29tcGxldGUgb3Bwb3NpdGUsIGkuZS4KKyAgICAgICAgICBwcmVlbXB0aXZlIG11bHRpdGFza2luZywgYW5kIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpbmUgbm93IGRlYWxzIHdpdGggdGhpcyBpc3N1ZSBieSBsYXVuY2hpbmcgYSBzZXBhcmF0ZSBXaW5lCisgICAgICAgICAgcHJvY2VzcyBmb3IgZWFjaCBXaW4zMiBwcm9jZXNzLCBidXQgbm90IGZvciBXaW4xNiB0YXNrcy4KKyAgICAgICAgICBXaW4xNiB0YXNrcyBhcmUgbm93IHJ1biBhcyBkaWZmZXJlbnQgaW50ZXJzeW5jaHJvbml6ZWQKKyAgICAgICAgICB0aHJlYWRzIGluIHRoZSBzYW1lIFdpbmUgcHJvY2VzczsgdGhpcyBXaW5lIHByb2Nlc3MgaXMKKyAgICAgICAgICBjb21tb25seSBrbm93biBhcyBhIDxmaXJzdHRlcm0+V09XPC9maXJzdHRlcm0+IHByb2Nlc3MsCisgICAgICAgICAgcmVmZXJyaW5nIHRvIGEgc2ltaWxhciBtZWNoYW5pc20gdXNlZCBieSBXaW5kb3dzIE5ULgorICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBXaW4xNiB0YXNrcyBydW5uaW5nIGluIHRoZSBXT1cKKyAgICAgICAgICBwcm9jZXNzIGlzIG5vcm1hbGx5IGRvbmUgdGhyb3VnaCB0aGUgV2luMTYgbXV0ZXggLSB3aGVuZXZlcgorICAgICAgICAgIG9uZSBvZiB0aGVtIGlzIHJ1bm5pbmcsIGl0IGhvbGRzIHRoZSBXaW4xNiBtdXRleCwga2VlcGluZworICAgICAgICAgIHRoZSBvdGhlcnMgZnJvbSBydW5uaW5nLiBXaGVuIHRoZSB0YXNrIHdpc2hlcyB0byBsZXQgdGhlCisgICAgICAgICAgb3RoZXIgdGFza3MgcnVuLCB0aGUgdGhyZWFkIHJlbGVhc2VzIHRoZSBXaW4xNiBtdXRleCwgYW5kCisgICAgICAgICAgb25lIG9mIHRoZSB3YWl0aW5nIHRocmVhZHMgd2lsbCB0aGVuIGFjcXVpcmUgaXQgYW5kIGxldCBpdHMKKyAgICAgICAgICB0YXNrIHJ1bi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VGhlIFdpbmVzZXJ2ZXI8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgV2luZXNlcnZlciBpcyBhbW9uZyB0aGUgbW9zdCBjb25mdXNpbmcgY29uY2VwdHMgaW4gV2luZS4KKyAgICAgICAgICBXaGF0IGlzIGl0cyBmdW5jdGlvbiBpbiBXaW5lPyBXZWxsLCB0byBiZSBicmllZiwgaXQgcHJvdmlkZXMKKyAgICAgICAgICBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24gKElQQyksIHN5bmNocm9uaXphdGlvbiwgYW5kCisgICAgICAgICAgcHJvY2Vzcy90aHJlYWQgbWFuYWdlbWVudC4gV2hlbiB0aGUgd2luZXNlcnZlciBsYXVuY2hlcywgaXQKKyAgICAgICAgICBjcmVhdGVzIGEgVW5peCBzb2NrZXQgZm9yIHRoZSBjdXJyZW50IGhvc3QgaW4geW91ciBob21lCisgICAgICAgICAgZGlyZWN0b3J5J3MgPGZpbGVuYW1lPi53aW5lPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IChvcgorICAgICAgICAgIHdoZXJldmVyIHRoZSA8Y29uc3RhbnQ+V0lORVBSRUZJWDwvY29uc3RhbnQ+IGVudmlyb25tZW50CisgICAgICAgICAgdmFyaWFibGUgcG9pbnRzKSAtIGFsbCBXaW5lIHByb2Nlc3NlcyBsYXVuY2hlZCBsYXRlcgorICAgICAgICAgIGNvbm5lY3RzIHRvIHRoZSB3aW5lc2VydmVyIHVzaW5nIHRoaXMgc29ja2V0LiAoSWYgYQorICAgICAgICAgIHdpbmVzZXJ2ZXIgd2FzIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIHRoZSBmaXJzdCBXaW5lIHByb2Nlc3MKKyAgICAgICAgICB3aWxsIHN0YXJ0IHVwIHRoZSB3aW5lc2VydmVyIGluIGF1dG8tdGVybWluYXRlIG1vZGUgKGkuZS4KKyAgICAgICAgICB0aGUgd2luZXNlcnZlciB3aWxsIHRoZW4gdGVybWluYXRlIGl0c2VsZiBvbmNlIHRoZSBsYXN0IFdpbmUKKyAgICAgICAgICBwcm9jZXNzIGhhcyB0ZXJtaW5hdGVkKS4pCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRXZlcnkgdGhyZWFkIGluIGVhY2ggV2luZSBwcm9jZXNzIGhhcyBpdHMgb3duIHJlcXVlc3QKKyAgICAgICAgICBidWZmZXIsIHdoaWNoIGlzIHNoYXJlZCB3aXRoIHRoZSB3aW5lc2VydmVyLiBXaGVuIGEgdGhyZWFkCisgICAgICAgICAgbmVlZHMgdG8gc3luY2hyb25pemUgb3IgY29tbXVuaWNhdGUgd2l0aCBhbnkgb3RoZXIgdGhyZWFkIG9yCisgICAgICAgICAgcHJvY2VzcywgaXQgZmlsbHMgb3V0IGl0cyByZXF1ZXN0IGJ1ZmZlciwgdGhlbiB3cml0ZXMgYQorICAgICAgICAgIGNvbW1hbmQgY29kZSB0aHJvdWdoIHRoZSBzb2NrZXQuIFRoZSB3aW5lc2VydmVyIGhhbmRsZXMgdGhlCisgICAgICAgICAgY29tbWFuZCBhcyBhcHByb3ByaWF0ZSwgd2hpbGUgdGhlIGNsaWVudCB0aHJlYWQgd2FpdHMgZm9yIGEKKyAgICAgICAgICByZXBseS4gSW4gc29tZSBjYXNlcywgbGlrZSB3aXRoIHRoZSB2YXJpb3VzCisgICAgICAgICAgPGZ1bmN0aW9uPldhaXRGb3I8L2Z1bmN0aW9uPiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgdGhlCisgICAgICAgICAgc2VydmVyIGhhbmRsZXMgaXQgYnkgbWFya2luZyB0aGUgY2xpZW50IHRocmVhZCBhcyB3YWl0aW5nCisgICAgICAgICAgYW5kIGRvZXMgbm90IHNlbmQgaXQgYSByZXBseSBiZWZvcmUgdGhlIHdhaXQgY29uZGl0aW9uIGhhcworICAgICAgICAgIGJlZW4gc2F0aXNmaWVkLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSB3aW5lc2VydmVyIGl0c2VsZiBpcyBhIHNpbmdsZSBhbmQgc2VwYXJhdGUgcHJvY2VzcyBhbmQKKyAgICAgICAgICBkb2VzIG5vdCBoYXZlIGl0cyBvd24gdGhyZWFkaW5nIC0gaW5zdGVhZCwgaXQgaXMgYnVpbHQgb24KKyAgICAgICAgICB0b3Agb2YgYSBsYXJnZSA8ZnVuY3Rpb24+cG9sbCgpPC9mdW5jdGlvbj4gbG9vcCB0aGF0IGFsZXJ0cworICAgICAgICAgIHRoZSB3aW5lc2VydmVyIHdoZW5ldmVyIGFueXRoaW5nIGhhcHBlbnMsIHN1Y2ggdGhhdCBhIGNsaWVudAorICAgICAgICAgIGhhcyBzZW50IGEgY29tbWFuZCwgb3IgYSB3YWl0IGNvbmRpdGlvbiBoYXMgYmVlbiBzYXRpc2ZpZWQuCisgICAgICAgICAgVGhlcmUgaXMgdGh1cyBubyBkYW5nZXIgb2YgcmFjZSBjb25kaXRpb25zIGluc2lkZSB0aGUKKyAgICAgICAgICB3aW5lc2VydmVyIGl0c2VsZiAtIGl0IGlzIG9mdGVuIGNhbGxlZCB1cG9uIHRvIGRvIG9wZXJhdGlvbnMKKyAgICAgICAgICB0aGF0IGxvb2sgY29tcGxldGVseSBhdG9taWMgdG8gaXRzIGNsaWVudHMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQmVjYXVzZSB0aGUgd2luZXNlcnZlciBuZWVkcyB0byBtYW5hZ2UgcHJvY2Vzc2VzLCB0aHJlYWRzLAorICAgICAgICAgIHNoYXJlZCBoYW5kbGVzLCBzeW5jaHJvbml6YXRpb24sIGFuZCBhbnkgcmVsYXRlZCBpc3N1ZXMsIGFsbAorICAgICAgICAgIHRoZSBjbGllbnQncyBXaW4zMiBvYmplY3RzIGFyZSBhbHNvIG1hbmFnZWQgYnkgdGhlCisgICAgICAgICAgd2luZXNlcnZlciwgYW5kIHRoZSBjbGllbnRzIG11c3Qgc2VuZCByZXF1ZXN0cyB0byB0aGUKKyAgICAgICAgICB3aW5lc2VydmVyIHdoZW5ldmVyIHRoZXkgbmVlZCB0byBrbm93IGFueSBXaW4zMiBvYmplY3QKKyAgICAgICAgICBoYW5kbGUncyBhc3NvY2lhdGVkIFVuaXggZmlsZSBkZXNjcmlwdG9yIChpbiB3aGljaCBjYXNlIHRoZQorICAgICAgICAgIHdpbmVzZXJ2ZXIgZHVwbGljYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yLCB0cmFuc21pdHMgaXQgdG8KKyAgICAgICAgICB0aGUgY2xpZW50LCBhbmQgbGVhdmVzIHRvIHRoZSBjbGllbnQgdG8gY2xvc2UgdGhlIGR1cGxpY2F0ZQorICAgICAgICAgIHdoZW4gaXQncyBkb25lIHdpdGggaXQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRoZSBTZXJ2aWNlIFRocmVhZDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBXaW5lc2VydmVyIGNhbm5vdCBkbyBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZG9uZQorICAgICAgICAgIGJlaGluZCB0aGUgYXBwbGljYXRpb24ncyBiYWNrLCBjb25zaWRlcmluZyB0aGF0IGl0J3Mgbm90CisgICAgICAgICAgdGhyZWFkZWQgKHNvIGNhbm5vdCBkbyBhbnl0aGluZyB0aGF0IHdvdWxkIGJsb2NrIG9yIHRha2UgYW55CisgICAgICAgICAgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUpLCBub3IgZG9lcyBpdCBzaGFyZSB0aGUgYWRkcmVzcworICAgICAgICAgIHNwYWNlIG9mIGl0cyBjbGllbnQgdGhyZWFkcy4gVGh1cywgYSBzcGVjaWFsIGV2ZW50IGxvb3AgYWxzbworICAgICAgICAgIGV4aXN0cyBpbiBlYWNoIFdpbjMyIHByb2Nlc3MnIG93biBhZGRyZXNzIHNwYWNlLCBidXQgaGFuZGxlZAorICAgICAgICAgIGxpa2Ugb25lIG9mIHRoZSBwcm9jZXNzJyBvd24gdGhyZWFkcy4gVGhpcyBzcGVjaWFsIHRocmVhZCBpcworICAgICAgICAgIGNhbGxlZCB0aGUgPGZpcnN0dGVybT5zZXJ2aWNlIHRocmVhZDwvZmlyc3R0ZXJtPiwgYW5kIGRvZXMKKyAgICAgICAgICB0aGluZ3MgdGhhdCBpdCB3b3VsZG4ndCBiZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHdpbmVzZXJ2ZXIgdG8KKyAgICAgICAgICBkby4gRm9yIGV4YW1wbGUsIGl0IGNhbiBjYWxsIHRoZSBhcHBsaWNhdGlvbidzIGFzeW5jaHJvbm91cworICAgICAgICAgIHN5c3RlbSB0aW1lciBjYWxsYmFja3MgZXZlcnkgdGltZSBhIHRpbWVyIGV2ZW50IGlzIHNpZ25hbGxlZAorICAgICAgICAgICh0aGUgd2luZXNlcnZlciBoYW5kbGVzIHRoZSBzaWduYWxsaW5nLCBvZiBjb3Vyc2UpLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE9uZSBpbXBvcnRhbnQgZnVuY3Rpb24gb2YgdGhlIHNlcnZpY2UgdGhyZWFkIGlzIHRvIHN1cHBvcnQKKyAgICAgICAgICB0aGUgWDExIGRyaXZlcidzIGV2ZW50IGxvb3AuIFdoZW5ldmVyIGFuIGV2ZW50IGFycml2ZXMgZnJvbQorICAgICAgICAgIHRoZSBYIHNlcnZlciwgdGhlIHNlcnZpY2UgdGhyZWFkIHdha2VzIHVwIGFuZCBzZWVzIHRoZQorICAgICAgICAgIGV2ZW50LCBwcm9jZXNzZXMgaXQsIGFuZCBwb3N0cyBtZXNzYWdlcyBpbnRvIHRoZQorICAgICAgICAgIGFwcGxpY2F0aW9uJ3MgbWVzc2FnZSBxdWV1ZXMgYXMgYXBwcm9wcmlhdGUuIEJ1dCB0aGlzCisgICAgICAgICAgZnVuY3Rpb24gaXMgbm90IHVuaXF1ZSAtIGFueSBudW1iZXIgb2YgV2luZSBjb3JlIGNvbXBvbmVudHMKKyAgICAgICAgICBjYW4gaW5zdGFsbCB0aGVpciBvd24gaGFuZGxlcnMgaW50byB0aGUgc2VydmljZSB0aHJlYWQgYXMKKyAgICAgICAgICBuZWNlc3NhcnksIHdoZW5ldmVyIHRoZXkgbmVlZCB0byBkbyBzb21ldGhpbmcgaW5kZXBlbmRlbnQgb2YKKyAgICAgICAgICB0aGUgYXBwbGljYXRpb24ncyBvd24gZXZlbnQgbG9vcC4gKEF0IHRoZSBtb21lbnQsIHRoaXMKKyAgICAgICAgICBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBtdWx0aW1lZGlhIHRpbWVycywgc2VyaWFsCisgICAgICAgICAgY29tbXMsIGFuZCB3aW5zb2NrIGFzeW5jIHNlbGVjdHMuKQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VydmljZSB0aHJlYWQgaXMgaW4KKyAgICAgICAgICA8ZmlsZW5hbWU+c2NoZWR1bGVyL3NlcnZpY2VzLmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+UmVsYXlzLCBUaHVua3MsIGFuZCBETEwgZGVzY3JpcHRvcnM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBMb2FkaW5nIGEgV2luZG93cyBiaW5hcnkgaW50byBtZW1vcnkgaXNuJ3QgdGhhdCBoYXJkIGJ5CisgICAgICAgICAgaXRzZWxmLCB0aGUgaGFyZCBwYXJ0IGlzIGFsbCB0aG9zZSB2YXJpb3VzIERMTHMgYW5kIGVudHJ5CisgICAgICAgICAgcG9pbnRzIGl0IGltcG9ydHMgYW5kIGV4cGVjdHMgdG8gYmUgdGhlcmUgYW5kIGZ1bmN0aW9uIGFzCisgICAgICAgICAgZXhwZWN0ZWQ7IHRoaXMgaXMsIG9idmlvdXNseSwgd2hhdCB0aGUgZW50aXJlIFdpbmUKKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBpcyBhbGwgYWJvdXQuIFdpbmUgY29udGFpbnMgYSByYW5nZSBvZiBETEwKKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuIEVhY2ggb2YgdGhlIGltcGxlbWVudGVkIChvcgorICAgICAgICAgIGhhbGYtaW1wbGVtZW50ZWQpIERMTHMgKHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICA8ZmlsZW5hbWU+ZGxscy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkpIG5lZWQgdG8gbWFrZQorICAgICAgICAgIHRoZW1zZWx2ZXMga25vd24gdG8gdGhlIFdpbmUgY29yZSB0aHJvdWdoIGEgRExMIGRlc2NyaXB0b3IuCisgICAgICAgICAgVGhlc2UgZGVzY3JpcHRvcnMgcG9pbnQgdG8gc3VjaCB0aGluZ3MgYXMgdGhlIERMTCdzCisgICAgICAgICAgcmVzb3VyY2VzIGFuZCB0aGUgZW50cnkgcG9pbnQgdGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIERMTCBkZXNjcmlwdG9yIGFuZCBlbnRyeSBwb2ludCB0YWJsZSBpcyBnZW5lcmF0ZWQgYnkgdGhlCisgICAgICAgICAgPGNvbW1hbmQ+d2luZWJ1aWxkPC9jb21tYW5kPiB0b29sIChwcmV2aW91c2x5IGp1c3QgbmFtZWQKKyAgICAgICAgICA8Y29tbWFuZD5idWlsZDwvY29tbWFuZD4pLCB0YWtpbmcgRExMIHNwZWNpZmljYXRpb24gZmlsZXMKKyAgICAgICAgICB3aXRoIHRoZSBleHRlbnNpb24gPGZpbGVuYW1lPi5zcGVjPC9maWxlbmFtZT4gYXMgaW5wdXQuIFRoZQorICAgICAgICAgIG91dHB1dCBmaWxlIGNvbnRhaW5zIGEgZ2xvYmFsIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseQorICAgICAgICAgIHJlZ2lzdGVycyB0aGUgRExMJ3MgZGVzY3JpcHRvciB3aXRoIHRoZSBXaW5lIGNvcmUgYXQKKyAgICAgICAgICBydW50aW1lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE9uY2UgYW4gYXBwbGljYXRpb24gbW9kdWxlIHdhbnRzIHRvIGltcG9ydCBhIERMTCwgV2luZSB3aWxsCisgICAgICAgICAgbG9vayB0aHJvdWdoIGl0cyBsaXN0IG9mIHJlZ2lzdGVyZWQgRExMcyAoaWYgaXQncyBub3QKKyAgICAgICAgICByZWdpc3RlcmVkLCBpdCB3aWxsIGxvb2sgZm9yIGl0IG9uIGRpc2spLiAoRmFpbGluZyB0aGF0LCBpdAorICAgICAgICAgIHdpbGwgbG9vayBmb3IgYSByZWFsIFdpbmRvd3MgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgdG8gdXNlLCBhbmQgbG9vayB0aHJvdWdoIGl0cyBpbXBvcnRzLCBldGMuKSBUbyByZXNvbHZlIHRoZQorICAgICAgICAgIG1vZHVsZSdzIGltcG9ydHMsIFdpbmUgbG9va3MgdGhyb3VnaCB0aGUgZW50cnkgcG9pbnQgdGFibGUKKyAgICAgICAgICBhbmQgZmluZHMgaWYgaXQncyBkZWZpbmVkIHRoZXJlLiAoSWYgbm90LCBpdCdsbCBlbWl0IHRoZQorICAgICAgICAgIGVycm9yICJObyBoYW5kbGVyIGZvciAuLi4iLCB3aGljaCwgaWYgdGhlIGFwcGxpY2F0aW9uIGNhbGxlZAorICAgICAgICAgIHRoZSBlbnRyeSBwb2ludCwgaXMgYSBmYXRhbCBlcnJvci4pCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU2luY2UgV2luZSBpcyAzMi1iaXQgY29kZSBpdHNlbGYsIGFuZCBpZiB0aGUgY29tcGlsZXIKKyAgICAgICAgICBzdXBwb3J0cyBXaW5kb3dzJyBjYWxsaW5nIGNvbnZlbnRpb24sIDx0eXBlPnN0ZGNhbGw8L3R5cGU+CisgICAgICAgICAgKDxjb21tYW5kPmdjYzwvY29tbWFuZD4gZG9lcyksIFdpbmUgY2FuIHJlc29sdmUgaW1wb3J0cyBpbnRvCisgICAgICAgICAgV2luMzIgY29kZSBieSBzdWJzdGl0dXRpbmcgdGhlIGFkZHJlc3NlcyBvZiB0aGUgV2luZQorICAgICAgICAgIGhhbmRsZXJzIGRpcmVjdGx5IHdpdGhvdXQgYW55IHRodW5raW5nIGxheWVyIGluIGJldHdlZW4uCisgICAgICAgICAgVGhpcyBlbGltaW5hdGVzIHRoZSBvdmVyaGVhZCBtb3N0IHBlb3BsZSBhc3NvY2lhdGUgd2l0aAorICAgICAgICAgICJlbXVsYXRpb24iLCBhbmQgaXMgd2hhdCB0aGUgYXBwbGljYXRpb25zIGV4cGVjdCBhbnl3YXkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHVzZXIgc3BlY2lmaWVkIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZworICAgICAgICAgICAgK3JlbGF5PC9wYXJhbWV0ZXI+LCBhIHRodW5rIGxheWVyIGlzIGluc2VydGVkIGJldHdlZW4gdGhlCisgICAgICAgICAgYXBwbGljYXRpb24gaW1wb3J0cyBhbmQgdGhlIFdpbmUgaGFuZGxlcnM7IHRoaXMgbGF5ZXIgaXMKKyAgICAgICAgICBrbm93biBhcyAicmVsYXkiIGJlY2F1c2UgYWxsIGl0IGRvZXMgaXMgcHJpbnQgb3V0IHRoZQorICAgICAgICAgIGFyZ3VtZW50cy9yZXR1cm4gdmFsdWVzIChieSB1c2luZyB0aGUgYXJndW1lbnQgbGlzdHMgaW4gdGhlCisgICAgICAgICAgRExMIGRlc2NyaXB0b3IncyBlbnRyeSBwb2ludCB0YWJsZSksIHRoZW4gcGFzcyB0aGUgY2FsbCBvbiwKKyAgICAgICAgICBidXQgaXQncyBpbnZhbHVhYmxlIGZvciBkZWJ1Z2dpbmcgbWlzYmVoYXZpbmcgY2FsbHMgaW50bworICAgICAgICAgIFdpbmUgY29kZS4gQSBzaW1pbGFyIG1lY2hhbmlzbSBhbHNvIGV4aXN0cyBiZXR3ZWVuIFdpbmRvd3MKKyAgICAgICAgICBETExzIC0gV2luZSBjYW4gb3B0aW9uYWxseSBpbnNlcnQgdGh1bmsgbGF5ZXJzIGJldHdlZW4gdGhlbSwKKyAgICAgICAgICBieSB1c2luZyA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3Nub29wPC9wYXJhbWV0ZXI+LCBidXQgc2luY2UKKyAgICAgICAgICBubyBETEwgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiBleGlzdHMgZm9yIG5vbi1XaW5lIERMTHMsIHRoaXMKKyAgICAgICAgICBpcyBsZXNzIHJlbGlhYmxlIGFuZCBtYXkgbGVhZCB0byBjcmFzaGVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciBXaW4xNiBjb2RlLCB0aGVyZSBpcyBubyB3YXkgYXJvdW5kIHRodW5raW5nIC0gV2luZSBuZWVkcworICAgICAgICAgIHRvIHJlbGF5IGJldHdlZW4gMTYtYml0IGFuZCAzMi1iaXQgY29kZS4gVGhlc2UgdGh1bmtzIHN3aXRjaAorICAgICAgICAgIGJldHdlZW4gdGhlIGFwcCdzIDE2LWJpdCBzdGFjayBhbmQgV2luZSdzIDMyLWJpdCBzdGFjaywKKyAgICAgICAgICBjb3BpZXMgYW5kIGNvbnZlcnRzIGFyZ3VtZW50cyBhcyBhcHByb3ByaWF0ZSwgYW5kIGhhbmRsZXMKKyAgICAgICAgICB0aGUgV2luMTYgbXV0ZXguIFN1ZmZpY2UgdG8gc2F5IHRoYXQgdGhlIGtpbmQgb2YgaW50cmljYXRlCisgICAgICAgICAgc3RhY2sgY29udGVudCBqdWdnbGluZyB0aGlzIHJlc3VsdHMgaW4sIGlzIG5vdCBleGFjdGx5CisgICAgICAgICAgc3VpdGFibGUgc3R1ZHkgbWF0ZXJpYWwgZm9yIGJlZ2lubmVycy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Q29yZSBhbmQgbm9uLWNvcmUgRExMczwvdGl0bGU+CisKKzwhLS0gRklYTUU6IFNob3VsZCBkbyB0aGlzIHdpdGhvdXQgdGhlIC5qcGcgKEFKKQorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIHNsaWRlIChieSBNYXJjdXMgTWVpc3NuZXIgb2YgQ2FsZGVyYSBTeXN0ZW1zLCBzaG93biBhdAorICAgICAgICAgIHRoZSBDb21kZXggOTkpIHNob3dzIGhvdyBXaW5lIGlzIG1lYW50IHRvIGZpdCBpbnRvIHRoZQorICAgICAgICAgIFdpbmRvd3MgRExMIG1vZGVsLgorICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJhcmNoLWxheW91dC5qcGciIGZvcm1hdD0ianBnIj4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgPC9wYXJhPgorRklYTUUgLS0+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2luZSBtdXN0IGF0IGxlYXN0IGNvbXBsZXRlbHkgcmVwbGFjZSB0aGUgIkJpZyBUaHJlZSIgRExMcworICAgICAgICAgIChLRVJORUwvS0VSTkVMMzIsIEdESS9HREkzMiwgYW5kIFVTRVIvVVNFUjMyKSwgd2hpY2ggYWxsCisgICAgICAgICAgb3RoZXIgRExMcyBhcmUgbGF5ZXJlZCBvbiB0b3Agb2YuIEJ1dCBzaW5jZSBXaW5lIGlzIChmb3IKKyAgICAgICAgICB2YXJpb3VzIHJlYXNvbnMpIGxlYW5pbmcgdG93YXJkcyB0aGUgTlQgd2F5IG9mIGltcGxlbWVudGluZworICAgICAgICAgIHRoaW5ncywgdGhlIE5URExMIGlzIGFub3RoZXIgY29yZSBETEwgdG8gYmUgaW1wbGVtZW50ZWQgaW4KKyAgICAgICAgICBXaW5lLCBhbmQgbWFueSBLRVJORUwzMiBhbmQgQURWQVBJMzIgZmVhdHVyZXMgd2lsbCBiZQorICAgICAgICAgIGltcGxlbWVudGVkIHRocm91Z2ggdGhlIE5URExMLiBUaGUgd2luZXNlcnZlciBhbmQgdGhlCisgICAgICAgICAgc2VydmljZSB0aHJlYWQgcHJvdmlkZSB0aGUgYmFja2JvbmUgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgIG9mIHRoZXNlIGNvcmUgRExMcywgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIFgxMSBkcml2ZXIKKyAgICAgICAgICAod2hpY2ggcHJvdmlkZXMgR0RJL0dESTMyIGFuZCBVU0VSL1VTRVIzMiBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgYWxvbmcgd2l0aCB0aGUgV2luZG93cyBzdGFuZGFyZCBjb250cm9scykuIEFsbCBub24tY29yZQorICAgICAgICAgIERMTHMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgZXhwZWN0ZWQgdG8gb25seSB1c2Ugcm91dGluZXMKKyAgICAgICAgICBleHBvcnRlZCBieSBvdGhlciBETExzIChhbmQgbm9uZSBvZiB0aGVzZSBiYWNrYm9uZSBzZXJ2aWNlcworICAgICAgICAgIGRpcmVjdGx5KSwgdG8ga2VlcCB0aGUgY29kZSBiYXNlIGFzIHRpZHkgYXMgcG9zc2libGUuIEFuCisgICAgICAgICAgZXhhbXBsZSBvZiB0aGlzIGlzIENPTUNUTDMyIChDb21tb24gQ29udHJvbHMpLCB3aGljaCBzaG91bGQKKyAgICAgICAgICBvbmx5IHVzZSBzdGFuZGFyZCBHREkzMi0gYW5kIFVTRVIzMi1leHBvcnRlZCByb3V0aW5lcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJtb2R1bGUtb3ZlcnZpZXciPgorICAgICAgPHRpdGxlPk1vZHVsZSBPdmVydmlldzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ICg/Pz8pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vaW50ZXJuYWxzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPktFUk5FTCBNb2R1bGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPk5lZWRzIHNvbWUgY29udGVudC4uLjwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkdESSBNb2R1bGU8L3RpdGxlPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+WCBXaW5kb3dzIFN5c3RlbSBpbnRlcmZhY2U8L3RpdGxlPgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWCBsaWJyYXJpZXMgdXNlZCB0byBpbXBsZW1lbnQgWCBjbGllbnRzIChzdWNoIGFzIFdpbmUpCisgICAgICAgICAgICBkbyBub3Qgd29yayBwcm9wZXJseSBpZiBtdWx0aXBsZSB0aHJlYWRzIGFjY2VzcyB0aGUgc2FtZQorICAgICAgICAgICAgZGlzcGxheSBjb25jdXJyZW50bHkuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgdGhlIFgKKyAgICAgICAgICAgIGxpYnJhcmllcyB0byBwZXJmb3JtIHRoZWlyIG93biBzeW5jaHJvbml6YXRpb24gKGluaXRpYXRlZAorICAgICAgICAgICAgYnkgY2FsbGluZyA8ZnVuY3Rpb24+WEluaXRUaHJlYWRzKCk8L2Z1bmN0aW9uPikuIEhvd2V2ZXIsCisgICAgICAgICAgICBXaW5lIGRvZXMgbm90IHVzZSB0aGlzIGFwcHJvYWNoLiBJbnN0ZWFkIFdpbmUgcGVyZm9ybXMgaXRzCisgICAgICAgICAgICBvd24gc3luY2hyb25pemF0aW9uIGJ5IHB1dHRpbmcgYSB3cmFwcGVyIGFyb3VuZCBldmVyeSBYCisgICAgICAgICAgICBjYWxsIHRoYXQgaXMgdXNlZC4gVGhpcyB3cmFwcGVyIHByb3RlY3RzIGxpYnJhcnkgYWNjZXNzCisgICAgICAgICAgICB3aXRoIGEgY3JpdGljYWwgc2VjdGlvbiwgYW5kIGFsc28gYXJyYW5nZXMgdGhpbmdzIHNvIHRoYXQKKyAgICAgICAgICAgIFggbGlicmFyaWVzIGNvbXBpbGVkIHdpdGhvdXQgPG9wdGlvbj4tRF9SRUVOVFJBTlQ8L29wdGlvbj4KKyAgICAgICAgICAgIChlZy4gd2l0aCBnbG9iYWwgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlKSB3aWxsCisgICAgICAgICAgICB3b3JrIHdpdGggV2luZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtYWtlIHRoaXMgc2NoZW1lIHdvcmssIGFsbCBjYWxscyB0byBYIG11c3QgdXNlIHRoZQorICAgICAgICAgICAgcHJvcGVyIHdyYXBwZXIgZnVuY3Rpb25zIChvciBkbyB0aGVpciBvd24gc3luY2hyb25pemF0aW9uCisgICAgICAgICAgICB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd3JhcHBlcnMpLiBUaGUgd3JhcHBlciBmb3IgYQorICAgICAgICAgICAgZnVuY3Rpb24gPGZ1bmN0aW9uPlguLi4oKTwvZnVuY3Rpb24+IGlzIGNhbGxlcworICAgICAgICAgICAgPGZ1bmN0aW9uPlRTWC4uLigpPC9mdW5jdGlvbj4gKGZvciAiVGhyZWFkIFNhZmUgWCAuLi4iKS4KKyAgICAgICAgICAgIFNvIGZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAgICAgICAgICAgIDxmdW5jdGlvbj5YT3BlbkRpc3BsYXkoKTwvZnVuY3Rpb24+IGluIHRoZSBjb2RlLAorICAgICAgICAgICAgPGZ1bmN0aW9uPlRTWE9wZW5EaXNwbGF5KCk8L2Z1bmN0aW9uPiBtdXN0IGJlIHVzZWQuCisgICAgICAgICAgICBMaWtld2lzZSwgWCBoZWFkZXIgZmlsZXMgdGhhdCBjb250YWluIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgICAgICAgIGFyZSB3cmFwcGVkLCBzbyB0aGF0IGVnLiA8ZmlsZW5hbWU+InRzX3h1dGlsLmgiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT4mbHQ7WDExL1h1dGlsLmgmZ3Q7PC9maWxlbmFtZT4uIEl0IGlzIGltcG9ydGFudAorICAgICAgICAgICAgdGhhdCB0aGlzIHNjaGVtZSBpcyB1c2VkIGV2ZXJ5d2hlcmUgdG8gYXZvaWQgdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2Ygbm9uZGV0ZXJtaW5pc3RpYyBhbmQgaGFyZC10by1maW5kIGVycm9ycworICAgICAgICAgICAgaW4gV2luZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgY29kZSBmb3IgdGhlIHRocmVhZCBzYWZlIFggd3JhcHBlcnMgaXMgY29udGFpbmVkIGluCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnRzeDExLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlL3RzKi5oPC9maWxlbmFtZT4uIFRvIHVzZSBhIG5ldyAoaWUuIG5vdAorICAgICAgICAgICAgcHJldmlvdXNseSB1c2VkKSBYIGZ1bmN0aW9uIGluIFdpbmUsIGEgbmV3IHdyYXBwZXIgbXVzdCBiZQorICAgICAgICAgICAgY3JlYXRlZC4gVGhlIHdyYXBwZXJzIGFyZSBnZW5lcmF0ZWQgKHNlbWktKWF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGZyb20gdGhlIFgxMVI2IGluY2x1ZGVzIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRvb2xzL21ha2VfWDExd3JhcHBlcnM8L2ZpbGVuYW1lPiBwZXJsIHNjcmlwdC4KKyAgICAgICAgICAgIEluIHNpbXBsZSBjYXNlcyBpdCBzaG91bGQgYmUgZW5vdWdoIHRvIGFkZCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgIG5ldyBmdW5jdGlvbiB0byB0aGUgbGlzdCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPnRzeDExL1gxMV9jYWxsczwvZmlsZW5hbWU+OyBpZiB0aGlzIGRvZXMgbm90CisgICAgICAgICAgICB3b3JrIHRoZSB3cmFwcGVyIG11c3QgYmUgYWRkZWQgbWFudWFsbHkgdG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZV9YMTF3cmFwcGVyczwvZmlsZW5hbWU+IHNjcmlwdC4gU2VlIGNvbW1lbnRzCisgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+dHN4MTEvWDExX2NhbGxzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG9vbHMvbWFrZV9YMTF3cmFwcGVyczwvZmlsZW5hbWU+IGZvciBmdXJ0aGVyCisgICAgICAgICAgICBkZXRhaWxzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0Mz4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlVTRVIgTW9kdWxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBVU0VSIGltcGxlbWVudHMgd2luZG93aW5nIGFuZCBtZXNzYWdpbmcgc3Vic3lzdGVtcy4gSXQgYWxzbworICAgICAgICAgIGNvbnRhaW5zIGNvZGUgZm9yIGNvbW1vbiBjb250cm9scyBhbmQgZm9yIG90aGVyCisgICAgICAgICAgbWlzY2VsbGFuZW91cyAgc3R1ZmYgKHJlY3RhbmdsZXMsIGNsaXBib2FyZCwgV05ldCwgZXRjKS4KKyAgICAgICAgICBXaW5lIFVTRVIgY29kZSBpcyAgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+d2luZG93cy88L2ZpbGVuYW1lPiwKKyAgICAgICAgICA8ZmlsZW5hbWU+Y29udHJvbHMvPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgIDxmaWxlbmFtZT5taXNjLzwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5XaW5kb3dpbmcgc3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT53aW5kb3dzL3dpbi5jPC9maWxlbmFtZT48L3BhcmE+CisgICAgICAgICAgPHBhcmE+PGZpbGVuYW1lPndpbmRvd3Mvd2lucG9zLmM8L2ZpbGVuYW1lPjwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdpbmRvd3MgYXJlIGFycmFuZ2VkIGludG8gcGFyZW50L2NoaWxkIGhpZXJhcmNoeSB3aXRoIG9uZQorICAgICAgICAgICAgY29tbW9uIGFuY2VzdG9yIGZvciBhbGwgd2luZG93cyAoZGVza3RvcCB3aW5kb3cpLiBFYWNoCisgICAgICAgICAgICB3aW5kb3cgc3RydWN0dXJlIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgaW1tZWRpYXRlCisgICAgICAgICAgICBhbmNlc3RvciAocGFyZW50IHdpbmRvdyBpZiA8Y29uc3RhbnQ+V1NfQ0hJTEQ8L2NvbnN0YW50PgorICAgICAgICAgICAgc3R5bGUgYml0IGlzIHNldCksIGEgcG9pbnRlciB0byB0aGUgc2libGluZyAocmV0dXJuZWQgYnkKKyAgICAgICAgICAgIDxmdW5jdGlvbj5HZXRXaW5kb3coLi4uLCBHV19ORVhUKTwvZnVuY3Rpb24+KSwgYSBwb2ludGVyCisgICAgICAgICAgICB0byB0aGUgb3duZXIgIHdpbmRvdyAoc2V0IG9ubHkgZm9yIHBvcHVwIHdpbmRvdyBpZiBpdCB3YXMKKyAgICAgICAgICAgIGNyZWF0ZWQgd2l0aCB2YWxpZCAgPHZhcm5hbWU+aHduZFBhcmVudDwvdmFybmFtZT4KKyAgICAgICAgICAgIHBhcmFtZXRlciksIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoaWxkIHdpbmRvdworICAgICAgICAgICAgKDxmdW5jdGlvbj5HZXRXaW5kb3coLi4sIEdXX0NISUxEKTwvZnVuY3Rpb24+KS4gQWxsIHBvcHVwCisgICAgICAgICAgICBhbmQgbm9uLWNoaWxkIHdpbmRvd3MgYXJlIHRoZXJlZm9yZSBwbGFjZWQgaW4gdGhlIGZpcnN0CisgICAgICAgICAgICBsZXZlbCBvZiB0aGlzIGhpZXJhcmNoeSBhbmQgdGhlaXIgYW5jZXN0b3IgbGluaworICAgICAgICAgICAgKDx2YXJuYW1lPnduZC0mZ3Q7cGFyZW50PC92YXJuYW1lPikgcG9pbnRzIHRvIHRoZSBkZXNrdG9wCisgICAgICAgICAgICB3aW5kb3cuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxzY3JlZW4+CisgICBEZXNrdG9wIHdpbmRvdwkJCS0gcm9vdCB3aW5kb3cKKyAgICB8ICAgICBcICAgICAgYC0uCisgICAgfCAgICAgIFwgICAgICAgIGAtLgorICAgcG9wdXAgLSZndDsgd25kMSAgLSZndDsgIHduZDIJCS0gdG9wIGxldmVsIHdpbmRvd3MgICAgCisgICAgfCAgICAgICBcICAgYC0uICAgICAgYC0uCisgICAgfCAgICAgICAgXCAgICAgYC0uICAgICAgYC0uCisgICBjaGlsZDEgIGNoaWxkMiAtJmd0OyBjaGlsZDMgIGNoaWxkNCAgICAgLSBjaGlsZCB3aW5kb3dzCisgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIb3Jpem9udGFsIGFycm93cyBkZW5vdGUgc2libGluZyByZWxhdGlvbnNoaXAsIHZlcnRpY2FsCisgICAgICAgICAgICBsaW5lcyAtIGFuY2VzdG9yL2NoaWxkLiBUbyBzdW1tYXJpemUsIGFsbCB3aW5kb3dzIHdpdGggdGhlCisgICAgICAgICAgICBzYW1lIGltbWVkaWF0ZSBhbmNlc3RvciBhcmUgc2libGluZyB3aW5kb3dzLCBhbGwgd2luZG93cworICAgICAgICAgICAgd2hpY2ggZG8gbm90IGhhdmUgZGVza3RvcCBhcyB0aGVpciBpbW1lZGlhdGUgYW5jZXN0b3IgYXJlCisgICAgICAgICAgICBjaGlsZCB3aW5kb3dzLiBQb3B1cCB3aW5kb3dzIGJlaGF2ZSBhcyB0b3Btb3N0IHRvcC1sZXZlbAorICAgICAgICAgICAgd2luZG93cyB1bmxlc3MgdGhleSBhcmUgb3duZWQuIEluIHRoaXMgY2FzZSB0aGUgb25seQorICAgICAgICAgICAgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGV5IG11c3QgcHJlY2VkZSB0aGVpciBvd25lcnMgaW4gdGhlCisgICAgICAgICAgICB0b3AtbGV2ZWwgc2libGluZyBsaXN0ICh0aGV5IGFyZSBub3QgdG9wbW9zdCkuIENoaWxkCisgICAgICAgICAgICB3aW5kb3dzIGFyZSBjb25maW5lZCB0byB0aGUgY2xpZW50IGFyZWEgb2YgdGhlaXIgcGFyZW50CisgICAgICAgICAgICB3aW5kb3dzIChjbGllbnQgYXJlYSBpcyB3aGVyZSB3aW5kb3cgZ2V0cyB0byBkbyBpdHMgb3duCisgICAgICAgICAgICBkcmF3aW5nLCBub24tY2xpZW50IGFyZWEgY29uc2lzdHMgb2YgY2FwdGlvbiwgbWVudSwKKyAgICAgICAgICAgIGJvcmRlcnMsIGludHJpbnNpYyBzY3JvbGxiYXJzLCBhbmQKKyAgICAgICAgICAgIG1pbmltaXplL21heGltaXplL2Nsb3NlL2hlbHAgYnV0dG9ucykuIAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIgZmFpcmx5IGltcG9ydGFudCBjb25jZXB0IGlzCisgICAgICAgICAgICA8Zmlyc3R0ZXJtPnotb3JkZXI8L2ZpcnN0dGVybT4uIEl0IGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgIGFuY2VzdG9yL2NoaWxkIGhpZXJhcmNoeSBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICJhYm92ZS9iZWxvdyIgcmVsYXRpb25zaGlwLiBGb3IgaW5zdGFuY2UsIGluIHRoZSBleGFtcGxlCisgICAgICAgICAgICBhYm92ZSwgei1vcmRlciBpcworICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8c2NyZWVuPgorY2hpbGQxLSZndDtwb3B1cC0mZ3Q7Y2hpbGQyLSZndDtjaGlsZDMtJmd0O3duZDEtJmd0O2NoaWxkNC0mZ3Q7d25kMi0mZ3Q7ZGVza3RvcC4KKyAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEN1cnJlbnQgIGFjdGl2ZSB3aW5kb3cgKCJmb3JlZ3JvdW5kIHdpbmRvdyIgaW4gV2luMzIpIGlzCisgICAgICAgICAgICBtb3ZlZCB0byB0aGUgZnJvbnQgb2Ygei1vcmRlciB1bmxlc3MgaXRzIHRvcC1sZXZlbAorICAgICAgICAgICAgYW5jZXN0b3Igb3ducyBwb3B1cCB3aW5kb3dzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsbCB0aGVzZSBpc3N1ZXMgYXJlIGRlYWx0IHdpdGggKG9yIHN1cHBvc2VkIHRvIGJlKSBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPndpbmRvd3Mvd2lucG9zLmM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICA8ZnVuY3Rpb24+U2V0V2luZG93UG9zKCk8L2Z1bmN0aW9uPiBiZWluZyB0aGUgcHJpbWFyeQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHRoZSB3aW5kb3cgbWFuYWdlci4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaW5lIHNwZWNpZmljczogaW4gZGVmYXVsdCBhbmQgbWFuYWdlZCBtb2RlIGVhY2ggdG9wLWxldmVsCisgICAgICAgICAgICB3aW5kb3cgZ2V0cyBpdHMgb3duIFggY291bnRlcnBhcnQgd2l0aCBkZXNrdG9wIHdpbmRvdworICAgICAgICAgICAgYmVpbmcgYmFzaWNhbGx5IGEgZmFrZSBzdHViLiBJbiBkZXNrdG9wIG1vZGUsIGhvd2V2ZXIsCisgICAgICAgICAgICBvbmx5IGRlc2t0b3Agd2luZG93IGhhcyBhbiBYIHdpbmRvdyBhc3NvY2lhdGVkIHdpdGggaXQuCisgICAgICAgICAgICBBbHNvLCA8ZnVuY3Rpb24+U2V0V2luZG93UG9zKCk8L2Z1bmN0aW9uPiBzaG91bGQKKyAgICAgICAgICAgIGV2ZW50dWFsbHkgYmUgaW1wbGVtZW50ZWQgdmlhCisgICAgICAgICAgICA8ZnVuY3Rpb24+QmVnaW4vRW5kL0RlZmVyV2luZG93UG9zKCk8L2Z1bmN0aW9uPiBjYWxscyBhbmQKKyAgICAgICAgICAgIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICA8c2VjdDQ+CisgICAgICAgICAgICA8dGl0bGU+VmlzaWJsZSByZWdpb24sIGNsaXBwaW5nIHJlZ2lvbiBhbmQgdXBkYXRlIHJlZ2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT53aW5kb3dzL2RjZS5jPC9maWxlbmFtZT48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZmlsZW5hbWU+d2luZG93cy93aW5wb3MuYzwvZmlsZW5hbWU+PC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZpbGVuYW1lPndpbmRvd3MvcGFpbnRpbmcuYzwvZmlsZW5hbWU+PC9wYXJhPgorCisgICAgICAgICAgICA8c2NyZWVuPgorICAgIF9fX19fX19fX19fX19fX19fX19fX19fXworICAgfF9fX19fX19fXyAgICAgICAgICAgICAgIHwgIEEgYW5kIEIgYXJlIGNoaWxkIHdpbmRvd3Mgb2YgQworICAgfCAgICBBICAgIHxfX19fX18gICAgICAgIHwgCisgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgfAorICAgfC0tLS0tLS0tLScgICAgICB8ICAgICAgIHwKKyAgIHwgICB8ICAgICAgQiAgICAgfCAgICAgICB8CisgICB8ICAgfCAgICAgICAgICAgIHwgICAgICAgfAorICAgfCAgIGAtLS0tLS0tLS0tLS0nICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgQyAgICB8CisgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJworICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVmlzaWJsZSByZWdpb24gZGV0ZXJtaW5lcyB3aGljaCBwYXJ0IG9mIHRoZSB3aW5kb3cgaXMKKyAgICAgICAgICAgICAgbm90IG9ic2N1cmVkIGJ5IG90aGVyIHdpbmRvd3MuIElmIGEgd2luZG93IGhhcyB0aGUKKyAgICAgICAgICAgICAgPGNvbnN0YW50PldTX0NMSVBDSElMRFJFTjwvY29uc3RhbnQ+IHN0eWxlIHRoZW4gYWxsCisgICAgICAgICAgICAgIGFyZWFzIGJlbG93IGl0cyBjaGlsZHJlbiBhcmUgY29uc2lkZXJlZCBpbnZpc2libGUuCisgICAgICAgICAgICAgIFNpbWlsYXJpbHksIGlmIHRoZSA8Y29uc3RhbnQ+V1NfQ0xJUFNJQkxJTkdTPC9jb25zdGFudD4KKyAgICAgICAgICAgICAgYml0IGlzIGluIGVmZmVjdCB0aGVuIGFsbCBhcmVhcyBvYnNjdXJlZCBieSBpdHMgc2libGluZ3MKKyAgICAgICAgICAgICAgYXJlIGludmlzaWJsZS4gQ2hpbGQgd2luZG93cyBhcmUgYWx3YXlzIGNsaXBwZWQgYnkgdGhlCisgICAgICAgICAgICAgIGJvdW5kYXJpZXMgb2YgdGhlaXIgcGFyZW50IHdpbmRvd3MuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQiBoYXMgYSA8Y29uc3RhbnQ+V1NfQ0xJUFNJQkxJTkdTPC9jb25zdGFudD4gc3R5bGU6CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8c2NyZWVuPgorICAgLiAgICAgICAgICBfX19fX18gCisgICA6ICAgICAgICAgfCAgICAgIHwKKyAgIHwgICAsLS0tLS0nICAgICAgfAorICAgfCAgIHwgICAgICBCICAgICB8IC0gdmlzaWJsZSByZWdpb24gb2YgQgorICAgfCAgIHwgICAgICAgICAgICB8CisgICA6ICAgYC0tLS0tLS0tLS0tLScKKyAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFdoZW4gdGhlIHByb2dyYW0gcmVxdWVzdHMgYSA8Zmlyc3R0ZXJtPmRpc3BsYXkKKyAgICAgICAgICAgICAgICBjb250ZXh0PC9maXJzdHRlcm0+IChEQykgZm9yIGEgd2luZG93IGl0ICBjYW4gc3BlY2lmeQorICAgICAgICAgICAgICBhbiBvcHRpb25hbCBjbGlwcGluZyByZWdpb24gdGhhdCBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUKKyAgICAgICAgICAgICAgYXJlYSB3aGVyZSB0aGUgZ3JhcGhpY3Mgb3V0cHV0IGNhbiBhcHBlYXIuIFRoaXMgYXJlYSBpcworICAgICAgICAgICAgICBjYWxjdWxhdGVkIGFzIGFuIGludGVyc2VjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWdpb24gYW5kCisgICAgICAgICAgICAgIGEgY2xpcHBpbmcgcmVnaW9uLiAKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBQcm9ncmFtIGFza2VkIGZvciBhIERDIHdpdGggYSBjbGlwcGluZyByZWdpb246CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8c2NyZWVuPgorICAgICAgICAgIF9fX19fXworICAgICAgLC0tfC0tLiAgIHwgICAgIC4gICAgLC0tLiAKKyAgICwtLSstLScgIHwgICB8ICAgICA6ICAgXzogIHwKKyAgIHwgIHwgICBCIHwgICB8ICA9Jmd0OyB8ICB8ICAgIHwgLSBEQyByZWdpb24gd2hlcmUgdGhlIHBhaW50aW5nIHdpbGwKKyAgIHwgIHwgICAgIHwgICB8ICAgICB8ICB8ICAgIHwgICBiZSB2aXNpYmxlCisgICBgLS18LS0tLS18LS0tJyAgICAgOiAgYC0tLS0nCisgICAgICBgLS0tLS0nCisgICAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBXaGVuIHRoZSB3aW5kb3cgbWFuYWdlciBkZXRlY3RzIHRoYXQgc29tZSBwYXJ0IG9mIHRoZSB3aW5kb3cKKyAgICAgICAgICAgICAgYmVjYW1lIHZpc2libGUgaXQgYWRkcyB0aGlzIGFyZWEgdG8gdGhlIHVwZGF0ZSByZWdpb24gb2YgdGhpcworICAgICAgICAgICAgICB3aW5kb3cgYW5kIHRoZW4gZ2VuZXJhdGVzIDxjb25zdGFudD5XTV9FUkFTRUJLR05EPC9jb25zdGFudD4gYW5kCisgICAgICAgICAgICAgIDxjb25zdGFudD5XTV9QQUlOVDwvY29uc3RhbnQ+IG1lc3NhZ2VzLiAgSW4gYWRkaXRpb24sCisgICAgICAgICAgICAgIDxjb25zdGFudD5XTV9OQ1BBSU5UPC9jb25zdGFudD4gbWVzc2FnZSBpcyBzZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgIHVuY292ZXJlZCBhcmVhICBpbnRlcnNlY3RzIGEgbm9uY2xpZW50IHBhcnQgb2YgdGhlIHdpbmRvdy4KKyAgICAgICAgICAgICAgQXBwbGljYXRpb24gbXVzdCByZXBseSB0byB0aGUgPGNvbnN0YW50PldNX1BBSU5UPC9jb25zdGFudD4KKyAgICAgICAgICAgICAgbWVzc2FnZSBieSBjYWxsaW5nIHRoZQorICAgICAgICAgICAgICA8ZnVuY3Rpb24+QmVnaW5QYWludCgpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPkVuZFBhaW50KCk8L2Z1bmN0aW9uPgorICAgICAgICAgICAgICBwYWlyIG9mIGZ1bmN0aW9ucy4gPGZ1bmN0aW9uPkJlZ2luUGFpbnQoKTwvZnVuY3Rpb24+IHJldHVybnMgYSBEQworICAgICAgICAgICAgICB0aGF0IHVzZXMgYWNjdW11bGF0ZWQgdXBkYXRlIHJlZ2lvbiBhcyBhIGNsaXBwaW5nIHJlZ2lvbi4gVGhpcworICAgICAgICAgICAgICBvcGVyYXRpb24gY2xlYW5zIHVwIGludmFsaWRhdGVkIGFyZWEgYW5kIHRoZSB3aW5kb3cgd2lsbCBub3QKKyAgICAgICAgICAgICAgcmVjZWl2ZSBhbm90aGVyIDxjb25zdGFudD5XTV9QQUlOVDwvY29uc3RhbnQ+IHVudGlsIHRoZSB3aW5kb3cKKyAgICAgICAgICAgICAgbWFuYWdlciBjcmVhdGVzIGEgbmV3IHVwZGF0ZSByZWdpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQSB3YXMgbW92ZWQgdG8gdGhlIGxlZnQ6CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8c2NyZWVuPgorICAgIF9fX19fX19fX19fX19fX19fX19fX19fXyAgICAgICAuLi4gICAgICAgICAgLyBDIHVwZGF0ZSByZWdpb24KKyAgIHxfX19fX18gICAgICAgICAgICAgICAgICB8ICAgICA6ICAgICAgLl9fXyAvCisgICB8IEEgICAgfF9fX19fX19fXyAgICAgICAgfCAgPSZndDsgfCAgIC4uLnxfX198Li4KKyAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICB8ICAgICB8ICAgOiAgfCAgIHwKKyAgIHwtLS0tLS0nICAgICAgICAgfCAgICAgICB8ICAgICB8ICAgOiAgJy0tLScgCisgICB8ICAgfCAgICAgIEIgICAgIHwgICAgICAgfCAgICAgfCAgIDogICAgICBcCisgICB8ICAgfCAgICAgICAgICAgIHwgICAgICAgfCAgICAgOiAgICAgICAgICAgIFwKKyAgIHwgICBgLS0tLS0tLS0tLS0tJyAgICAgICB8ICAgICAgICAgICAgICAgICAgICBCIHVwZGF0ZSByZWdpb24KKyAgIHwgICAgICAgICAgICAgICAgICAgQyAgICB8CisgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJworICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgV2luZG93cyBtYWludGFpbnMgYSBkaXNwbGF5IGNvbnRleHQgY2FjaGUgY29uc2lzdGluZyBvZgorICAgICAgICAgICAgICBlbnRyaWVzIHRoYXQgaW5jbHVkZSB0aGUgREMgaXRzZWxmLCB0aGUgd2luZG93IHRvIHdoaWNoCisgICAgICAgICAgICAgIGl0IGJlbG9uZ3MsIGFuZCBhbiBvcHRpb25hbCBjbGlwcGluZyByZWdpb24gKHZpc2libGUKKyAgICAgICAgICAgICAgcmVnaW9uIGlzIHN0b3JlZCBpbiB0aGUgREMgaXRzZWxmKS4gV2hlbiBhbiBBUEkgY2FsbAorICAgICAgICAgICAgICBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93IHRyZWUsIHdpbmRvdyBtYW5hZ2VyIGhhcworICAgICAgICAgICAgICB0byBnbyB0aHJvdWdoIHRoZSBEQyBjYWNoZSB0byByZWNhbGN1bGF0ZSB2aXNpYmxlCisgICAgICAgICAgICAgIHJlZ2lvbnMgZm9yIGVudHJpZXMgd2hvc2Ugd2luZG93cyB3ZXJlIGludm9sdmVkIGluIHRoZQorICAgICAgICAgICAgICBvcGVyYXRpb24uIERDIGVudHJpZXMgKERDRSkgY2FuIGJlIGVpdGhlciBwcml2YXRlIHRvIHRoZQorICAgICAgICAgICAgICB3aW5kb3csIG9yIHByaXZhdGUgdG8gdGhlIHdpbmRvdyBjbGFzcywgb3Igc2hhcmVkCisgICAgICAgICAgICAgIGJldHdlZW4gYWxsIHdpbmRvd3MgKFdpbmRvd3MgMy4xIGxpbWl0cyB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgIHNoYXJlZCBEQ0VzIHRvIDUpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvc2VjdDQ+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5NZXNzYWdpbmcgc3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT53aW5kb3dzL3F1ZXVlLmM8L2ZpbGVuYW1lPjwvcGFyYT4KKyAgICAgICAgICA8cGFyYT48ZmlsZW5hbWU+d2luZG93cy9tZXNzYWdlLmM8L2ZpbGVuYW1lPjwvcGFyYT4KKworICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWFjaCBXaW5kb3dzIHRhc2svdGhyZWFkIGhhcyBpdHMgb3duIG1lc3NhZ2UgcXVldWUgLSB0aGlzCisgICAgICAgICAgICBpcyB3aGVyZSBpdCBnZXRzIG1lc3NhZ2VzIGZyb20uIE1lc3NhZ2VzIGNhbiBiZToKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgKDxjb25zdGFudD5XTV9QQUlOVDwvY29uc3RhbnQ+LAorICAgICAgICAgICAgICAgICAgPGNvbnN0YW50PldNX05DUEFJTlQ8L2NvbnN0YW50PiwKKyAgICAgICAgICAgICAgICAgIDxjb25zdGFudD5XTV9USU1FUjwvY29uc3RhbnQ+KQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSB0aGUgc3lzdGVtIChoYXJkd2FyZSBtZXNzYWdlcykKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIHBvc3RlZCBieSBvdGhlciB0YXNrcy90aHJlYWRzICg8ZnVuY3Rpb24+UG9zdE1lc3NhZ2U8L2Z1bmN0aW9uPikKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIHNlbnQgYnkgb3RoZXIgdGFza3MvdGhyZWFkcyAoPGZ1bmN0aW9uPlNlbmRNZXNzYWdlPC9mdW5jdGlvbj4pCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNZXNzYWdlIHByaW9yaXR5OgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpcnN0IHRoZSBzeXN0ZW0gbG9va3MgZm9yIHNlbnQgbWVzc2FnZXMsIHRoZW4gZm9yIHBvc3RlZAorICAgICAgICAgICAgbWVzc2FnZXMsIHRoZW4gZm9yIGhhcmR3YXJlIG1lc3NhZ2VzLCB0aGVuIGl0IGNoZWNrcyBpZgorICAgICAgICAgICAgdGhlIHF1ZXVlIGhhcyB0aGUgImRpcnR5IHdpbmRvdyIgYml0IHNldCwgYW5kLCBmaW5hbGx5LCBpdAorICAgICAgICAgICAgY2hlY2tzIGZvciBleHBpcmVkIHRpbWVycy4gU2VlCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy9tZXNzYWdlLmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGcm9tIGFsbCB0aGVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMsIG9ubHkgcG9zdGVkCisgICAgICAgICAgICBtZXNzYWdlcyBnbyBkaXJlY3RseSBpbnRvIHRoZSBwcml2YXRlIG1lc3NhZ2UgcXVldWUuCisgICAgICAgICAgICBTeXN0ZW0gbWVzc2FnZXMgKGV2ZW4gaW4gV2luOTUpIGFyZSBmaXJzdCBjb2xsZWN0ZWQgaW4gdGhlCisgICAgICAgICAgICBzeXN0ZW0gbWVzc2FnZSBxdWV1ZSBhbmQgdGhlbiB0aGV5IGVpdGhlciBzaXQgdGhlcmUgdW50aWwKKyAgICAgICAgICAgIDxmdW5jdGlvbj5HZXQvUGVla01lc3NhZ2U8L2Z1bmN0aW9uPiBnZXRzIHRvIHByb2Nlc3MgdGhlbQorICAgICAgICAgICAgb3IsIGFzIGluIFdpbjk1LCBpZiBzeXN0ZW0gcXVldWUgaXMgZ2V0dGluZyBjbG9iYmVyZWQsIGEKKyAgICAgICAgICAgIHNwZWNpYWwgdGhyZWFkICgicmF3IGlucHV0IHRocmVhZCIpIGFzc2lnbnMgdGhlbSB0byB0aGUKKyAgICAgICAgICAgIHByaXZhdGUgcXVldWVzLiBTZW50IG1lc3NhZ2VzIGFyZSBxdWV1ZWQgc2VwYXJhdGVseSBhbmQKKyAgICAgICAgICAgIHRoZSBzZW5kZXIgc2xlZXBzIHVudGlsIGl0IGdldHMgYSByZXBseS4gU3BlY2lhbCBtZXNzYWdlcworICAgICAgICAgICAgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5IGRlcGVuZGluZyBvbiB0aGUgd2luZG93L3F1ZXVlCisgICAgICAgICAgICBzdGF0ZS4gSWYgdGhlIHdpbmRvdyB1cGRhdGUgcmVnaW9uIGlzIG5vdCBlbXB0eSwgdGhlCisgICAgICAgICAgICBzeXN0ZW0gc2V0cyB0aGUgPGNvbnN0YW50PlFTX1BBSU5UPC9jb25zdGFudD4gYml0IGluIHRoZQorICAgICAgICAgICAgb3duaW5nIHF1ZXVlIGFuZCBldmVudHVhbGx5IHRoaXMgd2luZG93IHJlY2VpdmVzIGEKKyAgICAgICAgICAgIDxjb25zdGFudD5XTV9QQUlOVDwvY29uc3RhbnQ+IG1lc3NhZ2UKKyAgICAgICAgICAgICg8Y29uc3RhbnQ+V01fTkNQQUlOVDwvY29uc3RhbnQ+IHRvbyBpZiB0aGUgdXBkYXRlIHJlZ2lvbgorICAgICAgICAgICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBub24tY2xpZW50IGFyZWEpLiBBIHRpbWVyIGV2ZW50IGlzCisgICAgICAgICAgICByYWlzZWQgd2hlbiBvbmUgb2YgdGhlIHF1ZXVlIHRpbWVycyBleHBpcmUuIERlcGVuZGluZyBvbgorICAgICAgICAgICAgdGhlIHRpbWVyIHBhcmFtZXRlcnMgPGZ1bmN0aW9uPkRpc3BhdGNoTWVzc2FnZTwvZnVuY3Rpb24+CisgICAgICAgICAgICBlaXRoZXIgY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHRoZSB3aW5kb3cKKyAgICAgICAgICAgIHByb2NlZHVyZS4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIHBlbmRpbmcgdGhlCisgICAgICAgICAgICB0YXNrL3RocmVhZCBzbGVlcHMgdW50aWwgbWVzc2FnZXMgYXBwZWFyLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHRyaWNreSBtb21lbnRzIChvcGVuIGZvciBkaXNjdXNzaW9uKSAtIAorICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN5c3RlbSBtZXNzYWdlIG9yZGVyIGhhcyB0byBiZSBob25vcmVkIGFuZCBtZXNzYWdlcworICAgICAgICAgICAgICAgIHNob3VsZCBiZSBwcm9jZXNzZWQgd2l0aGluIGNvcnJlY3QgdGFzay90aHJlYWQKKyAgICAgICAgICAgICAgICBjb250ZXh0LiBUaGVyZWZvcmUgd2hlbiA8ZnVuY3Rpb24+R2V0L1BlZWtNZXNzYWdlPC9mdW5jdGlvbj4gZW5jb3VudGVycworICAgICAgICAgICAgICAgIHVuYXNzaWduZWQgc3lzdGVtIG1lc3NhZ2UgYW5kIHRoaXMgbWVzc2FnZSBhcHBlYXJzIG5vdAorICAgICAgICAgICAgICAgIHRvIGJlIGZvciB0aGUgY3VycmVudCB0YXNrL3RocmVhZCBpdCBzaG91bGQgZWl0aGVyCisgICAgICAgICAgICAgICAgc2tpcCBpdCAob3IgZ2V0IHJpZCBvZiBpdCBieSBtb3ZpbmcgaXQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBwcml2YXRlIG1lc3NhZ2UgcXVldWUgb2YgdGhlIHRhcmdldCB0YXNrL3RocmVhZCAtCisgICAgICAgICAgICAgICAgV2luOTUsIEFGQUlLKSBhbmQgbG9vayBmdXJ0aGVyIG9yIHJvbGwgYmFjayBhbmQgdGhlbgorICAgICAgICAgICAgICAgIHlpZWxkIHVudGlsIHRoaXMgbWVzc2FnZSBnZXRzIHByb2Nlc3NlZCB3aGVuIHN5c3RlbQorICAgICAgICAgICAgICAgIHN3aXRjaGVzIHRvIHRoZSBjb3JyZWN0IGNvbnRleHQgKFdpbjE2KS4gSW4gdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgY2FzZSB3ZSBsb3NlIGNvcnJlY3QgbWVzc2FnZSBvcmRlcmluZywgaW4gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgIGNhc2Ugd2UgaGF2ZSB0aGUgaW5mYW1vdXMgc3luY2hyb25vdXMgc3lzdGVtIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBxdWV1ZS4gSGVyZSBpcyBhIHBvc3QgdG8gb25lIG9mIHRoZSBPUy8yIG5ld3Nncm91cCBJCisgICAgICAgICAgICAgICAgZm91bmQgdG8gYmUgcmVsZXZhbnQ6CisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPGJsb2NrcXVvdGU+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0aW9uPmJ5IERhdmlkIENoYXJsYXA8L2F0dHJpYnV0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIiBIZXJlJ3MgdGhlIHByb2JsZW0gaW4gYSBudXRzaGVsbCwgYW5kIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgICBnb29kIHNvbHV0aW9uLiBFdmVyeSBwb3NzaWJsZSBzb2x1dGlvbiBjcmVhdGVzIGEKKyAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBwcm9ibGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIFdpdGggYSB3aW5kb3dpbmcgc3lzdGVtLCBldmVudHMgY2FuIGdvIHRvIG1hbnkKKyAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCB3aW5kb3dzLiBNb3N0IGFyZSBzZW50IGJ5IGFwcGxpY2F0aW9ucyBvcgorICAgICAgICAgICAgICAgICAgYnkgdGhlIE9TIHdoZW4gdGhpbmdzIHJlbGF0aW5nIHRvIHRoYXQgd2luZG93IGhhcHBlbgorICAgICAgICAgICAgICAgICAgKGxpa2UgcmVwYWludGluZywgdGltZXJzLCBldGMuKQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIE1vdXNlIGlucHV0IGV2ZW50cyBnbyB0byB0aGUgd2luZG93IHlvdSBjbGljayBvbgorICAgICAgICAgICAgICAgICAgKHVubGVzcyBzb21lIHdpbmRvdyBjYXB0dXJlcyB0aGUgbW91c2UpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIFNvIGZhciwgbm8gcHJvYmxlbS4gIFdoZW5ldmVyIGFuIGV2ZW50IGhhcHBlbnMsIHlvdQorICAgICAgICAgICAgICAgICAgcHV0IGEgbWVzc2FnZSBvbiB0aGUgdGFyZ2V0IHdpbmRvdydzIG1lc3NhZ2UgcXVldWUuCisgICAgICAgICAgICAgICAgICBFdmVyeSBwcm9jZXNzIGhhcyBhIG1lc3NhZ2UgcXVldWUuICBJZiB0aGUgcHJvY2VzcworICAgICAgICAgICAgICAgICAgcXVldWUgZmlsbHMgdXAsIHRoZSBtZXNzYWdlcyBiYWNrIHVwIG9udG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgICAgICAgcXVldWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3QgY2F1c2Ugb2YgYXBwcyBoYW5naW5nIHRoZSBHVUkuICBJZgorICAgICAgICAgICAgICAgICAgYW4gYXBwIGRvZXNuJ3QgaGFuZGxlIG1lc3NhZ2VzIGFuZCB0aGV5IGJhY2sgdXAgaW50bworICAgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSBxdWV1ZSwgb3RoZXIgYXBwcyBjYW4ndCBnZXQgYW55IG1vcmUKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLiAgVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSBuZXh0IG1lc3NhZ2UgaW4KKyAgICAgICAgICAgICAgICAgIGxpbmUgY2FuJ3QgZ28gYW55d2hlcmUsIGFuZCB0aGUgc3lzdGVtIHdvbid0IHNraXAKKyAgICAgICAgICAgICAgICAgIG92ZXIgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgVGhpcyBjYW4gYmUgZml4ZWQgYnkgbWFraW5nIGFwcHMgaGF2ZSBiaWdnZXIgcHJpdmF0ZQorICAgICAgICAgICAgICAgICAgbWVzc2FnZSBxdWV1ZXMuIFRoZSBTSVEgZml4IGRvZXMgdGhpcy4gIFBNUVNJWkUgZG9lcworICAgICAgICAgICAgICAgICAgdGhpcyBmb3Igc3lzdGVtcyB3aXRob3V0IHRoZSBTSVEgZml4LiAgQXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgICBjYW4gYWxzbyByZXF1ZXN0IGxhcmdlIHF1ZXVlcyBvbiB0aGVpciBvd24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgQW5vdGhlciBzb3VyY2Ugb2YgdGhlIHByb2JsZW0sIGhvd2V2ZXIsIGhhcHBlbnMgd2hlbgorICAgICAgICAgICAgICAgICAgeW91IGluY2x1ZGUga2V5Ym9hcmQgZXZlbnRzLiAgV2hlbiB5b3UgcHJlc3MgYSBrZXksCisgICAgICAgICAgICAgICAgICB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGtub3cgd2hhdCB3aW5kb3cgdGhlCisgICAgICAgICAgICAgICAgICBrZXlzdHJva2UgbWVzc2FnZSBzaG91bGQgYmUgZGVsaXZlcmVkIHRvLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIE1vc3Qgd2luZG93aW5nIHN5c3RlbXMgdXNlIGEgY29uY2VwdCBrbm93biBhcworICAgICAgICAgICAgICAgICAgImZvY3VzIi4gIFRoZSB3aW5kb3cgd2l0aCBmb2N1cyBnZXRzIGFsbCBpbmNvbWluZworICAgICAgICAgICAgICAgICAga2V5Ym9hcmQgbWVzc2FnZXMuICBGb2N1cyBjYW4gYmUgY2hhbmdlZCBmcm9tIHdpbmRvdworICAgICAgICAgICAgICAgICAgdG8gd2luZG93IGJ5IGFwcHMgb3IgYnkgdXNlcnMgY2xpY2tpbmcgb24gd2lub2R3cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBzZWNvbmQgc291cmNlIG9mIHRoZSBwcm9ibGVtLiAgU3VwcG9zZQorICAgICAgICAgICAgICAgICAgd2luZG93IEEgaGFzIGZvY3VzLiBZb3UgY2xpY2sgb24gd2luZG93IEIgYW5kIHN0YXJ0CisgICAgICAgICAgICAgICAgICB0eXBpbmcgYmVmb3JlIHRoZSB3aW5kb3cgZ2V0cyBmb2N1cy4gV2hlcmUgc2hvdWxkCisgICAgICAgICAgICAgICAgICB0aGUga2V5c3Ryb2tlcyBnbz8gIE9uIHRoZSBvbmUgaGFuZCwgdGhleSBzaG91bGQgZ28KKyAgICAgICAgICAgICAgICAgIHRvIEEgdW50aWwgdGhlIGZvY3VzIGFjdHVhbGx5IGNoYW5nZXMgdG8gQi4gIE9uIHRoZQorICAgICAgICAgICAgICAgICAgb3RoZXIgaGFuZCwgeW91IHByb2JhYmx5IHdhbnQgdGhlIGtleXN0cm9rZXMgdG8gZ28KKyAgICAgICAgICAgICAgICAgIHRvIEIsIHNpbmNlIHlvdSBjbGlja2VkIHRoZXJlIGZpcnN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIE9TLzIncyBzb2x1dGlvbiBpcyB0aGF0IHdoZW4gYSBmb2N1cy1jaGFuZ2luZyBldmVudAorICAgICAgICAgICAgICAgICAgaGFwcGVucyAobGlrZSBjbGlja2luZyBvbiBhIHdpbmRvdyksIE9TLzIgaG9sZHMgYWxsCisgICAgICAgICAgICAgICAgICBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtIHF1ZXVlIHVudGlsIHRoZSBmb2N1cyBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IGhhcHBlbnMuICBUaGlzIHdheSwgc3Vic2VxdWVudCBrZXlzdHJva2VzCisgICAgICAgICAgICAgICAgICBnbyB0byB0aGUgd2luZG93IHlvdSBjbGlja2VkIG9uLCBldmVuIGlmIGl0IHRha2VzIGEKKyAgICAgICAgICAgICAgICAgIHdoaWxlIGZvciB0aGF0IHdpbmRvdyB0byBnZXQgZm9jdXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgVGhlIGRvd25zaWRlIGlzIHRoYXQgaWYgdGhlIHdpbmRvdyB0YWtlcyBhIHJlYWwgbG9uZworICAgICAgICAgICAgICAgICAgdGltZSB0byBnZXQgZm9jdXMgKG1heWJlIGl0J3Mgbm90IGhhbmRsaW5nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgIG9yIG1heWJlIHRoZSB3aW5kb3cgbG9zaW5nIGZvY3VzIGlzbid0IGhhbmRsaW5nCisgICAgICAgICAgICAgICAgICBldmVudHMpLCBldmVyeXRoaW5nIGJhY2tzIHVwIGluIHRoZSBzeXN0ZW0gcXVldWUgYW5kCisgICAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIGFwcGVhcnMgaHVuZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgYSBmZXcgc29sdXRpb25zIHRvIHRoaXMgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBPbmUgaXMgdG8gbWFrZSBmb2N1cyBwb2xpY3kgYXN5bmNocm9ub3VzLiAgVGhhdCBpcywKKyAgICAgICAgICAgICAgICAgIGZvY3VzIGNoYW5naW5nIGhhcyBhYnNvbHV0ZWx5IG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgIGtleWJvYXJkLiAgSWYgeW91IGNsaWNrIG9uIGEgd2luZG93IGFuZCBzdGFydCB0eXBpbmcKKyAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgZm9jdXMgYWN0dWFsbHkgY2hhbmdlcywgdGhlIGtleXN0cm9rZXMgZ28KKyAgICAgICAgICAgICAgICAgIHRvIHRoZSBmaXJzdCB3aW5kb3cgdW50aWwgZm9jdXMgY2hhbmdlcywgdGhlbiB0aGV5CisgICAgICAgICAgICAgICAgICBnbyB0byB0aGUgc2Vjb25kLiBUaGlzIGlzIHdoYXQgWC13aW5kb3dzIGRvZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgQW5vdGhlciBpcyB3aGF0IE5UIGRvZXMuICBXaGVuIGZvY3VzIGNoYW5nZXMsCisgICAgICAgICAgICAgICAgICBrZXlib2FyZCBldmVudHMgYXJlIGhlbGQgaW4gdGhlIHN5c3RlbSBtZXNzYWdlCisgICAgICAgICAgICAgICAgICBxdWV1ZSwgYnV0IG90aGVyIGV2ZW50cyBhcmUgYWxsb3dlZCB0aHJvdWdoLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAiYXN5bmNocm9ub3VzIiBiZWNhdXNlIHRoZSBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICBxdWV1ZSBhcmUgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbiBxdWV1ZXMgaW4gYQorICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IG9yZGVyIGZyb20gdGhhdCB3aXRoIHdoaWNoIHRoZXkgd2VyZQorICAgICAgICAgICAgICAgICAgcG9zdGVkLiAgSWYgYSBiYWQgYXBwIHdvbid0IGhhbmRsZSB0aGUgImxvc2UgZm9jdXMiCisgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBpdCdzIG9mIG5vIGNvbnNlcXVlbmNlIC0gdGhlIGFwcCByZWNlaXZpbmcKKyAgICAgICAgICAgICAgICAgIGZvY3VzIHdpbGwgZ2V0IGl0cyAiZ2FpbiBmb2N1cyIgbWVzc2FnZSwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAga2V5c3Ryb2tlcyB3aWxsIGdvIHRvIGl0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIFRoZSBOVCBzb2x1dGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICBxdWV1ZSBmaWxsaW5nIHVwIHByb2JsZW0uICBTaW5jZSB0aGUgc3lzdGVtIGRlbGl2ZXJzCisgICAgICAgICAgICAgICAgICBtZXNzYWdlcyBhc3luY2hyb25vdXNseSwgbWVzc2FnZXMgd2FpdGluZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgIHN5c3RlbSBxdWV1ZSB3aWxsIGp1c3Qgc2l0IHRoZXJlIGFuZCB0aGUgcmVzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZWlyIGFwcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgVGhlIE9TLzIgU0lRIHNvbHV0aW9uIGlzIHRoaXM6ICBXaGVuIGEKKyAgICAgICAgICAgICAgICAgIGZvY3VzLWNoYW5naW5nIGV2ZW50IGhhcHBlbnMsIGluIGFkZGl0aW9uIHRvCisgICAgICAgICAgICAgICAgICBibG9ja2luZyBmdXJ0aGVyIG1lc3NhZ2VzIGZyb20gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICBxdWV1ZXMsIGEgdGltZXIgaXMgc3RhcnRlZC4gIFdoZW4gdGhlIHRpbWVyIGdvZXMKKyAgICAgICAgICAgICAgICAgIG9mZiwgaWYgdGhlIGZvY3VzIGNoYW5nZSBoYXMgbm90IHlldCBoYXBwZW5lZCwgdGhlCisgICAgICAgICAgICAgICAgICBiYWQgYXBwIGhhcyBpdHMgZm9jdXMgdGFrZW4gYXdheSBhbmQgYWxsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICB0YXJnZXR0ZWQgYXQgdGhhdCB3aW5kb3cgYXJlIHNraXBwZWQuICBXaGVuIHRoZSBiYWQKKyAgICAgICAgICAgICAgICAgIGFwcCBmaW5hbGx5IGhhbmRsZXMgdGhlIGZvY3VzIGNoYW5nZSBtZXNzYWdlLCBPUy8yCisgICAgICAgICAgICAgICAgICB3aWxsIGRldGVjdCB0aGlzIGFuZCBzdG9wIHNraXBwaW5nIGl0cyBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIEFzIGZvciB0aGUgcHJvcyBhbmQgY29uczoKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBUaGUgWC13aW5kb3dzIHNvbHV0aW9uIGlzIHByb2JhYmx5IHRoZSBlYXNpZXN0LiAgVGhlCisgICAgICAgICAgICAgICAgICBwcm9ibGVtIGlzIHRoYXQgdXNlcnMgZ2VuZXJhbGx5IGRvbid0IGxpa2UgaGF2aW5nIHRvCisgICAgICAgICAgICAgICAgICB3YWl0IGZvciB0aGUgZm9jdXMgdG8gY2hhbmdlIGJlZm9yZSB0aGV5IHN0YXJ0CisgICAgICAgICAgICAgICAgICB0eXBpbmcuICBPbiBtYW55IG9jY2FzaW9ucywgeW91IGNhbiB0eXBlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgZW5kIHVwIGluIHRoZSB3cm9uZyB3aW5kb3cgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgc29tZXRoaW5nICh1c3VhbGx5IGhlYXZ5IHN5c3RlbSBsb2FkKSBpcyBwcmV2ZW50aW5nCisgICAgICAgICAgICAgICAgICB0aGUgZm9jdXMgY2hhbmdlIGZyb20gaGFwcGVuaW5nIGluIGEgdGltZWx5IG1hbm5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBUaGUgTlQgc29sdXRpb24gc2VlbXMgcHJldHR5IG5pY2UsIGJ1dCBtYWtpbmcgdGhlCisgICAgICAgICAgICAgICAgICBzeXN0ZW0gbWVzc2FnZSBxdWV1ZSBhc3luY2hyb25vdXMgY2FuIGNhdXNlIHNpbWlsYXIKKyAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHRvIHRoZSBYLXdpbmRvd3MgcHJvYmxlbS4gU2luY2UgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgIGNhbiBiZSBkZWxpdmVyZWQgb3V0IG9mIG9yZGVyLCBwcm9ncmFtcyBtdXN0IG5vdAorICAgICAgICAgICAgICAgICAgYXNzdW1lIHRoYXQgdHdvIG1lc3NhZ2VzIHBvc3RlZCBpbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgIG9yZGVyIHdpbGwgYmUgZGVsaXZlcmVkIGluIHRoYXQgc2FtZSBvcmRlci4gIFRoaXMKKyAgICAgICAgICAgICAgICAgIGNhbiBicmVhayBsZWdhY3kgYXBwcywgYnV0IHNpbmNlIFdpbjMyIGFsd2F5cyBoYWQgYW4KKyAgICAgICAgICAgICAgICAgIGFzeW5jaHJvbm91cyBxdWV1ZSwgaXQgaXMgZmFpciB0byBzaW1wbHkgdGVsbCBhcHAKKyAgICAgICAgICAgICAgICAgIGRlc2lnbmVycyAiZG9uJ3QgZG8gdGhhdCIuICBJdCdzIGhhcmRlciB0byB0ZWxsIGFwcAorICAgICAgICAgICAgICAgICAgZGVzaWduZXJzIHNvbWV0aGluZyBsaWtlIHRoYXQgb24gT1MvMiAtIHRoZXknbGwKKyAgICAgICAgICAgICAgICAgIGNvbXBsYWluICJ5b3UgY2hhbmdlZCB0aGUgcnVsZXMgYW5kIG91ciBhcHBzIGFyZQorICAgICAgICAgICAgICAgICAgYnJlYWtpbmcuIgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIFRoZSBPUy8yIHNvbHV0aW9uJ3MgcHJvYmxlbSBpcyB0aGF0IG5vdGhpbmcgaGFwcGVucworICAgICAgICAgICAgICAgICAgdW50aWwgeW91IHRyeSB0byBjaGFuZ2Ugd2luZG93IGZvY3VzLCBhbmQgdGhlbiB3YWl0CisgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRpbWVvdXQuICBVbnRpbCB0aGVuLCB0aGUgYmFkIGFwcCBpcyBub3QKKyAgICAgICAgICAgICAgICAgIGRldGVjdGVkIGFuZCBub3RoaW5nIGlzIGRvbmUuIgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbnRlcnRhc2svaW50ZXJ0aHJlYWQKKyAgICAgICAgICAgICAgICA8ZnVuY3Rpb24+U2VuZE1lc3NhZ2U8L2Z1bmN0aW9uPi4gVGhlIHN5c3RlbSBoYXMgdG8KKyAgICAgICAgICAgICAgICBpbmZvcm0gdGhlIHRhcmdldCBxdWV1ZSBhYm91dCB0aGUgZm9ydGhjb21pbmcgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICB0aGVuIGl0IGhhcyB0byBjYXJyeSBvdXQgdGhlIGNvbnRleHQgc3dpdGNoIGFuZCB3YWl0CisgICAgICAgICAgICAgICAgdW50aWwgdGhlIHJlc3VsdCBpcyBhdmFpbGFibGUuICBXaW4xNiBzdG9yZXMgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgcXVldWUgc3RydWN0dXJlIGFuZCB0aGVuIGNhbGxzCisgICAgICAgICAgICAgICAgPGZ1bmN0aW9uPkRpcmVjdGVkWWllbGQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGluIFdpbjMyIHRoZXJlIGNvdWxkIGJlICBzZXZlcmFsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgcGVuZGluZyBzZW50IGJ5IHByZWVtcHRpdmVseSBleGVjdXRpbmcgdGhyZWFkcywgYW5kIGluCisgICAgICAgICAgICAgICAgdGhpcyBjYXNlIDxmdW5jdGlvbj5TZW5kTWVzc2FnZTwvZnVuY3Rpb24+IGhhcyB0bworICAgICAgICAgICAgICAgIGJ1aWxkIHNvbWUgc29ydCBvZiBtZXNzYWdlIHF1ZXVlIGZvciBzZW50IG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgIEFub3RoZXIgaXNzdWUgaXMgd2hhdCB0byBkbyB3aXRoIG1lc3NhZ2VzIHNlbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgc2VuZGVyIHdoZW4gaXQgaXMgYmxvY2tlZCBpbnNpZGUgaXRzIG93bgorICAgICAgICAgICAgICAgIDxmdW5jdGlvbj5TZW5kTWVzc2FnZTwvZnVuY3Rpb24+LiAKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iYXJjaC1kbGxzIj4KKyAgICAgIDx0aXRsZT5XSU5FL1dJTkRPV1MgRExMczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBCYXNlZCB1cG9uIHZhcmlvdXMgbWVzc2FnZXMgb24gd2luZS1kZXZlbCBlc3BlY2lhbGx5IGJ5IFVscmljaAorICAgICAgICBXZWlnYW5kLiBBZGFwdGVkIGJ5IE1pY2hlbGUgUGV0cm92c2tpIGFuZCBLbGFhcyB2YW4gR2VuZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2RsbHM8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZG9jdW1lbnQgbWFpbmx5IGRlYWxzIHdpdGggdGhlIHN0YXR1cyBvZiBjdXJyZW50IERMTAorICAgICAgICBzdXBwb3J0IGJ5IFdpbmUuICBUaGUgV2luZSBpbmkgZmlsZSBjdXJyZW50bHkgc3VwcG9ydHMKKyAgICAgICAgc2V0dGluZ3MgdG8gY2hhbmdlIHRoZSBsb2FkIG9yZGVyIG9mIERMTHMuICBUaGUgbG9hZCBvcmRlcgorICAgICAgICBkZXBlbmRzIG9uIHNldmVyYWwgaXNzdWVzLCB3aGljaCByZXN1bHRzIGluIGRpZmZlcmVudCBzZXR0aW5ncworICAgICAgICBmb3IgdmFyaW91cyBETExzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Qcm9zIG9mIE5hdGl2ZSBETExzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOYXRpdmUgRExMcyBvZiBjb3Vyc2UgZ3VhcmFudGVlIDEwMCUgY29tcGF0aWJpbGl0eSBmb3IKKyAgICAgICAgICByb3V0aW5lcyB0aGV5IGltcGxlbWVudC4gRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBuYXRpdmUgVVNFUgorICAgICAgICAgIERMTCB3b3VsZCBtYWludGFpbiBhIHZpcnR1YWxseSBwZXJmZWN0IGFuZCBXaW5kb3dzIDk1LWxpa2UKKyAgICAgICAgICBsb29rIGZvciB3aW5kb3cgYm9yZGVycywgZGlhbG9nIGNvbnRyb2xzLCBhbmQgc28gb24uIFVzaW5nCisgICAgICAgICAgdGhlIGJ1aWx0LWluIFdJTkUgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnksIG9uIHRoZSBvdGhlcgorICAgICAgICAgIGhhbmQsIHdvdWxkIHByb2R1Y2UgYSBkaXNwbGF5IHRoYXQgZG9lcyBub3QgcHJlY2lzZWx5IG1pbWljCisgICAgICAgICAgdGhhdCBvZiBXaW5kb3dzIDk1LiAgU3VjaCBzdWJ0bGUgZGlmZmVyZW5jZXMgY2FuIGJlCisgICAgICAgICAgZW5nZW5kZXJlZCBpbiBvdGhlciBpbXBvcnRhbnQgRExMcywgc3VjaCBhcyB0aGUgY29tbW9uCisgICAgICAgICAgY29udHJvbHMgbGlicmFyeSBDT01NQ1RSTCBvciB0aGUgY29tbW9uIGRpYWxvZ3MgbGlicmFyeQorICAgICAgICAgIENPTU1ETEcsIHdoZW4gYnVpbHQtaW4gV0lORSBETExzIG91dHJhbmsgb3RoZXIgdHlwZXMgaW4gbG9hZAorICAgICAgICAgIG9yZGVyLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vcmUgc2lnbmlmaWNhbnQsIGxlc3MgYWVzdGhldGljYWxseS1vcmllbnRlZCBwcm9ibGVtcyBjYW4KKyAgICAgICAgICByZXN1bHQgaWYgdGhlIGJ1aWx0LWluIFdJTkUgdmVyc2lvbiBvZiB0aGUgU0hFTEwgRExMIGlzCisgICAgICAgICAgbG9hZGVkIGJlZm9yZSB0aGUgbmF0aXZlIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5LiBTSEVMTAorICAgICAgICAgIGNvbnRhaW5zIHJvdXRpbmVzIHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBpbnN0YWxsZXIgdXRpbGl0aWVzCisgICAgICAgICAgdG8gY3JlYXRlIGRlc2t0b3Agc2hvcnRjdXRzLiBTb21lIGluc3RhbGxlcnMgbWlnaHQgZmFpbCB3aGVuCisgICAgICAgICAgdXNpbmcgV0lORSdzIGJ1aWx0LWluIFNIRUxMLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Db25zIG9mIE5hdGl2ZSBETExzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3QgZXZlcnkgYXBwbGljYXRpb24gcGVyZm9ybXMgYmV0dGVyIHVuZGVyIG5hdGl2ZSBETExzLiBJZgorICAgICAgICAgIGEgbGlicmFyeSB0cmllcyB0byBhY2Nlc3MgZmVhdHVyZXMgb2YgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbQorICAgICAgICAgIHRoYXQgYXJlIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBpbiBXaW5lLCB0aGUgbmF0aXZlIERMTCBtaWdodAorICAgICAgICAgIHdvcmsgbXVjaCB3b3JzZSB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWx0LWluIG9uZSwgaWYgYXQKKyAgICAgICAgICBhbGwuIEZvciBleGFtcGxlLCB0aGUgbmF0aXZlIFdpbmRvd3MgR0RJIGxpYnJhcnkgbXVzdCBiZQorICAgICAgICAgIHBhaXJlZCB3aXRoIGEgV2luZG93cyBkaXNwbGF5IGRyaXZlciwgd2hpY2ggb2YgY291cnNlIGlzIG5vdAorICAgICAgICAgIHByZXNlbnQgdW5kZXIgSW50ZWwgVW5peCBhbmQgV0lORS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGaW5hbGx5LCBvY2Nhc3Npb25hbGx5IGJ1aWx0LWluIFdJTkUgRExMcyBpbXBsZW1lbnQgbW9yZQorICAgICAgICAgIGZlYXR1cmVzIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIFdpbmRvd3MgRExMcy4KKyAgICAgICAgICBQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgZXhhbXBsZSBvZiBzdWNoIGJlaGF2aW9yIGlzIHRoZQorICAgICAgICAgIGludGVncmF0aW9uIG9mIFdpbmUgd2l0aCBYIHByb3ZpZGVkIGJ5IFdJTkUncyBidWlsdC1pbiBVU0VSCisgICAgICAgICAgRExMLiBTaG91bGQgdGhlIG5hdGl2ZSBXaW5kb3dzIFVTRVIgbGlicmFyeSB0YWtlIGxvYWQtb3JkZXIKKyAgICAgICAgICBwcmVjZWRlbmNlLCBzdWNoIGZlYXR1cmVzIGFzIHRoZSBhYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgICAgICBjbGlwYm9hcmQgb3IgZHJhZy1hbmQtIGRyb3AgYmV0d2VlbiBXaW5lIHdpbmRvd3MgYW5kIFgKKyAgICAgICAgICB3aW5kb3dzIHdpbGwgYmUgbG9zdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+RGVjaWRpbmcgQmV0d2VlbiBOYXRpdmUgYW5kIEJ1aWx0LUluIERMTHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIENsZWFybHksIHRoZXJlIGlzIG5vIG9uZSBydWxlLW9mLXRodW1iIHJlZ2FyZGluZyB3aGljaAorICAgICAgICAgIGxvYWQtb3JkZXIgdG8gdXNlLiBTbywgeW91IG11c3QgYmVjb21lIGZhbWlsaWFyIHdpdGg6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPndoYXQgc3BlY2lmaWMgRExMcyBkbzwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPndoaWNoIG90aGVyIERMTHMgb3IgZmVhdHVyZXMgYSBnaXZlbiBsaWJyYXJ5IGludGVyYWN0cyB3aXRoPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBhbmQgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gbWFrZSBhIGNhc2UtYnktY2FzZSBkZWNpc2lvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+TG9hZCBPcmRlciBmb3IgRExMczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVXNpbmcgdGhlIERMTCBzZWN0aW9ucyBmcm9tIHRoZSB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhlCisgICAgICAgICAgbG9hZCBvcmRlciBjYW4gYmUgdHdlYWtlZCB0byBhIGhpZ2ggZGVncmVlLiBJbiBnZW5lcmFsIGl0IGlzCisgICAgICAgICAgYWR2aXNlZCBub3QgdG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgIGZpbGUuIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRoZSByaWdodCBsb2FkCisgICAgICAgICAgb3JkZXIgZm9yIHRoZSBtb3N0IGltcG9ydGFudCBETExzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBkZWZhdWx0IGxvYWQgb3JkZXIgZm9sbG93cyB0aGlzIGFsZ29yaXRobTogZm9yIGFsbCBETExzCisgICAgICAgICAgd2hpY2ggaGF2ZSBhIGZ1bGx5LWZ1bmN0aW9uYWwgV2luZSBpbXBsZW1lbnRhdGlvbiwgb3Igd2hlcmUKKyAgICAgICAgICB0aGUgbmF0aXZlIERMTCBpcyBrbm93biBub3QgdG8gd29yaywgdGhlIGJ1aWx0LWluIGxpYnJhcnkKKyAgICAgICAgICB3aWxsIGJlIGxvYWRlZCBmaXJzdC4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgbmF0aXZlIERMTAorICAgICAgICAgIHRha2VzIGxvYWQtb3JkZXIgcHJlY2VkZW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHZhcm5hbWU+RGVmYXVsdExvYWRPcmRlcjwvdmFybmFtZT4gZnJvbSB0aGUKKyAgICAgICAgICBbRGxsRGVmYXVsdHNdIHNlY3Rpb24gc3BlY2lmaWVzIGZvciBhbGwgRExMcyB3aGljaCB2ZXJzaW9uCisgICAgICAgICAgdG8gdHJ5IGZpcnN0LiBTZWUgbWFucGFnZSBmb3IgZXhwbGFuYXRpb24gb2YgdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbiBkZWFscyB3aXRoIERMTHMsIHdoaWNoIG5lZWQgYQorICAgICAgICAgIGRpZmZlcmVudC1mcm9tLWRlZmF1bHQgdHJlYXRtZW50LiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgW0RsbFBhaXJzXSBzZWN0aW9uIGlzIGZvciBETExzLCB3aGljaCBtdXN0IGJlIGxvYWRlZCBpbgorICAgICAgICAgIHBhaXJzLiBJbiBnZW5lcmFsLCB0aGVzZSBhcmUgRExMcyBmb3IgZWl0aGVyIDE2LWJpdCBvcgorICAgICAgICAgIDMyLWJpdCBhcHBsaWNhdGlvbnMuIEluIG1vc3QgY2FzZXMgaW4gV2luZG93cywgdGhlIDMyLWJpdAorICAgICAgICAgIHZlcnNpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCBpdHMgMTYtYml0IGNvdW50ZXJwYXJ0LiBGb3IKKyAgICAgICAgICBXSU5FLCBpdCBpcyBjdXN0b21hcnkgdGhhdCB0aGUgMTYtYml0IGltcGxlbWVudGF0aW9ucyByZWx5CisgICAgICAgICAgb24gdGhlIDMyLWJpdCBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhc3QgdGhlIHJlc3VsdHMgYmFjayB0bworICAgICAgICAgIDE2LWJpdCBhcmd1bWVudHMuIENoYW5naW5nIGFueXRoaW5nIGluIHRoaXMgc2VjdGlvbiBpcyBib3VuZAorICAgICAgICAgIHRvIHJlc3VsdCBpbiBlcnJvcnMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIHRoZSBmdXR1cmUsIHRoZSBXaW5lIGltcGxlbWVudGF0aW9uIG9mIFdpbmRvd3MgRExMIHNlZW1zCisgICAgICAgICAgdG8gaGVhZCB0b3dhcmRzIHVuaWZ5aW5nIHRoZSAxNiBhbmQgMzIgYml0IERMTHMgd2hlcmV2ZXIKKyAgICAgICAgICBwb3NzaWJsZSwgcmVzdWx0aW5nIGluIGxhcmdlciBETExzLiAgVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICAgICAgICAgIDxmaWxlbmFtZT5kbGxzLzwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSB1c2luZyB0aGUgMTYtYml0CisgICAgICAgICAgbmFtZS4gIEZvciBsYXJnZSBETExzLCBhIHNwbGl0IG1pZ2h0IGJlIGRpc2N1c3NlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBXaGF0IERMTHMgRG88L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBicmllZmx5IGRlc2NyaWJlcyBlYWNoIG9mIHRoZSBETExzCisgICAgICAgICAgY29tbW9ubHkgZm91bmQgaW4gV2luZG93cyB3aG9zZSBsb2FkIG9yZGVyIG1heSBiZSBtb2RpZmllZAorICAgICAgICAgIGR1cmluZyB0aGUgY29uZmlndXJhdGlvbiBhbmQgY29tcGlsYXRpb24gb2YgV0lORS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAoU2VlIGFsc28gPGZpbGVuYW1lPi4vREVWRUxPUEVSLUhJTlRTPC9maWxlbmFtZT4gb3IgdGhlCisgICAgICAgICAgPGZpbGVuYW1lPmRsbHMvPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IHRvIHNlZSB3aGljaCBETExzCisgICAgICAgICAgYXJlIGN1cnJlbnRseSBiZWluZyByZXdyaXR0ZW4gZm9yIHdpbmUpCisgICAgICAgIDwvcGFyYT4KKworPCEtLSBGSVhNRTogU2hvdWxkIGNvbnZlcnQgdGhpcyB0YWJsZSBpbnRvIGEgVmFyaWFibGVMaXN0IGVsZW1lbnQgLS0+CisgICAgICAgIDxzY3JlZW4+CitBRFZBUEkzMi5ETEw6CSAgIDMyLWJpdCBhcHBsaWNhdGlvbiBhZHZhbmNlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisgICAgICAgICAgICAgICAgICAgbGlrZSBjcnlwdG8sIHN5c3RlbWluZm8sIHNlY3VyaXR5IGFuZCBldmVudGxvZ2dpbmcKK0FWSUZJTEUuRExMOgkgICAzMi1iaXQgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgQXVkaW8gVmlkZW8gSW50ZXJsZWF2ZSAoQVZJKSBXaW5kb3dzLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IGF1ZGlvLXZpZGVvIHN0YW5kYXJkCitDT01NQ1RSTC5ETEw6CSAgIDE2LWJpdCBjb21tb24gY29udHJvbHMKK0NPTUNUTDMyLkRMTDoJICAgMzItYml0IGNvbW1vbiBjb250cm9scyAKK0NPTURMRzMyLkRMTDoJICAgMzItYml0IGNvbW1vbiBkaWFsb2dzCitDT01NRExHLkRMTDoJICAgMTYtYml0IGNvbW1vbiBkaWFsb2dzCitDT01QT0JKLkRMTDoJICAgT0xFIDE2LSBhbmQgMzItYml0IGNvbXBhdGliaWxpdHkgbGlicmFyaWVzCitDUlRETEwuRExMOgkgICBNaWNyb3NvZnQgQyBydW50aW1lCitEQ0lNQU4uRExMOgkgICAxNi1iaXQKK0RDSU1BTjMyLkRMTDoJICAgMzItYml0IGRpc3BsYXkgY29udHJvbHMKK0RERU1MLkRMTDoJICAgRERFIG1lc3NhZ2luZworRDNEKi5ETEwJICAgRGlyZWN0WC9EaXJlY3QzRCBkcmF3aW5nIGxpYnJhcmllcworRERSQVcuRExMOgkgICBEaXJlY3RYIGRyYXdpbmcgbGlicmFyaWVzCitESU5QVVQuRExMOgkgICBEaXJlY3RYIGlucHV0IGxpYnJhcmllcworRElTUExBWS5ETEw6CSAgIERpc3BsYXkgbGlicmFyaWVzCitEUExBWS5ETEwsIERQTEFZWC5ETEw6ICBEaXJlY3RYIHBsYXliYWNrIGxpYnJhcmllcworRFNPVU5ELkRMTDoJICAgRGlyZWN0WCBhdWRpbyBsaWJyYXJpZXMKK0dESS5ETEw6CSAgIDE2LWJpdCBncmFwaGljcyBkcml2ZXIgaW50ZXJmYWNlCitHREkzMi5ETEw6CSAgIDMyLWJpdCBncmFwaGljcyBkcml2ZXIgaW50ZXJmYWNlCitJTUFHRUhMUC5ETEw6CSAgIDMyLWJpdCBJTU0gQVBJIGhlbHBlciBsaWJyYXJpZXMgKGZvciBQRS1leGVjdXRhYmxlcykKK0lNTTMyLkRMTDoJICAgMzItYml0IElNTSBBUEkKK0lNR1VUSUwuRExMOgkgICAKK0tFUk5FTDMyLkRMTAkgICAzMi1iaXQga2VybmVsIERMTAorS0VZQk9BUkQuRExMOgkgICBLZXlib2FyZCBkcml2ZXJzCitMWjMyLkRMTDoJICAgMzItYml0IExlbXBlbC1aaXYgb3IgTFogZmlsZSBjb21wcmVzc2lvbiAKKyAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBpbnN0YWxsc2hpZWxkcyAoPz8/KS4KK0xaRVhQQU5ELkRMTDoJICAgTFogZmlsZSBleHBhbnNpb247IG5lZWRlZCBmb3IgV2luZG93cyBTZXR1cAorTU1TWVNURU0uRExMOgkgICBDb3JlIG9mIHRoZSBXaW5kb3dzIG11bHRpbWVkaWEgc3lzdGVtCitNT1VTRS5ETEw6CSAgIE1vdXNlIGRyaXZlcnMKK01QUi5ETEw6CSAgIDMyLWJpdCBXaW5kb3dzIG5ldHdvcmsgaW50ZXJmYWNlCitNU0FDTS5ETEw6CSAgIENvcmUgb2YgdGhlIEFkZHJlc3NlZCBDYWxsIE1vZGUgb3IgQUNNIHN5c3RlbQorTVNBQ00zMi5ETEw6CSAgIENvcmUgb2YgdGhlIDMyLWJpdCBBQ00gc3lzdGVtCisgICAgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlciA/Pz8KK01TTkVUMzIuRExMCSAgIDMyLWJpdCBuZXR3b3JrIEFQSXMKK01TVkZXMzIuRExMOgkgICAzMi1iaXQgV2luZG93cyB2aWRlbyBzeXN0ZW0KK01TVklERU8uRExMOgkgICAxNi1iaXQgV2luZG93cyB2aWRlbyBzeXN0ZW0KK09MRTIuRExMOgkgICBPTEUgMi4wIGxpYnJhcmllcworT0xFMzIuRExMOgkgICAzMi1iaXQgT0xFIDIuMCBjb21wb25lbnRzCitPTEUyQ09OVi5ETEw6CSAgIEltcG9ydCBmaWx0ZXIgZm9yIGdyYXBoaWNzIGZpbGVzCitPTEUyRElTUC5ETEwsIE9MRTJOTFMuRExMOiBPTEUgMi4xIDE2LSBhbmQgMzItYml0IGludGVyb3BlcmFiaWxpdHkKK09MRTJQUk9YLkRMTDoJICAgUHJveHkgc2VydmVyIGZvciBPTEUgMi4wCitPTEUyVEhLLkRMTDoJICAgVGh1bmtpbmcgZm9yIE9MRSAyLjAKK09MRUFVVDMyLkRMTAkgICAzMi1iaXQgT0xFIDIuMCBhdXRvbWF0aW9uCitPTEVDTEkuRExMOgkgICAxNi1iaXQgT0xFIGNsaWVudAorT0xFQ0xJMzIuRExMOgkgICAzMi1iaXQgT0xFIGNsaWVudAorT0xFRExHLkRMTDoJICAgT0xFIDIuMCB1c2VyIGludGVyZmFjZSBzdXBwb3J0CitPTEVTVlIuRExMOgkgICAxNi1iaXQgT0xFIHNlcnZlciBsaWJyYXJpZXMKK09MRVNWUjMyLkRMTDoJICAgMzItYml0IE9MRSBzZXJ2ZXIgbGlicmFyaWVzCitQU0FQSS5ETEw6CSAgIFByb2NlcyBTdGF0dXMgQVBJIGxpYnJhcmllcworUkFTQVBJMTYuRExMOgkgICAxNi1iaXQgUmVtb3RlIEFjY2VzcyBTZXJ2aWNlcyBsaWJyYXJpZXMKK1JBU0FQSTMyLkRMTDoJICAgMzItYml0IFJlbW90ZSBBY2Nlc3MgU2VydmljZXMgbGlicmFyaWVzCitTSEVMTC5ETEw6CSAgIDE2LWJpdCBXaW5kb3dzIHNoZWxsIHVzZWQgYnkgU2V0dXAKK1NIRUxMMzIuRExMOgkgICAzMi1iaXQgV2luZG93cyBzaGVsbCAoQ09NIG9iamVjdD8pCitUQVBJL1RBUEkzMi9UQVBJQUREUjogIFRlbGVwaG9uZSBBUEkgKGZvciBNb2RlbXMpCitXMzJTS1JOTDoJICAgV2luMzJzIEtlcm5lbCA/IChub3QgaW4gdXNlIGZvciBXaW45NSBhbmQgdXAhKQorV0lOMzJTMTYuRExMOgkgICBBcHBsaWNhdGlvbiBjb21wYXRpYmlsaXR5IGZvciBXaW4zMnMKK1dJTjg3RU0uRExMOgkgICA4MDM4NyBtYXRoLWVtdWxhdGlvbiBsaWJyYXJpZXMKK1dJTkFTUEkuRExMOgkgICBBZHZhbmNlZCBTQ1NJIFBlcmlwaGVyYWwgSW50ZXJmYWNlIG9yIEFTUEkgbGlicmFyaWVzCitXSU5ERUJVRy5ETEwJICAgV2luZG93cyBkZWJ1Z2dlcgorV0lOTU0uRExMOgkgICBMaWJyYXJpZXMgZm9yIG11bHRpbWVkaWEgdGh1bmtpbmcKK1dJTkcuRExMOgkgICBMaWJyYXJpZXMgcmVxdWlyZWQgdG8gImRyYXciIGdyYXBoaWNzCitXSU5TT0NLLkRMTDoJICAgU29ja2V0cyBBUElzCitXSU5TUE9PTC5ETEw6CSAgIFByaW50IHNwb29sZXIgbGlicmFyaWVzCitXTkFTUEkzMi5ETEw6CSAgIDMyLWJpdCBBU1BJIGxpYnJhcmllcworV1NPQ0szMi5ETEw6CSAgIDMyLWJpdCBzb2NrZXRzIEFQSXMKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisgICAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJwYXJ0IiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYXNwaSBiL2RvY3VtZW50YXRpb24vYXNwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ0ZDBiNi4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2FzcGkKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi1UaGlzIGZpbGUgZGVzY3JpYmVzIHNldHRpbmcgdXAgdGhlIFdpbmRvd3MgQVNQSSBpbnRlcmZhY2UuCi0KLVdhcm5pbmcvV2FybmluZy9XYXJuaW5nISEhISEhCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVEhJUyBNQVkgVFJBU0ggWU9VUiBTWVNURU0gSUYgVVNFRCBJTkNPUlJFQ1RMWQotVEhJUyBNQVkgVFJBU0ggWU9VUiBTWVNURU0gSUYgVVNFRCBDT1JSRUNUTFkKLQotTm93IHRoYXQgSSBoYXZlIHNhaWQgdGhhdC4gQVNQSSBpcyBhIGRpcmVjdCBsaW5rIHRvIFNDU0kgZGV2aWNlcyBmcm9tCi13aW5kb3dzIHByb2dyYW1zLiBBU1BJIGp1c3QgZm9yd2FyZHMgdGhlIFNDU0kgY29tbWFuZHMgdGhhdCBwcm9ncmFtcyBzZW5kCi10byBpdCB0byB0aGUgU0NTSSBidXMuCi0KLUlmIHlvdSB1c2UgdGhlIHdyb25nIHNjc2kgZGV2aWNlIGluIHlvdXIgc2V0dXAgZmlsZSwgeW91IGNhbiBzZW5kCi1jb21wbGV0ZWx5IGJvZ3VzIGNvbW1hbmRzIHRvIHRoZSB3cm9uZyBkZXZpY2UgLSBBbiBleGFtcGxlIHdvdWxkIGJlCi1mb3JtYXR0aW5nIHlvdXIgaGFyZCBkcml2ZXMgKGFzc3VtaW5nIHRoZSBkZXZpY2UgZ2F2ZSB5b3UgcGVybWlzc2lvbiAtCi1pZiB5b3UncmUgcnVubmluZyBhcyByb290LCBhbGwgYmV0cyBhcmUgb2ZmKS4KLQotU28gcGxlYXNlIG1ha2Ugc3VyZSB0aGF0ICoqYWxsKiogU0NTSSBkZXZpY2VzIHRoYXQgdGhlIHByb2dyYW0gd29uJ3QgbmVlZAotaGF2ZSB0aGVpciBwZXJtaXNzaW9ucyBzZXQgYXMgcmVzdHJpY3RlZCBhcyBwb3NzaWJsZSAhIAotCi1Db29rYm9vayBmb3Igc2V0dGluZyB1cCBzY2FubmVyOiAoQXQgbGVhc3QgaG93IG1pbmUgaXMgdG8gd29yaykKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVdpbmRvd3MgcmVxdWlyZW1lbnRzOgotPT09PT09PT09PT09PT09PT09PT09Ci0wKSBUaGUgc2Nhbm5lciBzb2Z0d2FyZSBuZWVkcyB0byB1c2UgdGhlICJBZGFwdGVjIiBjb21wYXRpYmxlIGRyaXZlcnMKLShBU1BJKS4gQXQgbGVhc3Qgd2l0aCBNdXN0ZWssIHRoZXkgYWxsb3cgeW91IHRoZSBjaG9pY2Ugb2YgdXNpbmcKLXRoZSBidWlsdGluIGNhcmQgb3IgdGhlICJBZGFwdGVjIChBSEEpIiBjb21wYXRpYmxlIGRyaXZlcnMuIFRoaXMgd2lsbCBub3QKLXdvcmsgYW55IG90aGVyIHdheS4KLVNvZnR3YXJlIHRoYXQgYWNjZXNzZXMgdGhlIHNjYW5uZXIgdmlhIGEgRE9TIEFTUEkgZHJpdmVyIChlLmcuIEFTUEkyRE9TKQotaXMgc3VwcG9ydGVkLCB0b28uIFtBTV0KLQotMSkgWW91IHByb2JhYmx5IG5lZWQgYSByZWFsIHdpbmRvd3MgaW5zdGFsbCBvZiB0aGUgc29mdHdhcmUgdG8gc2V0IHRoZQotTFVOJ3MvU0NTSSBpZCdzIHVwIGNvcnJlY3RseS4gSSdtIG5vdCBleGFjdGx5IHN1cmUuCi0KLUxJTlVYIHJlcXVpcmVtZW50czoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMCkgWW91ciBzY3NpIGNhcmQgbXVzdCBiZSBzdXBwb3J0ZWQgdW5kZXIgbGludXguIFRoaXMgd2lsbCBub3Qgd29yayB3aXRoCi1hbiB1bmtub3duIHNjc2kgY2FyZC4KLUV2ZW4gZm9yIGNoZWFwJ24gY3JhcHB5ICJzY2FubmVyIG9ubHkiIGNvbnRyb2xsZXJzIHNvbWUgc3BlY2lhbCBMaW51eCBkcml2ZXJzCi1leGlzdCBvbiB0aGUgbmV0LgotCi0xKSBDb21waWxlIGdlbmVyaWMgc2NzaSBkcml2ZXJzIGludG8geW91ciBrZXJuZWwuCi0KLTIpIExpbnV4IGJ5IGRlZmF1bHQgdXNlcyBzbWFsbGVyIHNjc2kgYnVmZmVycyB0aGFuIFdpbmRvd3MuIFRoZXJlIGlzIGEKLWtlcm5lbCBidWlsZCBkZWZpbmUgU0dfQklHX0JVRkYgKGluIHNnLmgpIHRoYXQgaXMgYnkgZGVmYXVsdCBzZXQgdG9vIGxvdy4KLVRoZSBTQU5FIHByb2plY3QgcmVjb21tZW5kcyAxMzA1NjAgYW5kIHRoaXMgc2VlbXMgdG8gd29yayBqdXN0IGZpbmUuIFRoaXMKLWRvZXMgcmVxdWlyZSBhIGtlcm5lbCByZWJ1aWxkLgotCi0zKSBNYWtlIHRoZSBkZXZpY2VzIGZvciB0aGUgc2Nhbm5lciAoZ2VuZXJpYyBzY3NpIGRldmljZXMpIC0gbG9vayBhdCB0aGUgc2NzaQotcHJvZ3JhbW1pbmcgaG93LXRvIGZvciBkZXZpY2UgbnVtYmVyaW5nLgotCi00KSBJIHdvdWxkIHJlY29tbWVuZCBtYWtpbmcgdGhlIHNjYW5uZXIgZGV2aWNlIHdyaXRhYmxlIGJ5IGEgZ3JvdXAuCi1JIG1hZGUgYSBncm91cCBjYWxsZWQgInNjYW5uZXIiIGFuZCBhZGRlZCBteXNlbGYgdG8gaXQuIFJ1bm5pbmcgYXMgcm9vdAotaW5jcmVhc2VzIHlvdXIgcmlzayBvZiBzZW5kaW5nIGJhZCBzY3NpIGNvbW1hbmRzIHRvIHRoZSB3cm9uZyBkZXZpY2UuIFdpdGgKLWEgcmVndWxhciB1c2VyLCB5b3UgYXJlIGJldHRlciBwcm90ZWN0ZWQuCi0KLTUpIEFkZCBhIHNjc2kgZGV2aWNlIGVudHJ5IGZvciB5b3VyIHBhcnRpY3VsYXIgc2Nhbm5lciB0byB3aW5lLmNvbmYuCi1UaGUgZm9ybWF0IGlzIFtzY3NpIGNDdFRkRF0gd2hlcmUgQz1jb250cm9sbGVyLCBUPXRhcmdldCwgRD1MVU4KLQotZXguIEkgc2V0IG1pbmUgdXAgYXMgIGNvbnRyb2xsZXIgMCwgVGFyZ2V0IDYsIExVTiAwLgotW3Njc2kgYzB0NmQwXQotRGV2aWNlPS9kZXYvc2dpCi0KLVlvdXJzIHdpbGwgdmFyeSB3aXRoIHlvdXIgcGFydGljdWxhciBTQ1NJIHNldHVwLgotCi0KLUdlbmVyYWwgSW5mb3JtYXRpb246Ci09PT09PT09PT09PT09PT09PT09PQotVGhlIG11c3RlayBzY2FubmVyIEkgaGF2ZSB3YXMgc2hpcHBlZCB3aXRoIGEgcGFja2FnZSAiaXBwbHVzIi4gVGhpcwotcHJvZ3JhbSB1c2VzIHRoZSBUV0FJTiBkcml2ZXIgc3BlY2lmaWNhdGlvbiB0byBhY2Nlc3Mgc2Nhbm5lcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVFdBSU4gTUFOQUdFUikKLWlwcGx1cy5leGUgPC0tLT4gKFRXQUlOIElOVEVSRkFDRSkgPC0tLT4gKFRXQUlOIERBVEEgU09VUkNFIC4gQVNQSSkgLT4gV0lOQVNQSQotCi1OT1RFUy9CVUdTOgotPT09PT09PT09PT0KLVRoZSBiaWdnZXN0IGlzIHRoYXQgaXQgb25seSB3b3JrcyB1bmRlciBsaW51eCBhdCB0aGUgbW9tZW50LgotVGhlIEFTUEkgY29kZSBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoOgotLSBhIE11c3RlayA4MDBTUCB3aXRoIGEgQnVzbG9naWMgY29udHJvbGxlciB1bmRlciBMaW51eCBbQk1dCi0tIGEgU2llbWVucyBOaXhkb3JmIDkwMzYgd2l0aCBBZGFwdGVjIEFWQS0xNTA1IHVuZGVyIExpbnV4Ci0gIGFjY2Vzc2VkIHZpYSBET1NBU1BJLgotICBOb3RlIHRoYXQgSSBoYWQgY29sb3IgcHJvYmxlbXMsIHRob3VnaCAoYmFyZWx5IHJlYWRhYmxlIHJlc3VsdCkgW0FNXQotLSBhIEZ1aml0c3UgTTI1MTNBIE1PIGRyaXZlICg2NDBNQikgdXNpbmcgZ2VuZXJpYyBzY3NpIGRyaXZlcnMuCi0gIEZvcm1hdHRpbmcgYW5kIGVqZWN0aW5nIHdvcmtlZCBwZXJmZWN0bHkuCi0gIFRoYW5rcyB0byBVd2UgQm9ubmVzIGZvciBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlICEgW0FNXQotCi1JIG1ha2Ugbm8gd2FycmFudHkgdG8gdGhlIGFzcGkgY29kZS4gSXQgbWFrZXMgbXkgc2Nhbm5lciB3b3JrLiBZb3VyIGRldmljZXMKLW1heSBleHBsb2RlLiBJIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHRoaXMuIEkgdGFrZSB6ZXJvIHJlc3BvbnNpYmlsaXR5IQotCi0KLUJydWNlIE1pbG5lcgotQWRkaXRpb25zIGJ5IEFuZHJlYXMgTW9ocgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzIGIvZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGEyMDgwLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vYnVncmVwb3J0cworKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi1Ib3cgVG8gUmVwb3J0IEEgQnVnCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSB0d28gd2F5cyBmb3IgeW91IHRvIG1ha2UgYSBidWcgcmVwb3J0LiBPbmUgdXNlcyBhIHNpbXBsZSBwZXJsCi1zY3JpcHQsIGFuZCBpcyByZWNvbW1lbmRlZCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzcGVuZCBhIGxvdCBvZiB0aW1lCi1wcm9kdWNpbmcgdGhlIHJlcG9ydC4gSXQgaXMgZGVzaWduZWQgZm9yIHVzZSBieSBqdXN0IGFib3V0IGFueW9uZSwgZnJvbQotdGhlIG5ld2VzdCBvZiBuZXdiaWVzIHRvIGFkdmFuY2VkIGRldmVsb3BlcnMuIFlvdSBjYW4gYWxzbyBtYWtlIGEgYnVnCi1yZXBvcnQgdGhlIGhhcmQgd2F5IC0tIGFkdmFuY2VkIGRldmVsb3BlcnMgd2lsbCBwcm9iYWJseSBwcmVmZXIgdGhpcy4KLQotQS4gVGhlIEVhc3kgV2F5Ci0xKSBZb3VyIGNvbXB1dGVyICptdXN0KiBoYXZlIHBlcmwgb24gaXQgZm9yIHRoaXMgbWV0aG9kIHRvIHdvcmsuIFRvCi1maW5kIG91dCBpZiB5b3UgaGF2ZSBwZXJsLCBydW46Ci13aGljaCBwZXJsCi1JZiBpdCByZXR1cm5zIHNvbWV0aGluZyBsaWtlICIvdXNyL2Jpbi9wZXJsIiwgeW91J3JlIGluIGJ1c2luZXNzLgotT3RoZXJ3aXNlLCBza2lwIG9uIGRvd24gdG8gIlRoZSBIYXJkIFdheSIuIAotSWYgeW91IGFyZW4ndCBzdXJlLCBqdXN0IGtlZXAgb24gZ29pbmcuIFdoZW4geW91IHRyeSB0byBydW4gdGhlIHNjcmlwdCwgaXQKLXdpbGwgYmVjb21lICp2ZXJ5KiBhcHBhcmVudCBpZiB5b3UgZG9uJ3QgaGF2ZSBwZXJsLgotCi0yKSBDaGFuZ2UgZGlyZWN0b3J5IHRvIDxkaXJzIHRvIHdpbmU+L3Rvb2xzCi0KLTMpIFR5cGUgaW4gIi4vYnVnX3JlcG9ydC5wbCIgYW5kIGZvbGxvdyB0aGUgZGlyZWN0aW9ucy4KLQotNCkgUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZSBuZXdzZ3JvdXAgd2l0aCB0aGUKLSJOaWNlIEZvcm1hdHRlZCBSZXBvcnQiIGF0dGF0Y2hlZC4gSWYgcG9zc2libGUsIHVwbG9hZCB0aGUgZnVsbCBkZWJ1Zwotb3V0cHV0IHRvIGEgd2ViL2Z0cCBzZXJ2ZXIgYW5kIHByb3ZpZGUgdGhlIGFkZHJlc3MgaW4geW91ciBtZXNzYWdlLgotCi0KLUIuIFRoZSBIYXJkIFdheToKLQotU29tZSBzaW1wbGUgYWR2aWNlIG9uIG1ha2luZyB5b3VyIGJ1ZyByZXBvcnQgbW9yZSB1c2VmdWwgKGFuZCB0aHVzIG1vcmUKLWxpa2VseSB0byBnZXQgYW5zd2VyZWQgYW5kIGZpeGVkKToKLQotMSkgUG9zdCBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlLiAgCi0KLQlUaGlzIG1lYW5zIHdlIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIGEgc2ltcGxlCi0JIk1TIFdvcmQgY3Jhc2hlcyB3aGVuZXZlciBJIHJ1biBpdC4gIERvIHlvdSBrbm93IHdoeT8iCi0JSW5jbHVkZSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgotCi0JLSBWZXJzaW9uIG9mIFdpbmUgeW91J3JlIHVzaW5nIChydW4gJ3dpbmUgLXYnKQotCS0gT3BlcmF0aW5nIHN5c3RlbSB5b3UncmUgdXNpbmcsIHdoYXQgZGlzdHJpYnV0aW9uIChpZiBhbnkpLCBhbmQgd2hhdAotCQl2ZXJzaW9uCi0JLSBDb21waWxlciBhbmQgdmVyc2lvbiAocnVuICdnY2MgLXYnKQotCS0gV2luZG93cyB2ZXJzaW9uLCBpZiBpbnN0YWxsZWQKLQktIFByb2dyYW0geW91J3JlIHRyeWluZyB0byBydW4sIGl0cyB2ZXJzaW9uIG51bWJlciwgYW5kIGEgVVJMIGZvciAKLQkJd2hlcmUgdGhlIHByb2dyYW0gY2FuIGJlIG9idGFpbmVkIChpZiBhdmFpbGFibGUpCi0JLSBDb21tYW5kIGxpbmUgeW91IHVzZWQgdG8gc3RhcnQgd2luZQotCS0gQW55IG90aGVyIGluZm9ybWF0aW9uIHlvdSB0aGluayBtYXkgYmUgcmVsZXZhbnQgb3IgaGVscGZ1bCwgc3VjaCBhcwotCQlYIHNlcnZlciB2ZXJzaW9uIGluIGNhc2Ugb2YgWCBwcm9ibGVtcywgbGliYyB2ZXJzaW9uIGV0Yy4KLQotMikgUmUtcnVuIHRoZSBwcm9ncmFtIHdpdGggdGhlIC1kZWJ1Z21zZyArcmVsYXkgb3B0aW9uIAotICAgKGkuZS4sICd3aW5lIC1kZWJ1Z21zZyArcmVsYXkgc29sLmV4ZScpLgotCi0JSWYgV2luZSBjcmFzaGVzIHdoaWxlIHJ1bm5pbmcgeW91ciBwcm9ncmFtLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZQotCWhhdmUgdGhpcyBpbmZvcm1hdGlvbiB0byBoYXZlIGEgY2hhbmNlIGF0IGZpZ3VyaW5nIG91dCB3aGF0IGlzIGNhdXNpbmcKLQl0aGUgY3Jhc2guICBUaGlzIGNhbiBwdXQgb3V0IHF1aXRlIGEgbG90IChzZXZlcmFsIE1CKSBvZiBpbmZvcm1hdGlvbiwKLQl0aG91Z2gsIHNvIGl0J3MgYmVzdCB0byBvdXRwdXQgaXQgdG8gYSBmaWxlLiAgV2hlbiB0aGUgV2luZS1kYmc+IHByb21wdAotCWFwcGVhcnMsIHR5cGUgJ3F1aXQnLgotCi0JWW91IG1pZ2h0IHdhbnQgdG8gdHJ5ICtyZWxheSwrc25vb3AgaW5zdGVhZCBvZiArcmVsYXksIGJ1dCBwbGVhc2Ugbm90ZQotICAgIHRoYXQgK3Nub29wIGlzIHByZXR0eSB1bnN0YWJsZSBhbmQgb2Z0ZW4gd2lsbCBjcmFzaCBlYXJsaWVyIHRoYW4gYQotICAgIHNpbXBsZSArcmVsYXkgIQotCUlmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gcGxlYXNlIHVzZSAqb25seSogK3JlbGF5ICEhCi0JQSBidWcgcmVwb3J0IHdpdGggYSBjcmFzaCBpbiArc25vb3AgY29kZSBpcyB1c2VsZXNzIGluIG1vc3QgY2FzZXMgIQotCi0JVG8gZ2V0IHRoZSB0cmFjZSBvdXRwdXQsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgotCi0JYWxsIHNoZWxsczoKLQkgICAgZWNobyBxdWl0fHdpbmUgLWRlYnVnbXNnICtyZWxheSBbb3RoZXJfb3B0aW9uc10gcHJvZ3JhbV9uYW1lID4mIGZpbGVuYW1lLm91dDsgdGFpbCAtbiAxMDAgZmlsZW5hbWUub3V0ID4gcmVwb3J0X2ZpbGUKLQkoVGhpcyB3aWxsIHByaW50IHdpbmUncyBkZWJ1ZyBtc2dzIG9ubHkgdG8gdGhlIGZpbGUgYW5kIHRoZW4KLQlhdXRvLXF1aXQuIEl0J3MgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gdXNlIHRoaXMgY29tbWFuZCwgc2luY2Ugd2luZQotCXByaW50cyBvdXQgc28gbWFueSBkZWJ1ZyBtc2dzIHRoYXQgdGhleSBmbG9vZCB0aGUgdGVybWluYWwsIGVhdGluZyBDUFUuKQotCQotCXRjc2ggYW5kIG90aGVyIGNzaC1saWtlIHNoZWxsczoKLQotCSAgICB3aW5lIC1kZWJ1Z21zZyArcmVsYXkgW290aGVyX29wdGlvbnNdIHByb2dyYW1fbmFtZSB8JiB0ZWUgZmlsZW5hbWUub3V0Ci0JICAgIHRhaWwgLTEwMCBmaWxlbmFtZS5vdXQgPiByZXBvcnRfZmlsZQotCi0JYmFzaCBhbmQgb3RoZXIgc2gtbGlrZSBzaGVsbHM6Ci0KLQkgICAgd2luZSAtZGVidWdtc2cgK3JlbGF5IFtvdGhlcl9vcHRpb25zXSBwcm9ncmFtX25hbWUgMj4mMSB8IHRlZSBmaWxlbmFtZS5vdXQKLQkgICAgdGFpbCAtMTAwIGZpbGVuYW1lLm91dCA+IHJlcG9ydF9maWxlCi0KLQkncmVwb3J0X2ZpbGUnIHdpbGwgbm93IGNvbnRhaW4gdGhlIGxhc3QgaHVuZHJlZCBsaW5lcyBvZiB0aGUgZGVidWdnaW5nCi0Jb3V0cHV0LCBpbmNsdWRpbmcgdGhlIHJlZ2lzdGVyIGR1bXAgYW5kIGJhY2t0cmFjZSwgd2hpY2ggYXJlIHRoZSBtb3N0Ci0JaW1wb3J0YW50IHBpZWNlcyBvZiBpbmZvcm1hdGlvbi4gIFBsZWFzZSBkbyBub3QgZGVsZXRlIHRoaXMgcGFydCwgZXZlbgotCWlmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgaXQgbWVhbnMuCi0KLTMpIFBvc3QgeW91ciByZXBvcnQgdG8gdGhlIG5ld3Nncm91cCBjb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmUKLQotCUluIHlvdXIgcG9zdCwgaW5jbHVkZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGZyb20gcGFydCAxKSwgYW5kIGluc2VydAotCXRoZSB0ZXh0IGZyb20gdGhlIG91dHB1dCBmaWxlIGluIHBhcnQgMikuICBJZiB5b3UgZG8gdGhpcywgeW91ciBjaGFuY2VzCi0Jb2YgcmVjZWl2aW5nIHNvbWUgc29ydCBvZiBoZWxwZnVsIHJlc3BvbnNlIHNob3VsZCBiZSB2ZXJ5IGdvb2QuCi0KLTQpIFF1ZXN0aW9ucyBhbmQgY29tbWVudHMKLQotCUlmIGFmdGVyIHJlYWRpbmcgdGhpcyBkb2N1bWVudCB0aGVyZSBpcyBzb21ldGhpbmcgeW91IGNvdWxkbid0IGZpZ3VyZQotCW91dCwgb3IgdGhpbmsgY291bGQgYmUgZXhwbGFpbmVkIGJldHRlciwgb3IgdGhhdCBzaG91bGQgaGF2ZSBiZWVuCi0JaW5jbHVkZWQsIHBsZWFzZSBwb3N0IHRvIGNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZSB0byBsZXQgdXMga25vdwotCWhvdyB0aGlzIGRvY3VtZW50IGNhbiBiZSBpbXByb3ZlZC4KLQotCi0KLUhvdyB0byBkbyByZWdyZXNzaW9uIHRlc3RpbmcgdXNpbmcgQ3ZzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgcHJvYmxlbSB0aGF0IGNhbiBoYXBwZW4gc29tZXRpbWVzIGlzICdpdCB1c2VkIHRvIHdvcmsgYmVmb3JlLAotbm93IGl0IGRvZXNuJ3QgYW55bW9yZS4uLicuIEhlcmUgaXMgYSBzdGVwIGJ5IHN0ZXAgcHJvY2VkdXJlIHRvCi10cnkgdG8gcGlucG9pbnQgd2hlbiB0aGUgcHJvYmxlbSBvY2N1cmVkLiBUaGlzIGlzICpOT1QqIGZvciBjYXN1YWwKLXVzZXJzLgotCi0xKSBnZXQgdGhlICdmdWxsIGN2cycgYXJjaGl2ZSBmcm9tIHdpbmVocS4KLVRoaXMgYXJjaGl2ZSBpcyB0aGUgY3ZzIHRyZWUgYnV0IHdpdGggdGhlIHRhZ3MgY29udHJvbGluZyB0aGUgdmVyc2lvbmluZwotc3lzdGVtLiBJdCdzIGEgYmlnIGZpbGUgKD4gMTUgbWVnKSB3aXRoIGEgbmFtZSBsaWtlIGZ1bGwtY3ZzLTxsYXN0IHVwZGF0ZSBkYXRlPgotKGl0J3MgbW9yZSB0aGFuIDEwMG1iIHdoZW4gdW5jb21wcmVzc2VkLCB5b3UgY2FuJ3QgdmVyeSB3ZWxsIGRvIHRoaXMgCi13aXRoIHNtYWxsLCBvbGQgY29tcHV0ZXJzIG9yIHNsb3cgSW50ZXJuZXQgY29ubmVjdGlvbnMpCi0KLTIpIHVudGFyIGl0IGludG8gYSByZXBvc2l0b3J5IGRpcmVjdG9yeSA6Ci0KLWNkIC9ob21lL2dlcmFyZAotdGFyIC16eGZmdWxsLWN2cy0yMDAwLTA1LTIwLnRhci5negotbXYgd2luZSByZXBvc2l0b3J5Ci0KLTMpIGV4dHJhY3QgYSBuZXcgZGVzdGluYXRpb24gZGlyZWN0b3J5Ci1UaGlzIGRpcmVjdG9yeSBtdXN0IG5vdCBiZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSBlbHNlCi1jdnMgd2lsbCB0aGluayBpdCdzIHBhcnQgb2YgdGhlIHJlcG9zaXRvcnkgYW5kIGRlbnkgeW91IGFuIGV4dHJhY3Rpb24KLWluIHRoZSByZXBvc2l0b3J5IDoKLQotY2QgL2hvbWUvZ2VyYXJkCi1tdiB3aW5lIHdpbmVfY3VycmVudCAoLT4gdGhpcyBwcm90ZWN0cyB5b3VyIGN1cnJlbnQgd2luZSBzYW5kYm94LCBpZiBhbnkpCi1leHBvcnQgQ1ZTUk9PVD0vaG9tZS9nZXJhcmQvcmVwb3NpdG9yeQotY2QgL2hvbWUvZ2VyYXJkCi1jdnMgLWQgJENWU1JPT1QgY2hlY2tvdXQgd2luZQotCi1Ob3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gZG8gYSBjaGVja291dCBhdCBhIGdpdmVuIGRhdGU7IHlvdQotYWx3YXlzIGRvIHRoZSBjaGVja291dCBmb3IgdGhlIGxhc3QgZGF0ZSB3aGVyZSB0aGUgZnVsbC1jdnMteHh4IHNuYXBzaG90Ci13YXMgZ2VuZXJhdGVkLgotCi00KSB5b3Ugd2lsbCBoYXZlIG5vdyBpbiB0aGUgfi93aW5lIGRpcmVjdG9yeSBhbiBpbWFnZSBvZiB0aGUgY3ZzIHRyZWUsCi1vbiB0aGUgY2xpZW50IHNpZGUuCi1Ob3cgdXBkYXRlIHRoaXMgaW1hZ2UgdG8gdGhlIGRhdGUgeW91IHdhbnQgOgotCi1jZCAvaG9tZS9nZXJhcmQvd2luZQotY3ZzIC1kICRDVlNST09UIHVwZGF0ZSAtRCAiMTk5OS0wNi0wMSIgICAKLQotVGhlIGRhdGUgZm9ybWF0IGlzIFlZWVktTU0tREQuCi0KLU1hbnkgbWVzc2FnZXMgd2lsbCBpbmZvcm0geW91IHRoYXQgbW9yZSByZWNlbnQgZmlsZXMgaGF2ZSBiZWVuCi1kZWxldGVkIHRvIHNldCBiYWNrIHRoZSBjbGllbnQgY3ZzIHRyZWUgdG8gdGhlIGRhdGUgeW91IGFza2VkLAotZm9yIGV4YW1wbGUgOgotCi1jdnMgdXBkYXRlOiB0c3gxMS90c194Zjg2ZGdhMi5jIGlzIG5vIGxvbmdlciBpbiB0aGUgcmVwb3NpdG9yeQotCi1DdnMgdXBkYXRlIGlzIG5vdCBsaW1pdGVkIHRvIHVwZ3JhZGUgdG8gYSAqbmV3ZXIqIHZlcnNpb24gYXMKLUkgaGF2ZSBiZWxpZXZlZCBmb3IgZmFyIHRvbyBsb25nIDotKAotCi01KSBOb3cgcHJvY2VlZCBhcyBmb3IgYSBub3JtYWwgdXBkYXRlIDoKLQotLi9jb25maWd1cmUKLW1ha2UgZGVwZW5kICYmIG1ha2UKLQotV2hlbiB5b3UgaGF2ZSBmb3VuZCB0aGUgZXhhY3QgZGF0ZSB3aGVuIGEgYnVnIHdhcwotYWRkZWQgdG8gQ3ZzLCB1c2Ugc29tZXRoaW5nIGxpa2UgOgotCi1jdnMgLWQgJENWU1JPT1QgZGlmZiAtRCAiMTk5OS0wNy0xMCIgLUQgIjE5OTktMDctMTIiCi0KLXRvIGdldCBhbGwgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGxhc3QgY3ZzIHZlcnNpb24KLWtub3duIHRvIHdvcmsgYW5kIGNvZGUgdGhhdCBmaXJzdCBkaXNwbGF5ZWQgdGhlIG1pc2JlaGF2aW9yLgotCi0gWyBJIGRpZCBub3QgaW5jbHVkZSBmbGFncyBmb3IgZGlmZiBzaW5jZSB0aGV5IGFyZSBpbiBteSAuY3ZzcmMgZmlsZSA6Ci0gICBjdnMgLXogMwotICAgdXBkYXRlIC1kUEEKLSAgIGRpZmYgLXUKLSBdCi0KLUZyb20gdGhpcyBkaWZmIGZpbGUsIHBhcnRpY3VsYXJseSAgdGhlIGZpbGUgbmFtZXMsIGFuZCB0aGUKLUNoYW5nZUxvZywgaXQncyB1c3VhbGx5IHBvc3NpYmxlIHRvIGZpbmQgdGhlIGRpZmZlcmVudCBpbmRpdmlkdWFsCi1wYXRjaGVzIHRoYXQgd2VyZSBkb25lIGF0IHRoaXMgdGltZS4gCi0KLUlmIGFueSBub24tcHJvZ3JhbW1lciByZWFkcyB0aGlzLCB0aGUgZmFzdGVkIG1ldGhvZCB0byBnZXQKLWF0IHRoZSBwb2ludCB3aGVyZSB0aGUgcHJvYmxlbSBvY2N1cmVkIGlzIHRvIHVzZSBhIGJpbmFyeQotc2VhcmNoLCB0aGF0IGlzLCBpZiB0aGUgcHJvYmxlbSBvY2N1cmVkIGluIDE5OTksIHN0YXJ0IGF0IG1pZC15ZWFyLAotdGhlbiBpcyB0aGUgcHJvYmxlbSBpcyBhbHJlYWR5IGhlcmUsIGJhY2sgdG8gMXN0IGF2cmlsLCBpZiBub3QsCi10byAxc3Qgb2N0b2JlciwgYW5kIHNvIG9uLgotCi02KSBUaGUgbmV4dCBzdGVwIGlzIHRvIHN0YXJ0IGZyb20gdGhlIGxhc3Qgd29ya2luZyB2ZXJzaW9uCi1hbmQgdG8gZGlnIHRoZSBpbmRpdmlkdWFsIGNvbnRyaWJ1dGlvbnMgZnJvbQotaHR0cDovL3d3dy5pbnRlZ3JpdGEuY29tL2NnaS1sb2NhbC9sd2dhdGUucGwvV0lORS1QQVRDSEVTLwotKHdoZXJlIHRoZSBXaW5lIHBhdGNoZXMgbWFpbGluZyBsaXN0IGlzIGFyY2hpdmVkKQotCi1JZiB0aGUgcGF0Y2ggd2FzIGRvbmUgYnkgdGhlIFdpbmUgbWFpbnRhaW5lciBvciBpZiBpdCB3YXMKLXNlbnQgZGlyZWN0bHkgdG8gaGlzIG1haWwgYWRkcmVzcyB3aXRob3V0IGdvaW5nIGZpcnN0IHRocm91Z2gKLXdpbmUtcGF0Y2hlcywgeW91IGFyZSBvdXQgb2YgbHVjayBhcyB5b3Ugd2lsbCBuZXZlciBmaW5kIHRoZQotcGF0Y2ggaW4gdGhlIGFyY2hpdmUuCi1JZiBpdCBpcywgaXQncyBvZnRlbiBwb3NzaWJsZSB0byBhcHBseSB0aGUgcGF0Y2hlcyBvbmUgYnkKLW9uZSB0byBsYXN0IHdvcmtpbmcgQ3ZzLCBjb21waWxlIGFuZCB0ZXN0LiBJZiB5b3UgaGF2ZSBzYXZlZAotdGhlIG5leHQgY2FuZGlkYXRlIGFzIC9ob21lL2dlcmFyZC9idWdnZWRwYXRjaDEudHh0IDoKLQotY2QgL2hvbWUvZ2VyYXJkL3dpbmUKLXBhdGNoIC1wIDAgPC9ob21lL2dlcmFyZC9idWdnZWRwYXRjaDEudHh0Ci0KLUJld2FyZSB0aGF0IHRoZSBjb21taXR0ZWQgcGF0Y2ggaXMgbm90IGFsd2F5cyBpZGVudGljYWwgdG8KLXRoZSBwYXRjaCB0aGF0IHRoZSBhdXRob3Igc2VudCB0byB3aW5lLXBhdGNoZXMsIGFzIHNvbWV0aW1lcwotdGhlIFdpbmUgbWFpbnRhaW5lciBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4KLQotSWYgeW91IGZpbmQgb25lIHBhdGNoIHRoYXQgaXMgZ2V0dGluZyB0aGUgQ3ZzIHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSwKLXlvdSBoYXZlIGFsbW9zdCB3b247IHBvc3QgdGhlIHByb2JsZW0gb24gCi1jb21wLmVtdWxhdG9ycy53aW5kb3dzLndpbmUKLWFuZCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSBhdXRob3Igd2lsbCBqdW1wIGluIHRvIHN1Z2dlc3QgYSBmaXg7Ci1vciB0aGVyZSBpcyBhbHdheXMgdGhlIHBvc3NpYmlsaXR5IHRvIGxvb2sgaGFyZCBhdCB0aGUgcGF0Y2ggdW50aWwgaXQKLWlzIGNvZXJjZWQgdG8gcmV2ZWFsIHdoZXJlIGlzIHRoZSBidWcgOi0pIApkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9idWdzLnNnbWwgYi9kb2N1bWVudGF0aW9uL2J1Z3Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWYxYzRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9idWdzLnNnbWwKQEAgLTAsMCArMSwyMTYgQEAKKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgIDx0aXRsZT5GaW5kaW5nIGFuZCBSZXBvcnRpbmcgQnVnczwvdGl0bGU+CisKKyAgICA8c2VjdDEgaWQ9ImJ1Zy1yZXBvcnRpbmciPgorICAgICAgPHRpdGxlPkhvdyBUbyBSZXBvcnQgQSBCdWc8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSBHZXJhcmQgUGF0ZWwgKD8/PykKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgdHdvIHdheXMgZm9yIHlvdSB0byBtYWtlIGEgYnVnIHJlcG9ydC4gT25lIHVzZXMgYQorICAgICAgICBzaW1wbGUgcGVybCBzY3JpcHQsIGFuZCBpcyByZWNvbW1lbmRlZCBpZiB5b3UgZG9uJ3Qgd2FudCB0bworICAgICAgICBzcGVuZCBhIGxvdCBvZiB0aW1lIHByb2R1Y2luZyB0aGUgcmVwb3J0LiBJdCBpcyBkZXNpZ25lZCBmb3IKKyAgICAgICAgdXNlIGJ5IGp1c3QgYWJvdXQgYW55b25lLCBmcm9tIHRoZSBuZXdlc3Qgb2YgbmV3YmllcyB0bworICAgICAgICBhZHZhbmNlZCBkZXZlbG9wZXJzLiBZb3UgY2FuIGFsc28gbWFrZSBhIGJ1ZyByZXBvcnQgdGhlIGhhcmQKKyAgICAgICAgd2F5IC0tIGFkdmFuY2VkIGRldmVsb3BlcnMgd2lsbCBwcm9iYWJseSBwcmVmZXIgdGhpcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VGhlIEVhc3kgV2F5PC90aXRsZT4KKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBZb3VyIGNvbXB1dGVyICptdXN0KiBoYXZlIHBlcmwgb24gaXQgZm9yIHRoaXMgbWV0aG9kIHRvCisgICAgICAgICAgICAgIHdvcmsuIFRvIGZpbmQgb3V0IGlmIHlvdSBoYXZlIHBlcmwsIHJ1biA8Y29tbWFuZD53aGljaAorICAgICAgICAgICAgICAgIHBlcmw8L2NvbW1hbmQ+LiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2Jpbi9wZXJsPC9maWxlbmFtZT4sIHlvdSdyZSBpbiBidXNpbmVzcy4KKyAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBza2lwIG9uIGRvd24gdG8gIlRoZSBIYXJkIFdheSIuIElmIHlvdSBhcmVuJ3QKKyAgICAgICAgICAgICAgc3VyZSwganVzdCBrZWVwIG9uIGdvaW5nLiBXaGVuIHlvdSB0cnkgdG8gcnVuIHRoZQorICAgICAgICAgICAgICBzY3JpcHQsIGl0IHdpbGwgYmVjb21lICp2ZXJ5KiBhcHBhcmVudCBpZiB5b3UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgICBwZXJsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENoYW5nZSBkaXJlY3RvcnkgdG8gPGZpbGVuYW1lPiZsdDtkaXJzIHRvCisgICAgICAgICAgICAgICAgd2luZT4vdG9vbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUeXBlIGluIDxjb21tYW5kPi4vYnVnX3JlcG9ydC5wbDwvY29tbWFuZD4gYW5kIGZvbGxvdworICAgICAgICAgICAgICAgIHRoZSBkaXJlY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFBvc3QgYSBtZXNzYWdlIHRvIHRoZQorICAgICAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+CisgICAgICAgICAgICAgIG5ld3Nncm91cCB3aXRoIHRoZSAiTmljZSBGb3JtYXR0ZWQgUmVwb3J0IiBhdHRhdGNoZWQuIElmCisgICAgICAgICAgICAgIHBvc3NpYmxlLCB1cGxvYWQgdGhlIGZ1bGwgZGVidWcgb3V0cHV0IHRvIGEgd2ViL2Z0cAorICAgICAgICAgICAgICBzZXJ2ZXIgYW5kIHByb3ZpZGUgdGhlIGFkZHJlc3MgaW4geW91ciBtZXNzYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5UaGUgSGFyZCBXYXk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTb21lIHNpbXBsZSBhZHZpY2Ugb24gbWFraW5nIHlvdXIgYnVnIHJlcG9ydCBtb3JlIHVzZWZ1bAorICAgICAgICAgIChhbmQgdGh1cyBtb3JlIGxpa2VseSB0byBnZXQgYW5zd2VyZWQgYW5kIGZpeGVkKToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+UG9zdCBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlLjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGlzIG1lYW5zIHdlIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIGEgc2ltcGxlICJNUworICAgICAgICAgICAgICBXb3JkIGNyYXNoZXMgd2hlbmV2ZXIgSSBydW4gaXQuICBEbyB5b3Uga25vdyB3aHk/IgorICAgICAgICAgICAgICBJbmNsdWRlIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VmVyc2lvbiBvZiBXaW5lIHlvdSdyZSB1c2luZyAocnVuIDxjb21tYW5kPndpbmUKKyAgICAgICAgICAgICAgICAgICAgLXY8L2NvbW1hbmQ+KTwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgT3BlcmF0aW5nIHN5c3RlbSB5b3UncmUgdXNpbmcsIHdoYXQgZGlzdHJpYnV0aW9uIChpZgorICAgICAgICAgICAgICAgICAgYW55KSwgYW5kIHdoYXQgdmVyc2lvbgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkNvbXBpbGVyIGFuZCB2ZXJzaW9uIChydW4gPGNvbW1hbmQ+Z2NjIC12PC9jb21tYW5kPik8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5XaW5kb3dzIHZlcnNpb24sIGlmIGluc3RhbGxlZDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgUHJvZ3JhbSB5b3UncmUgdHJ5aW5nIHRvIHJ1biwgaXRzIHZlcnNpb24gbnVtYmVyLAorICAgICAgICAgICAgICAgICAgYW5kIGEgVVJMIGZvciAgd2hlcmUgdGhlIHByb2dyYW0gY2FuIGJlIG9idGFpbmVkIChpZgorICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkNvbW1hbmQgbGluZSB5b3UgdXNlZCB0byBzdGFydCB3aW5lPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBBbnkgb3RoZXIgaW5mb3JtYXRpb24geW91IHRoaW5rIG1heSBiZSByZWxldmFudCBvcgorICAgICAgICAgICAgICAgICAgaGVscGZ1bCwgc3VjaCBhcyBYIHNlcnZlciB2ZXJzaW9uIGluIGNhc2Ugb2YgWAorICAgICAgICAgICAgICAgICAgcHJvYmxlbXMsIGxpYmMgdmVyc2lvbiBldGMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgUmUtcnVuIHRoZSBwcm9ncmFtIHdpdGggdGhlIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZworICAgICAgICAgICAgICAgICtyZWxheTwvcGFyYW1ldGVyPiBvcHRpb24gKGkuZS4sIDxjb21tYW5kPndpbmUKKyAgICAgICAgICAgICAgICAtLWRlYnVnbXNnICtyZWxheSBzb2wuZXhlPC9jb21tYW5kPikuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSWYgV2luZSBjcmFzaGVzIHdoaWxlIHJ1bm5pbmcgeW91ciBwcm9ncmFtLCBpdCBpcworICAgICAgICAgICAgICBpbXBvcnRhbnQgdGhhdCB3ZSBoYXZlIHRoaXMgaW5mb3JtYXRpb24gdG8gaGF2ZSBhIGNoYW5jZQorICAgICAgICAgICAgICBhdCBmaWd1cmluZyBvdXQgd2hhdCBpcyBjYXVzaW5nIHRoZSBjcmFzaC4gIFRoaXMgY2FuIHB1dAorICAgICAgICAgICAgICBvdXQgcXVpdGUgYSBsb3QgKHNldmVyYWwgTUIpIG9mIGluZm9ybWF0aW9uLCB0aG91Z2gsIHNvCisgICAgICAgICAgICAgIGl0J3MgYmVzdCB0byBvdXRwdXQgaXQgdG8gYSBmaWxlLiAgV2hlbiB0aGUgPHByb21wdD5XaW5lLWRiZz48L3Byb21wdD4KKyAgICAgICAgICAgICAgcHJvbXB0IGFwcGVhcnMsIHR5cGUgPHVzZXJpbnB1dD5xdWl0PC91c2VyaW5wdXQ+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIHRyeQorICAgICAgICAgICAgICA8cGFyYW1ldGVyPityZWxheSwrc25vb3A8L3BhcmFtZXRlcj4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICA8cGFyYW1ldGVyPityZWxheTwvcGFyYW1ldGVyPiwgYnV0IHBsZWFzZSBub3RlIHRoYXQKKyAgICAgICAgICAgICAgPHBhcmFtZXRlcj4rc25vb3A8L3BhcmFtZXRlcj4gaXMgcHJldHR5IHVuc3RhYmxlIGFuZAorICAgICAgICAgICAgICBvZnRlbiB3aWxsIGNyYXNoIGVhcmxpZXIgdGhhbiBhIHNpbXBsZQorICAgICAgICAgICAgICA8cGFyYW1ldGVyPityZWxheTwvcGFyYW1ldGVyPiEgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlbgorICAgICAgICAgICAgICBwbGVhc2UgdXNlICpvbmx5KiA8cGFyYW1ldGVyPityZWxheTwvcGFyYW1ldGVyPiEhIEEgYnVnCisgICAgICAgICAgICAgIHJlcG9ydCB3aXRoIGEgY3Jhc2ggaW4gPHBhcmFtZXRlcj4rc25vb3A8L3BhcmFtZXRlcj4KKyAgICAgICAgICAgICAgY29kZSBpcyB1c2VsZXNzIGluIG1vc3QgY2FzZXMhCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVG8gZ2V0IHRoZSB0cmFjZSBvdXRwdXQsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgIDx0ZXJtPmFsbCBzaGVsbHM6PC90ZXJtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxzY3JlZW4+Cis8cHJvbXB0PiQgPC9wcm9tcHQ+ZWNobyBxdWl0IHwgd2luZSAtZGVidWdtc2cgK3JlbGF5IFtvdGhlcl9vcHRpb25zXSBwcm9ncmFtX25hbWUgPiYgZmlsZW5hbWUub3V0OyAKKzxwcm9tcHQ+JCA8L3Byb21wdD50YWlsIC1uIDEwMCBmaWxlbmFtZS5vdXQgPiByZXBvcnRfZmlsZQorICAgICAgICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgKFRoaXMgd2lsbCBwcmludCB3aW5lJ3MgZGVidWcgbWVzc2FnZXMgb25seSB0byB0aGUgZmlsZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICBhdXRvLXF1aXQuIEl0J3MgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gdXNlIHRoaXMgY29tbWFuZCwgc2luY2Ugd2luZQorICAgICAgICAgICAgICAgICAgICBwcmludHMgb3V0IHNvIG1hbnkgZGVidWcgbXNncyB0aGF0IHRoZXkgZmxvb2QgdGhlIHRlcm1pbmFsLCBlYXRpbmcgQ1BVLikKKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4JCisgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgICAgPHRlcm0+dGNzaCBhbmQgb3RoZXIgY3NoLWxpa2Ugc2hlbGxzOjwvdGVybT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8c2NyZWVuPgorPHByb21wdD4kIDwvcHJvbXB0PndpbmUgLWRlYnVnbXNnICtyZWxheSBbb3RoZXJfb3B0aW9uc10gcHJvZ3JhbV9uYW1lIHwmIHRlZSBmaWxlbmFtZS5vdXQ7Cis8cHJvbXB0PiQgPC9wcm9tcHQ+dGFpbCAtMTAwIGZpbGVuYW1lLm91dCA+IHJlcG9ydF9maWxlCisgICAgICAgICAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgICA8dGVybT5iYXNoIGFuZCBvdGhlciBzaC1saWtlIHNoZWxsczo8L3Rlcm0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHNjcmVlbj4KKzxwcm9tcHQ+JCA8L3Byb21wdD53aW5lIC1kZWJ1Z21zZyArcmVsYXkgW290aGVyX29wdGlvbnNdIHByb2dyYW1fbmFtZSAyPiYxIHwgdGVlIGZpbGVuYW1lLm91dDsKKzxwcm9tcHQ+JCA8L3Byb21wdD50YWlsIC0xMDAgZmlsZW5hbWUub3V0ID4gcmVwb3J0X2ZpbGUKKyAgICAgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcG9ydF9maWxlPC9maWxlbmFtZT4gd2lsbCBub3cgY29udGFpbiB0aGUKKyAgICAgICAgICAgICAgbGFzdCBodW5kcmVkIGxpbmVzIG9mIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0LCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGR1bXAgYW5kIGJhY2t0cmFjZSwgd2hpY2ggYXJlIHRoZSBtb3N0CisgICAgICAgICAgICAgIGltcG9ydGFudCBwaWVjZXMgb2YgaW5mb3JtYXRpb24uICBQbGVhc2UgZG8gbm90IGRlbGV0ZQorICAgICAgICAgICAgICB0aGlzIHBhcnQsIGV2ZW4gaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgd2hhdCBpdCBtZWFucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBQb3N0IHlvdXIgcmVwb3J0IHRvIHRoZSBuZXdzZ3JvdXAKKyAgICAgICAgICAgICAgPHN5c3RlbWl0ZW0+Y29tcC5lbXVsYXRvcnMubXMtd2luZG93cy53aW5lPC9zeXN0ZW1pdGVtPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEluIHlvdXIgcG9zdCwgaW5jbHVkZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGZyb20gcGFydAorICAgICAgICAgICAgICAxKSwgYW5kIGluc2VydCB0aGUgdGV4dCBmcm9tIHRoZSBvdXRwdXQgZmlsZSBpbiBwYXJ0IDIpLgorICAgICAgICAgICAgICBJZiB5b3UgZG8gdGhpcywgeW91ciBjaGFuY2VzIG9mIHJlY2VpdmluZyBzb21lIHNvcnQgb2YKKyAgICAgICAgICAgICAgaGVscGZ1bCByZXNwb25zZSBzaG91bGQgYmUgdmVyeSBnb29kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5RdWVzdGlvbnMgYW5kIGNvbW1lbnRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgYWZ0ZXIgcmVhZGluZyB0aGlzIGRvY3VtZW50IHRoZXJlIGlzIHNvbWV0aGluZyB5b3UKKyAgICAgICAgICBjb3VsZG4ndCBmaWd1cmUgb3V0LCBvciB0aGluayBjb3VsZCBiZSBleHBsYWluZWQgYmV0dGVyLCBvcgorICAgICAgICAgIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCwgcGxlYXNlIHBvc3QgdG8KKyAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+IHRvCisgICAgICAgICAgbGV0IHVzIGtub3cgaG93IHRoaXMgZG9jdW1lbnQgY2FuIGJlIGltcHJvdmVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9idWlsZC5zZ21sIGIvZG9jdW1lbnRhdGlvbi9idWlsZC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2J1aWxkLnNnbWwKQEAgLTAsMCArMSwxMSBAQAorICA8Y2hhcHRlciBpZD0iYnVpbGQiPgorICAgIDx0aXRsZT5UaGUgV2luZSBCdWlsZCBTeXN0ZW08L3RpdGxlPgorICAgIDxwYXJhPkhvdyB0aGUgV2luZSBidWlsZCBzeXN0ZW0gd29ya3MsIGFuZCBob3cgdG8gdHdlYWsgaXQuLi48L3BhcmE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVscyBiL2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTNiYzdjLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotICAgICAgICAgICAgICAgRHJpdmUgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyB3aXRoIHdpbmUKLSAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICBVbnRpbCBub3csIHlvdXIgb25seSBwb3NzaWJpbGl0eSBvZiBzcGVjaWZ5aW5nIGRyaXZlIHZvbHVtZSBsYWJlbHMKLWFuZCBzZXJpYWwgbnVtYmVycyB3YXMgdG8gc2V0IHRoZW0gbWFudWFsbHkgaW4gdGhlIHdpbmUgY29uZmlnIGZpbGUuCi1CeSBub3csIHdpbmUgY2FuIHJlYWQgdGhlbSBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UgYXMgd2VsbC4gVGhpcyBtYXkgYmUKLXVzZWZ1bCBmb3IgbWFueSBXaW4gOXggZ2FtZXMgb3IgZm9yIHNldHVwIHByb2dyYW1zIGRpc3RyaWJ1dGVkIG9uIENELVJPTXMKLXRoYXQgY2hlY2sgZm9yIHZvbHVtZSBsYWJlbC4KLQotV0hBVCdTIFNVUFBPUlRFRCA/Ci0KLSAgICAqICBGQVQgc3lzdGVtcyAodHlwZXMgJ2hkJyBhbmQgJ2Zsb3BweScpOiByZWFkcyBsYWJlbHMgYW5kIHNlcmlhbCBudW0ncy4KLSAgICAqICBJc285NjYwICgnY2Ryb20nKTogICAgICAgICAgICAgICAgICAgICByZWFkcyBsYWJlbHMgb25seS4KLQotSE9XIFRPIFNFVCBVUCA/Ci0KLQlSZWFkaW5nIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMganVzdCB3b3JrcyBhdXRvbWFnaWNhbGx5IGlmCi15b3Ugc3BlY2lmeSBhICdEZXZpY2U9JyBsaW5lIGluIHRoZSBbRHJpdmUgWF0gc2VjdGlvbiBpbiB5b3VyIHdpbmUuY29uZi4KLU5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyB0byBleGlzdCBhbmQgbXVzdCBiZSBhY2Nlc3NpYmxlIGlmIHlvdSBkbyB0aGlzLAotdGhvdWdoLgotSWYgeW91IGRvbid0IGRvIHRoYXQsIHRoZW4geW91IHNob3VsZCBnaXZlIGZpeGVkICdMYWJlbD0nIG9yICdTZXJpYWw9JyBlbnRyaWVzCi1pbiB3aW5lLmNvbmYsIGFzIFdpbmUgcmV0dXJucyB0aGVzZSBlbnRyaWVzIGluc3RlYWQgaWYgbm8gZGV2aWNlIGlzIGdpdmVuLgotSWYgdGhleSBkb24ndCBleGlzdCwgdGhlbiBXaW5lIHdpbGwgcmV0dXJuIGRlZmF1bHQgdmFsdWVzIChsYWJlbCAiRHJpdmUgWCIKLWFuZCBzZXJpYWwgMTIzNDU2NzgpLgotCi1Ob3cgYSBzZWxkb20gbmVlZGVkIG9uZToKLUlmIHlvdSB3YW50IHRvIGdpdmUgYSAnRGV2aWNlPScgZW50cnkgKm9ubHkqIGZvciBkcml2ZSByYXcgc2VjdG9yIGFjY2Vzc2VzLCBidXQKLW5vdCBmb3IgcmVhZGluZyB0aGUgdm9sdW1lIGluZm8gZnJvbSB0aGUgZGV2aWNlIChpLmUuIHlvdSB3YW50IGEgKmZpeGVkKiwKLXByZWNvbmZpZ3VyZWQgbGFiZWwpLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICdSZWFkVm9sSW5mbz0wJyB0byB0ZWxsIFdpbmUgdG8gc2tpcAotdGhlIHZvbHVtZSByZWFkaW5nLgotCi1FWEFNUExFUwotCi0qKiogU2ltcGxlIGV4YW1wbGUgb2YgY2Ryb20gYW5kIGZsb3BweTsgbGFiZWxzIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBkZXZpY2Ugb24KLWJvdGggY2Ryb20gYW5kIGZsb3BweTsgc2VyaWFsIG51bWJlcnMgb24gZmxvcHB5IG9ubHk6Ci0KLVtEcml2ZSBBXQotUGF0aD0vbW50L2Zsb3BweQotVHlwZT1mbG9wcHkKLURldmljZT0vZGV2L2ZkMAotRmlsZXN5c3RlbT1tc2RvcwotCi1bRHJpdmUgUl0KLVBhdGg9L21udC9jZHJvbQotVHlwZT1jZHJvbQotRGV2aWNlPS9kZXYvaGRhMQotRmlsZXN5c3RlbT13aW45NQotCi0qKiogQ0QtUk9NLiBXZSB3YW50IHRvIG92ZXJyaWRlIHRoZSBsYWJlbDoKLQotW0RyaXZlIEpdCi1QYXRoPS9tbnQvY2Ryb20KLVR5cGU9Y2Ryb20KLUxhYmVsPVgyMzRHQ0RTRQotOyBub3RlIHRoYXQgdGhlIGRldmljZSBpc24ndCByZWFsbHkgbmVlZGVkIGhlcmUgYXMgd2UgaGF2ZSBhIGZpeGVkIGxhYmVsCi1EZXZpY2U9L2Rldi9jZHJvbQotRmlsZXN5c3RlbT1tc2RvcwotCi1UT0RPIC8gT1BFTiBJU1NVRVMKLQotIC0gVGhlIGNkcm9tIGxhYmVsIGNhbiBiZSByZWFkIG9ubHkgaWYgdGhlIGRhdGEgdHJhY2sgb2YgdGhlIGRpc2sgcmVzaWRlcyBpbgotdGhlIGZpcnN0IHRyYWNrIGFuZCB0aGUgY2Ryb20gaXMgaXNvOTY2MC4KLSAtIEJldHRlciBjaGVja2luZyBmb3IgRkFUIHN1cGVyYmxvY2sgKGl0IG5vdyBjaGVjaydzIG9ubHkgb25lIGJ5dGUpLgotIC0gU3VwcG9ydCBmb3IgbGFiZWxzL3NlcmlhbCBudW0ncyBXUklUSU5HLgotIC0gQ2FuIHRoZSBsYWJlbCBiZSBsb25nZXIgdGhhbiAxMSBjaGFycz8gKGlzbzk2NjAgaGFzIDMyIGNoYXJzKS4KLSAtIFdoYXQgYWJvdXQgcmVhZGluZyBleHQyIHZvbHVtZSBsYWJlbD8gLi4uLgotCi1QZXRyIFRvbWFzZWsJCQkJY2hhbmdlcyBieToJQW5kcmVhcyBNb2hyCi08dG9tYXNla0BldGYuY3VuaS5jej4JCQkJCTxhLm1vaHJAbWFpbHRvLmRlPgotTm92IDE0IDE5OTkJCQkJCQlKYW4gMjUgMjAwMApkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMgYi9kb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiZjAzYi4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scworKysgL2Rldi9udWxsCkBAIC0xLDQzOSArMCwwIEBACi0KLSAgICAgICAgICAgICAgICAgIENPTU1PTiBDT05UUk9MUwotICAgICAgICAgICAgICB0aGVpciBkZXZlbG9wbWVudCBzdGF0dXMKLSAgICBhbmQgdGhlaXIgVU5ET0NVTUVOVEVEIGZlYXR1cmVzIGFuZCBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotMS4gSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0KLSAgVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGhlcmVpbiBpcyBiYXNlZCBvbiB0aGUgZGxsIHZlcnNpb24gNC43MiB3aGljaAotICBpcyBpbmNsdWRlZCBpbiBNUyBJbnRlcm5ldCBFeHBsb3JlciA0LjAxLgotCi0gIEFsbCBpbmZvcm1hdGlvbiBhYm91dCBjb21tb24gY29udHJvbHMgc2hvdWxkIGJlIGNvbGxlY3RlZCBpbiB0aGlzIGRvY3VtZW50LgotCi0gIEFsbCBXaW5lIHByb2dyYW1tZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGFkZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhpcyBkb2N1bWVudC4KLQotCi0yLiBHZW5lcmFsIEluZm9ybWF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgY29tbW9uIGNvbnRyb2xzIGNhbiBiZSBmb3VuZCBpbiB0aGUgTVMgUGxhdGZvcm0gU0RLCi0gIGFuZCB0aGUgTVMgSW50ZXJuZXQgQ2xpZW50IFNESyAobW9zdCByZWNlbnQpLiBJbmZvcm1hdGlvbiBmcm9tIHRoZXNlIFNESydzCi0gIHdpbGwgTk9UIGJlIHJlcGVhdGVkIGhlcmUuIE9ubHkgaW5mb3JtYXRpb24gd2hpY2ggY2FuIE5PVCBiZSBmb3VuZCBpbiB0aGVzZQotICBTREsncyB3aWxsIGJlIGNvbGxlY3RlZCBoZXJlLiBTb21lIGluZm9ybWF0aW9uIGluIHRoZSBTREsncyBtZW50aW9uZWQgYWJvdmUKLSAgaXMgKGludGVudGlvbmFsbHk/Pz8pIFdST05HLiBDb3JyZWN0aW9ucyB0byB3cm9uZyBpbmZvcm1hdGlvbiB3aWxsIGJlCi0gIGNvbGxlY3RlZCBoZXJlIHRvby4KLQotCi0yLjEgU3RydWN0dXJlIHNpemVzIG9mIGRpZmZlcmVudCBjb21tb24gY29udHJvbCB2ZXJzaW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhlIGNvbW1vbiBjb250cm9scyBoYXZlIGJlZW4gY29udGlub3VzbHkgaW1wcm92ZWQgaW4gdGhlIHBhc3QuIFNvbWUgb2YgdGhlCi0gIG9yaWduYWwgc3RydWN0dXJlcyBoYWQgdG8gYmUgZXh0ZW5kZWQgYW5kIHRoZWlyIHNpemUgY2hhbmdlZC4gTW9zdCBvZiB0aGUKLSAgY29tbW9uIGNvbnRyb2wgc3RydWN0dXJlcyBpbmNsdWRlIHRoZWlyIHNpemUgYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gSWYKLSAgYSBjb250cm9sIGdldHMgdGhlIHdyb25nIHNpemUgaW4gYSBtZXNzYWdlIG9yIGZ1bmN0aW9uIGEgZmFpbHVyZSBpcyB2ZXJ5Ci0gIGxpa2VseSB0byBvY2N1ci4gVG8gYXZvaWQgdGhpcywgTVMgZGVmaW5lZCBuZXcgY29uc3RhbnRzIHRoYXQgcmVmbGVjdCB0aGUKLSAgc3RydWN0dXJlIHNpemUgb2Ygb2xkZXIgQ09NQ1RMMzIuRExMIHZlcnNpb25zLiBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlCi0gIHN0cnVjdHVyZSBzaXplIGNvbnN0YW50cyB0aGF0IGFyZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGUgb3JpZ2luYWwKLSAgQ09NQ1RMMzIuRExMLgotICBOT1RFOiBTb21lIHN0dWN0dXJlcyBhcmUgTk9UIGRlZmluZWQgaW4gd2luZSdzIENPTUNUTDMyIHlldC4KLQotICAgIEhESVRFTV9WMV9TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIEhESVRFTSBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjAwLgotCi0gICAgTFZDT0xVTU5fVjFfU0laRToKLSAgICAgIFRoZSBzaXplIG9mIHRoZSBMVkNPTFVNTiBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjAwLgotCi0gICAgTFZISVRURVNUSU5GT19WMV9TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIExWSElUVEVTVElORk8gc3RydWN0dXJlIGluIHZlcnNpb24gNC4wMC4KLQotICAgIExWSVRFTV9WMV9TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIExWSVRFTSBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjAwLgotCi0gICAgTk1MVkNVU1RPTURSQVdfVjNfU0laRToKLSAgICAgIFRoZSBzaXplIG9mIHRoZSBOTUxWQ1VTVE9NRFJBVyBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjcwLgotCi0gICAgTk1UVERJU1BJTkZPX1YxX1NJWkU6Ci0gICAgICBUaGUgc2l6ZSBvZiB0aGUgTk1UVERJU1BJTkZPIHN0cnVjdHVyZSBpbiB2ZXJzaW9uIDQuMDAuCi0KLSAgICBOTVRWQ1VTVE9NRFJBV19WM19TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIE5NVFZDVVNUT01EUkFXIHN0cnVjdHVyZSBpbiB2ZXJzaW9uIDQuNzAuCi0KLSAgICBQUk9QU0hFRVRIRUFERVJfVjFfU0laRToKLSAgICAgIFRoZSBzaXplIG9mIHRoZSBQUk9QU0hFRVRIRUFERVIgc3RydWN0dXJlIGluIHZlcnNpb24gNC4wMC4KLQotICAgIFBST1BTSEVFVFBBR0VfVjFfU0laRToKLSAgICAgIFRoZSBzaXplIG9mIHRoZSBQUk9QU0hFRVRQQUdFIHN0cnVjdHVyZSBpbiB2ZXJzaW9uIDQuMDAuCi0KLSAgICBSRUJBUkJBTkRJTkZPX1YzX1NJWkU6Ci0gICAgICBUaGUgc2l6ZSBvZiB0aGUgUkVCQVJCQU5ESU5GTyBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjcwLgotCi0gICAgVFRUT09MSU5GT19WMV9TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIFRPT0xJTkZPIHN0cnVjdHVyZSBpbiB2ZXJzaW9uIDQuMDAuCi0KLSAgICBUVklOU0VSVFNUUlVDVF9WMV9TSVpFOgotICAgICAgVGhlIHNpemUgb2YgdGhlIFRWSU5TRVJUU1RSVUNUIHN0cnVjdHVyZSBpbiB2ZXJzaW9uIDQuMDAuCi0KLQotMy4gQ29udHJvbHMKLS0tLS0tLS0tLS0tCi0gIFRoaXMgcGFyYWdyYXBoIGRlc2NyaWJlcyB0aGUgZGV2ZWxvcG1lbnQgc3RhdHVzIG9mIHRoZSBjb21tb24gY29udHJvbHMuCi0KLQotMy4xIEFuaW1hdGlvbiBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQXV0aG9yOgotICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotICBTdGF0dXM6Ci0gICAgICBEdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LgotCi0gIE5vdGVzOgotICAgICAgQXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz8KLQotCi0zLjIgQ29tYm8gQm94IEV4IENvbnRyb2wKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0gIFN0YXR1czoKLSAgICAgIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0KLSAgTm90ZXM6Ci0gICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwotCi0KLTMuMyBEYXRlIGFuZCBUaW1lIFBpY2tlciBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0gIFN0YXR1czoKLSAgICAgIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0KLSAgTm90ZXM6Ci0gICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwotCi0KLTMuNCBEcmFnIExpc3QgQm94IENvbnRyb2wKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQXV0aG9yOgotICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotICBTdGF0dXM6Ci0gICAgICBEdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LgotCi0gIE5vdGVzOgotICAgICAgQXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz8KLQotCi0zLjUgRmxhdCBTY3JvbGwgQmFyIENvbnRyb2wKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEFsZXggUHJpZW0uIDxhbGV4cEBzY2kua3VuLm5sPgotCi0gIFN0YXR1czoKLSAgICAgIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0KLSAgTm90ZXM6Ci0gICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwotCi0KLTMuNiBIZWFkZXIgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLSAgU3RhdHVzOgotICAgICAgQWxtb3N0IGZpbmlzaGVkLgotICAgICAgVW5pY29kZSBub3RpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIChXTV9OT1RJRllGT1JNQVQpLgotICAgICAgT3JkZXIgYXJyYXkgbm90IHN1cHBvcnRlZC4KLQotCi0zLjcgSG90IEtleSBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIER1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLSAgU3RhdHVzOgotICAgICAgRHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS4KLQotICBOb3RlczoKLSAgICAgIEF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/Ci0KLQotMy44IEltYWdlIExpc3QgKG5vIGNvbnRyb2wpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQXV0aG9yOgotICAgICAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotICBTdGF0dXM6Ci0gICAgICBBbG1vc3QgZmluaXNoZWQuCi0KLQotMy45IElQIEFkZHJlc3MgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotICAgICAgQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KLQotICBTdGF0dXM6Ci0gICAgICBVbmRlciBjb25zdHJ1Y3Rpb24uCi0KLQotMy4xMCBMaXN0IFZpZXcgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotICAgICAgTHVjIFRvdXJhbmdlYXUgPGx1Y0BtYWNhZGFtaWFuLmNvbT4KLSAgICAgIEtvZW4gRGVmb3JjaGUgPGpvemVmQGtvdG5ldC5vcmc+Ci0gICAgICBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+IGFuZCB0aGUgIkNvcmVsLVRlYW0iCi0KLSAgU3RhdHVzOgotICAgICAgVW5kZXIgY29uc3RydWN0aW9uLgotCi0gIE5vdGVzOgotICAgICAgQmFzaWMgZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZWxhdGVkIG1lc3NhZ2VzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICBObyBwYWludGluZyBzdXBwb3J0ZWQgeWV0LgotCi0KLTMuMTEgTW9udGggQ2FsZW5kYXIgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIER1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLSAgU3RhdHVzOgotICAgICAgRHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS4KLQotICBOb3RlczoKLSAgICAgIEF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/Ci0KLQotMy4xMiBOYXRpdmUgZm9udCBjb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQXV0aG9yOgotICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotICBTdGF0dXM6Ci0gICAgICBEdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LgotCi0gIE5vdGVzOgotICAgICAgQXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz8KLQotCi0zLjEzIFBhZ2VyIENvbnRyb2wKLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBEdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0gIFN0YXR1czoKLSAgICAgIFVuZGVyIGNvbnN0cnVjdGlvbi4KLSAgICAgIE1hbnkgbWlzc2luZyBmZWF0dXJlcy4KLQotICBOb3RlczoKLSAgICAgIEF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/Ci0KLQotMy4xNCBQcm9ncmVzcyBCYXIgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBieSBEaW1pdHJpZSBPLiBQYXVuLgotICAgICAgRml4ZXMgYW5kIGltcHJvdmVtZW50cyBieSBFcmljIEtvaGwuCi0KLSAgU3RhdHVzOgotICAgICAgRmluaXNoZWQhCi0KLQotMy4xNSBQcm9wZXJ0eSBTaGVldAotLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBBbmRlcnMgQ2FybHNzb24gPGFuZGVycy5jYXJsc3NvbkBsaW51eC5udT4KLSAgICAgIEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KLQotICBTdGF0dXM6Ci0gICAgICBEZXZlbG9wbWVudCBpbiBwcm9ncmVzcy4KLQotICBOb3RlczoKLSAgICAgIFRhYiBjb250cm9sIG11c3QgYmUgaW1wbGVtZW50ZWQgZmlyc3QuCi0KLQotMy4xNiBSZWJhciBDb250cm9sIChDb29sIEJhcikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLSAgU3RhdHVzOgotICAgICAgRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuCi0gICAgICBNYW55IGJ1Z3MgYW5kIG1pc3NpbmcgZmVhdHVyZXMuCi0KLSAgTm90ZXM6Ci0gICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwotCi0KLTMuMTcgU3RhdHVzIEJhciBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBieSBCcnVjZSBNaWxuZXIuCi0gICAgICBGaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGJ5IEVyaWMgS29obC4KLQotICBTdGF0dXM6Ci0gICAgICBBbG1vc3QgZmluaXNoZWQuCi0KLSAgTm90ZXM6Ci0gICAgICBUb29sdGlwIGludGVncmF0aW9uIGlzIGFsbW9zdCBjb21wbGV0ZS4KLQotCi0zLjE4IFRhYiBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzLmNhcmxzc29uQGxpbnV4Lm51PgotCi0gIFN0YXR1czoKLSAgICAgIERldmVsb3BtZW50IGluIHByb2dyZXNzLgotCi0KLTMuMTkgVG9vbGJhciBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0gIFN0YXR1czoKLSAgICAgIERldmVsb3BtZW50IGluIHByb2dyZXNzLgotICAgICAgQmFzaWMgZnVuY3Rpb25hbGl0eSBpcyBhbG1vc3QgZG9uZS4gKGRsbCB2ZXJzaW9uIDQuMCkKLQotCi0KLTMuMjAgVG9vbHRpcCBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBBdXRob3I6Ci0gICAgICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0gIFN0YXR1czoKLSAgICAgIEFsbW9zdCBmaW5pc2hlZC4KLQotICBOb3RlczoKLSAgICAgIFVuaWNvZGUgc3VwcG9ydCBpcyBpbmNvbXBsZXRlIChXTV9OT1RJRllGT1JNQVQpLgotCi0KLTMuMjEgVHJhY2tiYXIgQ29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIER1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLSAgICAgIEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+Ci0KLSAgU3RhdHVzOgotICAgICAgVW5kZXIgY29uc3RydWN0aW9uLgotCi0KLTMuMjIgVHJlZSBWaWV3IENvbnRyb2wKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQXV0aG9yOgotICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuCi0gICAgICBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgotCi0gIFN0YXR1czoKLSAgICAgIFVuZGVyIGNvbnN0cnVjdGlvbi4KLQotCi0zLjIzIFVwZG93biBDb250cm9sCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIEF1dGhvcjoKLSAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGJ5IERpbWl0cmllIE8uIFBhdW4uCi0gICAgICBTb21lIG1pbm9yIGNoYW5nZXMgYnkgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4uCi0KLSAgU3RhdHVzOgotICAgICAgVW5rbm93bi4KLQotICBOb3RlczoKLSAgICAgIEhhdmUgYSBsb29rIGF0IGNvbnRyb2xzL3VwZG93bi5jIGZvciBhIGxpc3Qgb2YgYnVncyBhbmQgbWlzc2luZwotICAgICAgZmVhdHVyZXMuCi0KLSAgICAgIFRoZSBzdGF0dXMgaXMgdW5rbm93biwgYmVjYXVzZSBJIGRpZCBub3QgaGF2ZSBhIGNsb3NlIGxvb2sgYXQgdGhpcwotICAgICAgY29udHJvbC4gT25lIHRlc3QtcHJvZ3JhbSBsb29rZWQgcXVpdGUgZ29vZCwgYnV0IGluIFdpbjk1J3MKLSAgICAgIGNkcGxheWVyLmV4ZSB0aGUgY29udHJvbCBkb2VzIG5vdCBzaG93IGF0IGFsbC4KLSAgICAgIAotICAgICAgQW55IHZvbHVudGVlcnM/PwotCi0KLTQuIEFkZGl0aW9uYWwgSW5mb3JtYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBIYXMgdG8gYmUgd3JpdHRlbi4uLgotCi0KLTUuIFVuZG9jdW1lbnRlZCBmZWF0dXJlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgVGhlcmUgYXJlIHF1aXRlIGEgbG90IG9mIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgbGlrZToKLSAgICAgLSBEU0EgKER5bmFtaWMgU3RvcmFnZSBBcnJheSkgZnVuY3Rpb25zLgotICAgICAtIERQQSAoRHluYW1pYyBQb2ludGVyIEFycmF5KSBmdW5jdGlvbnMuCi0gICAgIC0gTVJVICgiTW9zdCBSZWNlbnRseSBVc2VkIiBMaXN0KSBmdW5jdGlvbnMuCi0gICAgIC0gb3RoZXIgdW5rbm93biBmdW5jdGlvbnMuCi0KLSAgSGF2ZSBhIGxvb2sgYXQgcmVsYXkzMi9jb21jdGwzMi5zcGVjLgotCi0KLTUuMSBEeW1uYW1pYyBTdG9yYWdlIEFycmF5IChEU0EpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhlIERTQSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gc3RvcmUgYW5kIG1hbmFnZSBkeW5hbWljIGFycmF5cyBvZiBmaXhlZCBzaXplCi0gIG1lbW9yeSBibG9ja3MuIFRoZXkgYXJlIHVzZWQgYnkgVEFTS01BTi5FWEUsIEV4cGxvcmVyLCBJRTQgYW5kIG90aGVyCi0gIFByb2dyYW1zIGFuZCBETEwncyB0aGF0IGFyZSAicGFydHMgb2YgdGhlIFdpbmRvd3MgT3BlcmF0aW5nIFN5c3RlbSIuCi0gIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgY29tcGxldGUuCi0KLSAgSGF2ZSBhIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uLgotCi0KLTUuMiBEeW5hbWljIFBvaW50ZXIgQXJyYXkgKERQQSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBTaW1pbGFyIHRvIHRoZSBEU0EgZnVuY3Rpb25zLCBidXQgdGhleSBqdXN0IHN0b3JlIHBvaW50ZXJzLiBUaGV5IGFyZSB1c2VkIGJ5Ci0gIEV4cGxvcmVyLCBJRTQgYW5kIG90aGVyIFByb2dyYW1zIGFuZCBETEwncyB0aGF0IGFyZSAicGFydHMgb2YgdGhlIFdpbmRvd3MKLSAgT3BlcmF0aW5nIFN5c3RlbSIuIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgY29tcGxldGUuCi0KLSAgSGF2ZSBhIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uLgotCi0KLTUuMyAiTW9zdCBSZWNlbnRseSBVc2VkIiAtIExpc3QgKE1SVSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgT25seSBzdHVicyBhcmUgaW1wbGVtZW50ZWQgdG8ga2VlcCBFeHBsb3JlciBmcm9tIGJhaWxpbmcgb3V0LgotCi0gIE5vIG1vcmUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGF0IHRoaXMgdGltZSEKLQotCi01LjQgTWVudUhlbHAKLS0tLS0tLS0tLS0tLQotICBIYXMgdG8gYmUgd3JpdHRlbi4uLgotCi0KLTUuNSBHZXRFZmZlY3RpdmVDbGllbnRSZWN0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBIYXMgdG8gYmUgd3JpdHRlbi4uLgotCi0KLTUuNiBTaG93SGlkZU1lbnVDdGwKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgTVMgaXMgaW5jb21wbGV0ZS4KLQotICBscEluZm86Ci0gIC4uLgotICBCb3RoIHZhbHVlcyBvZiB0aGUgZmlyc3QgcGFpciBtdXN0IGJlIHRoZSBoYW5kbGUgdG8gdGhlIGFwcGxpY2F0aW9ucyBtYWluCi0gIG1lbnUuCi0gIC4uLgotCi0KLTUuNyBPdGhlciB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBTZXZlcmFsIG90aGVyIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgSUU0LgotCi0gIFN0cmluZyBmdW5jdGlvbnM6Ci0gICh3aWxsIGJlIHdyaXR0ZW4uLi4pCi0KLQotNi4gRXBpbG9ndWUKLS0tLS0tLS0tLS0tCi0gIFlvdSBzZWUsIG11Y2ggd29yayBoYXMgc3RpbGwgdG8gYmUgZG9uZS4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdyaXRpbmcKLSAgYSBjb250cm9sIHNlbmQgbWUgYW4gZS1tYWlsLiBJZiB5b3UgbGlrZSB0byBmaXggYnVncyBvciBhZGQgc29tZQotICBmdW5jdGlvbmFsaXR5IHNlbmQgYW4gZS1tYWlsIHRvIHRoZSBhdXRob3Igb2YgdGhlIGNvbnRyb2wuCi0KLQotRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9jb21waWxpbmcuc2dtbCBiL2RvY3VtZW50YXRpb24vY29tcGlsaW5nLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3YzIzOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vY29tcGlsaW5nLnNnbWwKQEAgLTAsMCArMSwxMSBAQAorICA8Y2hhcHRlciBpZD0iY29tcGlsaW5nIj4KKyAgICA8dGl0bGU+Q29tcGlsaW5nIFdpbmU8L3RpdGxlPgorICAgIDxwYXJhPkhvdyB0byBjb21waWxlIHdpbmUsIGFuZCBwcm9ibGVtcyB0aGF0IG1heSBhcmlzZS4uLjwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJwYXJ0IiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vY29uZmlnIGIvZG9jdW1lbnRhdGlvbi9jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OTdlMmMuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi9jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw0NjMgKzAsMCBAQAotQ29weXJpZ2h0IDE5OTkgQWRhbSBTYWNhcm55IChtYWdpY2JveEBiZXN0d2ViLm5ldCkKLTEuIFdIQVQgSVMgVEhFIFdJTkUgQ09ORklHIEZJTEU/Ci0KLVRoZSBXaW5lIGNvbmZpZyBmaWxlIHN0b3JlcyB2YXJpb3VzIHNldHRpbmdzIGZvciBXaW5lLiBUaGVzZSBpbmNsdWRlOgotCURyaXZlcyBhbmQgSW5mb3JtYXRpb24gYWJvdXQgdGhlbQotCURpcmVjdG9yeSBTZXR0aW5ncwotCVBvcnQgU2V0dGluZ3MKLQlUaGUgV2luZSBsb29rIGFuZCBmZWVsCi0JV2luZSdzIERMTCBVc2FnZQotCi0yLiBIT1cgRE8gSSBNQUtFIE9ORT8KLQotVGhpcyBzZWN0aW9uIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgbWFraW5nIGEgY29uZmlnIGZpbGUuIFRha2UgYQotbG9vayBhdCB0aGUgZmlsZSA8ZGlycyB0byB3aW5lPi93aW5lLmluaQotSXQgaXMgb3JnYW5pemVkIGJ5IHNlY3Rpb24uCi0KLQotICAgICBOYW1lICAgICAgICB8IE5lZWRlZD8gfCBXaGF0IGl0IGRvZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVtEcml2ZSBYXSAgICAgICAgfCB5ZXMgICAgIHwgU2V0cyB1cCBkcml2ZXMgcmVjb2duaXplZCBieSB3aW5lCi1bd2luZV0gICAgICAgICAgIHwgeWVzICAgICB8IFNldHRpbmdzIGZvciB3aW5lIGRpcmVjdG9yaWVzCi1bRGxsRGVmYXVsdHNdICAgIHwgcmVjbWQgICB8IERlZmF1bHRzIGZvciBsb2FkaW5nIERMTCdzCi1bRGxsUGFpcnNdICAgICAgIHwgcmVjbWQgICB8IFNhbml0eSBjaGVja2VycyBmb3IgRExMJ3MKLVtEbGxPdmVycmlkZXNdICAgfCByZWNtZCAgIHwgT3ZlcmlkZXMgZGVmYXVsdHMgZm9yIERMTCBsb2FkaW5nCi1bb3B0aW9uc10gICAgICAgIHwgbm8gICAgICB8IE5vIG9uZSBzZWVtcyB0byBrbm93Ci1bZm9udHNdICAgICAgICAgIHwgeWVzICAgICB8IEZvbnQgYXBwZWFyYW5jZSBhbmQgcmVjb2duaXRpb24KLVtzZXJpYWxwb3J0c10gICAgfCBubyAgICAgIHwgQ09NIHBvcnRzIHNlZW4gYnkgd2luZQotW3BhcmFsbGVscG9ydHNdICB8IG5vICAgICAgfCBMUFQgcG9ydHMgc2VlbiBieSB3aW5lCi1bc3Bvb2xlcl0gICAgICAgIHwgbm8gICAgICB8IFByaW50IHNwb29saW5nCi1bcG9ydHNdICAgICAgICAgIHwgbm8gICAgICB8IERpcmVjdCBwb3J0IGFjY2VzcwotW3NweV0gICAgICAgICAgICB8IG5vICAgICAgfCBXaGF0IHRvIGRvIHdpdGggY2VydGFpbiBkZWJ1ZyBtZXNzYWdlcwotW1JlZ2lzdHJ5XSAgICAgICB8IG5vICAgICAgfCBTcGVjaWZpZXMgbG9jYXRpb25zIG9mIHdpbmRvd3MgcmVnaXN0cnkgZmlsZXMKLVt0d2Vhay5sYXlvdXRdICAgfCByZWNtZCAgIHwgQXBwZWFyYW5jZSBvZiB3aW5lCi1bcHJvZ3JhbXNdICAgICAgIHwgbm8gICAgICB8IFByb2dyYW1zIHRvIGJlIHJ1biBhdXRvbWF0aWNhbGx5Ci1bQ29uc29sZV0gICAgICAgIHwgbm8gICAgICB8IENvbnNvbGUgc2V0dGluZ3MKLVJlY21kLVJlY29tbWVuZGVkCi0yLjEgVEhFIFtEcml2ZSBYXSBTRUNUSU9OCi1JdCBzaG91bGQgYmUgcHJldHR5IHNlbGYgZXhwbGFuYXRvcnksIGJ1dCBoZXJlIGlzIGFuIGluLWRlcHRoIHR1dG9yaWFsIGFib3V0Ci10aGVtLgotVGhlcmUgYXJlIHVwIHRvIDYgbGluZXMgZm9yIGVhY2ggZHJpdmUgaW4gV2luZS4KLQotW0RyaXZlIFhdCi0KLVRoZSBhYm92ZSBsaW5lIGJlZ2lucyB0aGUgc2VjdGlvbiBmb3IgYSBkcml2ZSB3aG9zZSBsZXR0ZXIgaXMgWC4gCi0KLVBhdGg9L2Rpci90by9wYXRoCi0KLVRoaXMgcGF0aCBpcyB3aGVyZSB0aGUgZHJpdmUgd2lsbCBiZWdpbi4gV2hlbiBXaW5lIGlzIGJyb3dzaW5nIGluIGRyaXZlIFgsIGl0Ci13aWxsIHNlZSB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeSAiL2Rpci90by9wYXRoIi4gRG9uJ3QgZm9yZ2V0IHRvCi1sZWF2ZSBvZmYgdGhlIHRyYWlsaW5nIHNsYXNoIQotCi1UeXBlPWZsb3BweXxoZHxjZHJvbXxuZXR3b3JrIDwtLS0gdGhlIHwncyBtZWFuIFR5cGU9PG9uZSBvZiB0aGUgb3B0aW9ucz4KLQotU2V0cyB1cCB0aGUgdHlwZSBvZiBkcml2ZSBXaW5lIHdpbGwgc2VlIGl0IGFzLiBUeXBlIG11c3QgZXF1YWwgb25lIG9mIHRoZSBmb3VyCi0iZmxvcHB5IiwgImhkIiwgImNkcm9tIiwgb3IgIm5ldHdvcmsiLiBUaGV5IGFyZSBzZWxmLWV4cGxhbmF0b3J5LgotCi1MYWJlbD1ibGFoCi0KLURlZmluZXMgdGhlIGRyaXZlIGxhYmVsLiBHZW5lcmFsbHkgb25seSBuZWVkZWQgZm9yIHByb2dyYW1zIHRoYXQgbG9vayBmb3IgYQotc3BlY2lhbCBDRC1ST00uIEluZm8gb24gZmluZGluZyB0aGUgbGFibGUgaXMgaW4gPGRpcnMgdG8KLXdpbmU+L2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzLiBUaGUgbGFiZWwgbWF5IGJlIHVwIHRvIDExIGNoYXJhY3RlcnMuCi0KLVNlcmlhbD1kZWFkYmVlZgotCi1UZWxscyBXaW5lIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkcml2ZS4gQSBmZXcgcHJvZ3JhbXMgd2l0aCBpbnRlbnNlCi1wcm90ZWN0aW9uIGZvciBwaXJhdGluZyBtaWdodCBuZWVkIHRoaXMsIGJ1dCBvdGhlcndpc2UgZG9uJ3QgdXNlIGl0LiBVcCB0byA4Ci1jaGFyYWN0ZXJzIGFuZCBoZXhhZGVjaW1hbC4KLQotRmlsZXN5c3RlbT1tc2Rvc3x3aW45NXx1bml4Ci0KLVNldHMgdXAgdGhlIHdheSBXaW5lIGxvb2tzIGF0IGZpbGVzIG9uIHRoZSBkcml2ZS4KLQotCW1zZG9zIC0+IENhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4gQWxpa2UgdG8gRE9TIGFuZCBXaW5kb3dzIDMueC4KLQk4LjMgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGZpbGVzIChlaWdodGRvdC4xMjMpIC0gbG9uZ2VyIG9uZXMgd2lsbCBiZQotCXRydW5jYXRlZC4gKE5PVEU6IHRoaXMgaXMgYSB2ZXJ5IGJhZCBjaG9pY2UgaWYgeW91IHBsYW4gb24gcnVubmluZyBhcHBzCi0JdGhhdCB1c2UgbG9uZyBmaWxlbmFtZXMuIHdpbjk1IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBhcHBzIHRoYXQgd2VyZQotCWRlc2lnbmVkIHRvIHJ1biB1bmRlciB0aGUgbXNkb3Mgc3lzdGVtLiBJbiBvdGhlciB3b3JkcywgeW91IG1pZ2h0IG5vdAotCXdhbnQgdG8gdXNlIHRoaXMuKQotCQotCXdpbjk1IC0+IENhc2UgaW5zZW5zaXRpdmUuIEFsaWtlIHRvIFdpbmRvd3MgOXgvTlQgNC4gVGhpcyBpcyB0aGUgbG9uZwotCWZpbGVuYW1lIGZpbGVzeXN0ZW0geW91IGFyZSBwcm9iYWJseSB1c2VkIHRvIHdvcmtpbmcgd2l0aC4gVGhlCi0JZmlsZXN5c3RlbSBvZiBjaG9pY2UgZm9yIG1vc3QgYXBwbGljYXRpb25zIHRvIGJlIHJ1biB1bmRlciB3aW5lLiAKLQlQUk9CQUJMWSBUSEUgT05FIFlPVSBXQU5UCi0JCi0JdW5peCAgLT4gQ2FzZSBzZW5zaXRpdmUuIFRoaXMgZmlsZXN5c3RlbSBoYXMgYWxtb3N0IG5vIHVzZSAoV2luZG93cyBhcHBzCi0JZXhwZWN0IGNhc2UgaW5zZW5zaXRpdmUgZmlsZW5hbWVzKS4gVHJ5IGl0IGlmIHlvdSBkYXJlLCBidXQgd2luOTUgaXMgYSAKLQltdWNoIGJldHRlciBjaG9pY2UuCi0KLURldmljZT0vZGV2L3h4Ci0KLVVzZSB0aGlzIE9OTFkgZm9yIGZsb3BweSBhbmQgY2Ryb20gZGV2aWNlcy4gVXNpbmcgaXQgb24gRXh0ZW5kZWQyIHBhcnRpdGlvbnMgY2FuCi1oYXZlIGRpcmUgcmVzdWx0cyAoV2hlbiBhIHdpbmRvd3MgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsIHRoZXkgZG8gaXQKLWluIGEgRkFUIHdheSAtLSBGQVQgZG9lcyBub3QgbWl4IHdpdGggRXh0ZW5kZWQyKS4KLU5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3QgcmVhbGx5IGltcG9ydGFudCwgYWxtb3N0IGFsbCBhcHBzIHdpbGwgaGF2ZSBubwotcHJvYmxlbSBpZiBpdCByZW1haW5zIHVuc3BlY2lmaWVkLiBGb3IgQ0QtUk9NcyB5b3UgbWlnaHQgd2FudCB0byBhZGQgaXQgdG8gZ2V0Ci1hdXRvbWF0aWMgbGFiZWwgZGV0ZWN0aW9uLCB0aG91Z2guIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHNwZWNpZnlpbmcgZGV2aWNlCi1uYW1lcywganVzdCBsZWF2ZSBvdXQgdGhpcyBzZXR0aW5nIGZvciB5b3VyIGRyaXZlcy4KLQotSGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBYLCBhIGdlbmVyaWMgaGFyZCBkcml2ZToKLVtEcml2ZSBYXQotUGF0aD0vZG9zLWEKLVR5cGU9aGQKLUxhYmVsPUhhcmQgRHJpdmUKLUZpbGVzeXN0ZW09d2luOTUKLVRoaXMgaXMgYSBzZXR1cCBmb3IgRHJpdmUgWCwgYSBnZW5lcmljIENELVJPTSBkcml2ZToKLVtEcml2ZSBYXQotUGF0aD0vZG9zLWQKLVR5cGU9Y2Ryb20KLUxhYmVsPVRvdGFsIEFubmloaWxhdGlvbgotRmlsZXN5c3RlbT13aW45NQotRGV2aWNlPS9kZXYvaGRjCi1BbmQgaGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBYLCBhIGdlbmVyaWMgZmxvcHB5IGRyaXZlOgotW0RyaXZlIFhdCi1UeXBlPWZsb3BweQotUGF0aD0vbW50L2Zsb3BweQotTGFiZWw9RmxvcHB5IERyaXZlCi1TZXJpYWw9ODc2NTQzMjEKLUZpbGVzeXN0ZW09d2luOTUKLURldmljZT0vZGV2L2ZkMAotCi0yLjIgVEhFIFt3aW5lXSBTRUNUSU9OIAotCi1UaGUgW3dpbmVdIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiB3aW5lIHVzZXMgZm9yCi1kaXJlY3Rvcmllcy4gV2hlbiBzcGVjaWZ5aW5nIHRoZSBkaXJlY3RvcmllcyBmb3IgdGhlIHNldHRpbmdzLCBtYWtlIHRoZW0gYXMgdGhleQotd291bGQgYXBwZWFyIGluIHdpbmUuIElmIHlvdXIgZHJpdmUgQyBoYXMgYSBQYXRoIG9mIC9kb3MsIGFuZCB5b3VyIHdpbmRvd3MKLWRpcmVjdG9yeSBpcyBsb2NhdGVkIGluIC9kb3Mvd2luZG93cywgV2luZG93cz1jOlx3aW5kb3dzLgotCi1XaW5kb3dzPWM6XHdpbmRvd3MKLQotU2V0cyB1cCB0aGUgd2luZG93cyBkaXJlY3RvcnkuIE1ha2Ugb25lIGlmIHlvdSBkb24ndCBoYXZlIHdpbmRvd3MuIE5PIFRSQUlMSU5HCi1TTEFTSCAoTk9UIEM6XHdpbmRvd3NcKSEKLQotU3lzdGVtPWM6XHdpbmRvd3Ncc3lzdGVtCi0KLVNldHMgdXAgd2hlcmUgdGhlIHdpbmRvd3Mgc3lzdGVtIGZpbGVzIGFyZS4gU2hvdWxkIHJlc2lkZSBpbiB0aGUgZGlyZWN0b3J5IHVzZWQKLWZvciB0aGUgIldpbmRvd3MiIHNldHRpbmcuIElmIHlvdSBkb24ndCBoYXZlIHdpbmRvd3MgdGhlbiB0aGlzIGlzIHdoZXJlIHRoZQotc3lzdGVtIGZpbGVzIHdpbGwgZ28uIE5PIFRSQUlMSU5HIFNMQVNIIQotCi1UZW1wPWM6XHRlbXAKLQotVGhpcyBzaG91bGQgYmUgdGhlIGRpcmVjdG9yeSB5b3Ugd2FudCB5b3VyIHRlbXAgZmlsZXMgc3RvcmVkIGluLiBZT1UgTVVTVCBIQVZFCi1XUklURSBBQ0NFU1MgVE8gSVQuCi0KLVBhdGg9Yzpcd2luZG93cztjOlx3aW5kb3dzXHN5c3RlbTtjOlxibGFuY28KLQotQmVoYXZlcyBsaWtlIHRoZSBQQVRIIHNldHRpbmcgb24gdW5peCBib3hlcy4gV2hlbiB3aW5lIGlzIHJ1biBsaWtlICJ3aW5lCi1zb2wuZXhlIiwgaWYgc29sLmV4ZSByZXNpZGVzIGluIGEgZGlyZWN0b3J5IHNwZWNpZmllZCBpbiB0aGUgIlBhdGgiIHNldHRpbmcsCi13aW5lIHdpbGwgcnVuIGl0IChPZiBjb3Vyc2UsIGlmIHNvbC5leGUgcmVzaWRlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpbmUKLXdpbGwgcnVuIHRoYXQgb25lKS4gTWFrZSBzdXJlIGl0IGFsd2F5cyBoYXMgeW91ciB3aW5kb3dzIGRpcmVjdG9yeSBhbmQgc3lzdGVtCi1kaXJlY3RvcnkgKEZvciB0aGlzIHNldHVwLCBpdCBtdXN0IGhhdmUgYzpcd2luZG93cztjOlx3aW5kb3dzXHN5c3RlbSkuCi0KLVN5bWJvbFRhYmxlRmlsZT13aW5lLnN5bQotCi1TZXRzIHVwIHRoZSBzeW1ib2wgdGFibGUgZmlsZSBmb3IgdGhlIHdpbmUgZGVidWdnZXIuIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvCi1maWRkbGUgd2l0aCB0aGlzLiBNYXkgYmUgdXNlZnVsIGlmIHlvdXIgd2luZSBpcyBzdHJpcHBlZC4KLQotcHJpbnRlcj1vZmZ8b24KLQotVGVsbHMgd2luZSB3aGV0aGVyIHRvIGFsbG93IHByaW50ZXIgZHJpdmVycyBhbmQgcHJpbnRpbmcgdG8gd29yay4gVXNpbmcgdGhlc2UKLXRoaW5ncyBhcmUgcHJldHR5IGFscGhhLCBzbyB5b3UgbWlnaHQgd2FudCB0byB3YXRjaCBvdXQuIFNvbWUgcGVvcGxlIG1pZ2h0IGZpbmQKLWl0IHVzZWZ1bCwgaG93ZXZlci4gSWYgeW91J3JlIG5vdCBwbGFubmluZyBvbiB3b3JraW5nIG9uIHByaW50aW5nLCBkb24ndCBldmVuCi1hZGQgdGhpcyB0byB5b3VyIHdpbmUuaW5pIChJdCBwcm9iYWJseSBpc24ndCBhbHJlYWR5IGluIGl0KS4gQ2hlY2sgb3V0IHRoZQotW3Nwb29sZXJdIGFuZCBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbnMgdG9vLgotCi0yLjMgSU5UUk9EVUNUSU9OIFRPIERMTCBTRUNUSU9OUwotCi1UaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHlvdSB3aWxsIG5lZWQgdG8ga25vdyBiZWZvcmUgY29uZmlndXJpbmcgdGhlIERMTCBzZWN0aW9ucwotaW4geW91ciB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZS4KLQotCTIuMy4xIFdJTkRPV1MgRExMIFBBSVJTCi0JCi0JTW9zdCB3aW5kb3dzIERMTCdzIGhhdmUgYSB3aW4xNiAoV2luZG93cyAzLngpIGFuZCB3aW4zMiAoV2luZG93cyA5eC9OVCkKLQlmb3JtLiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB3aW4xNiBhbmQgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQKLQl0aGUgIkRMTCBwYWlyIi4gVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9uIHBhaXJzOgotCSAgIFdpbjE2ICAgfCAgIFdpbjMyICAgfCBOYXRpdmUqIAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JS0VSTkVMICAgICB8IEtFUk5FTDMyICB8IE5vIQotCVVTRVIgICAgICAgfCBVU0VSMzIgICAgfCBObyEKLQlTSEVMTCAgICAgIHwgU0hFTEwzMiAgIHwgWWVzCi0JR0RJICAgICAgICB8IEdESTMyICAgICB8IE5vIQotCUNPTU1ETEcgICAgfCBDT01ETEczMiAgfCBZZXMKLQlWRVIgICAgICAgIHwgVkVSU0lPTiAgIHwgWWVzCi0JKi1JcyBpdCBwb3NzaWJsZSB0byB1c2UgbmF0aXZlIGRsbCB3aXRoIHdpbmU/KFNlZSBuZXh0IHNlY3Rpb24pCi0KLQkyLjMuMiBESUZGRVJFTlQgRk9STVMgT0YgRExMJ1MKLQkKLQlUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IGZvcm1zIG9mIERMTCdzIHdpbmUgY2FuIGxvYWQ6Ci0JCW5hdGl2ZSAtPiBUaGUgRExMJ3MgdGhhdCBhcmUgaW5jbHVkZWQgd2l0aCB3aW5kb3dzLiBNYW55IHdpbmRvd3MKLQkJRExMJ3MgY2FuIGJlIGxvYWRlZCBpbiB0aGVpciBuYXRpdmUgZm9ybS4gTWFueSB0aW1lcyB0aGVzZQotCQluYXRpdmUgdmVyc2lvbnMgd29yayBiZXR0ZXIgdGhhbiB0aGVpciBub24tTWljcm9zb2Z0IGVxdWl2YWxlbnQKLQkJLS0gb3RoZXIgdGltZXMgdGhleSBkb24ndC4KLQkJZWxmZGxsIC0+IEVMRiBlbmNhcHN1bGF0ZWQgd2luZG93cyBETEwncy4gVGhpcyBpcyBjdXJyZW50bHkKLQkJZXhwZXJpbWVudGFsIChOb3Qgd29ya2luZyB5ZXQpLgotCQlzbyAtPiBOYXRpdmUgRUxGIGxpYnJhcmllcy4gV2lsbCBub3Qgd29yayB5ZXQuCi0JCWJ1aWx0aW4gLT4gVGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgRExMIGxvYWRpbmcuIFRoaXMgaXMgd2hhdCB5b3UKLQkJd2lsbCB1c2UgaWYgdGhlIERMTCBpcyBlcnJvci1wcm9uZSBpbiBuYXRpdmUgZm9ybSAoS0VSTkVMIGZvcgotCQlleGFtcGxlKSwgeW91IGRvbid0IGhhdmUgdGhlIG5hdGl2ZSBETEwsIG9yIHlvdSBqdXN0IHdhbnQgdG8gYmUKLQkJTWljcm9zb2Z0LWZyZWUuCi0JCi0yLjQgVEhFIFtEbGxEZWZhdWx0c10gU0VDVElPTgotCi1UaGVzZSBzZXR0aW5ncyBwcm92aWRlIHdpbmUncyBkZWZhdWx0IGhhbmRsaW5nIG9mIERMTCBsb2FkaW5nLgotCi1FWFRSQV9MRF9MSUJSQVJZX1BBVEg9L2RpcnMKLQotVGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgaGVyZSBpcyBhcHBlbmRlZCB0byB0aGUgbm9ybWFsIHNlYXJjaCBwYXRoIGZvciBjZXJ0YWluCi1mb3JtcyBvZiBETEwncyAoZWxmZGxsIGFuZCAuc28pLgotCi1EZWZhdWx0TG9hZE9yZGVyID0gbmF0aXZlLCBlbGZkbGwsIHNvLCBidWlsdGluCi0KLVRoaXMgc2V0dGluZyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHdoaWNoIG9yZGVyIHRvIGF0dGVtcHQgbG9hZGluZyBETEwncy4KLUlmIHRoZSBmaXJzdCBvcHRpb24gZmFpbHMsIGl0IHdpbGwgdHJ5IHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4gVGhlIG9yZGVyCi1zcGVjaWZpZWQgYWJvdmUgaXMgcHJvYmFibHkgdGhlIGJlc3QgaW4gbW9zdCBjb25kaXRpb25zLgotCi0yLjUgVEhFIFtEbGxQYWlyc10gU0VDVElPTgotCi1UaGlzIHNlY3Rpb24gaXMgb3B0aW9uYWwsIGJ1dCBzdHJvbmdseSByZWNvbW1lbmRlZC4gSWYgeW91IHRyeSB0byB1c2UgbmF0aXZlCi1TSEVMTDMyLCBidXQgYnVpbHRpbiBTSEVMTCwgeW91IGNvdWxkIGhhdmUgc29tZSBiaWcgcHJvYmxlbXMgKG5hdGl2ZSBhbmQKLWJ1aWx0aW4vc28vZWxmZGxsIGRvIGNlcnRhaW4gdGhpbmdzIGluIGRpZmZlcmVudCB3YXlzKS4gVXNpbmcgZGlmZmVyZW50IGZvcm1zIG9mCi1hIHBhaXIgaXMgYSAqdmVyeSosICoqdmVyeSoqIGJhZCBpZGVhLiBCeSBzcGVjaWZ5aW5nIERMTCBwYWlycyBoZXJlLCB3aW5lIHdpbGwKLXByaW50IG91dCBhIG1lc3NhZ2UgaWYgeW91IHVzZSBkaWZmZXJlbnQgZm9ybXMgb2YgYSBwYWlyLgotWW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBpbiB0aGlzIHNlY3Rpb24sIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHdvcmsKLWZpbmUgaW4gYWxsIGNhc2VzOgotCi1bRGxsUGFpcnNdCi1rZXJuZWwJPSBrZXJuZWwzMgotZ2RpCT0gZ2RpMzIKLXVzZXIJPSB1c2VyMzIKLWNvbW1kbGcJPSBjb21kbGczMgotY29tbWN0cmw9IGNvbWN0bDMyCi12ZXIJPSB2ZXJzaW9uCi1zaGVsbAk9IHNoZWxsMzIKLWx6ZXhwYW5kPSBsejMyCi13aW5zb2NrCT0gd3NvY2szMgotCi0yLjYgVEhFIFtEbGxPdmVycmlkZXNdIFNFQ1RJT04KLQotVGhlIGZvcm1hdCBmb3IgdGhpcyBzZWN0aW9uIGlzIHRoZSBzYW1lIGZvciBlYWNoIGxpbmU6Ci0KLTxETEw+eyw8RExMPiw8RExMPi4uLn0gPSA8Rk9STT57LDxGT1JNPiw8Rk9STT4uLi59Ci0KLUZvciBleGFtcGxlLCB0byBsb2FkIGJ1aWx0aW4gS0VSTkVMIHBhaXIgKENhc2UgZG9lc24ndCBtYXR0ZXIgaGVyZSk6Ci0KLWtlcm5lbCxrZXJuZWwzMiA9IGJ1aWx0aW4KLQotVG8gbG9hZCB0aGUgbmF0aXZlIENPTU1ETEcgcGFpciwgYnV0IGlmIHRoYXQgZG9lc24ndCB3b3JrIHRyeSBidWlsdGluOgotCi1jb21tZGxnLGNvbWRsZzMyID0gbmF0aXZlLGJ1aWx0aW4KLQotVG8gbG9hZCB0aGUgbmF0aXZlIENPTUNUTDMyOgotCi1jb21jdGwzMiA9IG5hdGl2ZQotCi1IZXJlIGlzIGEgZ29vZCBnZW5lcmljIHNldHVwIChBcyBpdCBpcyBkZWZpbmVkIGluIHdpbmUuaW5pIHRoYXQgd2FzIGluY2x1ZGVkCi13aXRoIHlvdXIgd2luZSBwYWNrYWdlKToKLQotW0RsbE92ZXJyaWRlc10KLWtlcm5lbDMyLCBnZGkzMiwgdXNlcjMyCT0gYnVpbHRpbgota2VybmVsLCBnZGksIHVzZXIJPSBidWlsdGluCi10b29saGVscAkJPSBidWlsdGluCi1jb21kbGczMiwgY29tbWRsZwk9IGVsZmRsbCwgYnVpbHRpbiwgbmF0aXZlCi12ZXJzaW9uLCB2ZXIJCT0gZWxmZGxsLCBidWlsdGluLCBuYXRpdmUKLXNoZWxsMzIsIHNoZWxsCQk9IGJ1aWx0aW4sIG5hdGl2ZQotbHozMiwgbHpleHBhbmQJCT0gYnVpbHRpbiwgbmF0aXZlCi1jb21tY3RybCwgY29tY3RsMzIJPSBidWlsdGluLCBuYXRpdmUKLXdzb2NrMzIsIHdpbnNvY2sJPSBidWlsdGluCi1hZHZhcGkzMiwgY3J0ZGxsLCBudGRsbAk9IGJ1aWx0aW4sIG5hdGl2ZQotbXByLCB3aW5zcG9vbAkJPSBidWlsdGluLCBuYXRpdmUKLWRkcmF3LCBkaW5wdXQsIGRzb3VuZAk9IGJ1aWx0aW4sIG5hdGl2ZQotd2lubW0sIHczMnNrcm5sLCBtc3ZmdzMyPSBidWlsdGluCi13bmFzcGkzMiwgd293MzIJCT0gYnVpbHRpbgotc3lzdGVtLCBkaXNwbGF5LCB3cHJvY3MJPSBidWlsdGluCi13aW5lcHMJCQk9IGJ1aWx0aW4KLQotTk9URTogWW91IHNlZSB0aGF0IGVsZmRsbCBvciBzbyBpcyB0aGUgZmlyc3Qgb3B0aW9uIGZvciBhIGZldyBvZiB0aGVzZSBkbGwncy4KLVRoaXMgd2lsbCBmYWlsIGZvciB5b3UsIGJ1dCB5b3Ugd29uJ3Qgbm90aWNlIGl0IGFzIHdpbmUgd2lsbCBqdXN0IHVzZSB0aGUgc2Vjb25kCi1vciB0aGlyZCBvcHRpb24uCi0KLTIuNyBUSEUgW29wdGlvbnNdIFNFQ1RJT04KLQotTm8gb25lIHNlZW1zIHRvIGtub3cgd2hhdCB0aGlzIHNlY3Rpb24gaXMuLi4KLQotQWxsb2NTeXN0ZW1Db2xvcnM9MTAwCi0KLVN5c3RlbSBjb2xvcnMgdG8gYWxsb2NhdGU/IEp1c3QgbGVhdmUgaXQgYXQgMTAwLgotCi0yLjggVEhFIFtmb250c10gU0VDVElPTgotCi1UaGlzIHNlY3Rpb24gc2V0cyB1cCB3aW5lJ3MgZm9udCBoYW5kbGluZy4KLQotUmVzb2x1dGlvbiA9IDk2Ci0KLVNpbmNlIHRoZSB3YXkgWCBoYW5kbGVzIGZvbnRzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB3YXkgV2luZG93cyBkb2VzLCB3aW5lIHVzZXMKLWEgc3BlY2lhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoIHRoZW0uIEl0IG11c3Qgc2NhbGUgdGhlbSB1c2luZyB0aGUgbnVtYmVyCi1kZWZpbmVkIGluIHRoZSAiUmVzb2x1dGlvbiIgc2V0dGluZy4gNjAtMTIwIGFyZSByZWFzb25hYmxlIHZhbHVlcywgOTYgaXMgYSBuaWNlCi1pbiB0aGUgbWlkZGxlIG9uZS4gSWYgeW91IGhhdmUgdGhlIHJlYWwgd2luZG93cyBmb250cyBhdmFpbGFibGUgKDxkaXJzIHRvCi13aW5lPi9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlciBhbmQgZm9udHMpLCB0aGlzIHBhcmFtZXRlciB3aWxsIG5vdCBiZSBhcwotaW1wb3J0YW50LiBPZiBjb3Vyc2UsIGl0J3MgYWx3YXlzIGdvb2QgdG8gZ2V0IHlvdXIgWCBmb250cyB3b3JraW5nIGFjY2VwdGFibHkgaW4KLXdpbmUuCi0KLURlZmF1bHQgPSAtYWRvYmUtdGltZXMtCi0KLVRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCi0KLU9QVElPTkFMOiAKLQotVGhlICJBbGlhcyIgc2V0dGluZyBhbGxvd3MgeW91IHRvIG1hcCBhbiBYIGZvbnQgdG8gYSBmb250IHVzZWQgaW4gd2luZS4gVGhpcyBpcwotZ29vZCBmb3IgYXBwcyB0aGF0IG5lZWQgYSBzcGVjaWFsIGZvbnQgeW91IGRvbid0IGhhdmUsIGJ1dCBhIGdvb2QgcmVwbGFjZW1lbnQKLWV4aXN0cy4gVGhlIHN5bnRheCBpcyBsaWtlIHNvOgotCi1BbGlhc1ggPSBbRmFrZSB3aW5kb3dzIG5hbWVdLFtSZWFsIFggbmFtZV08LG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uPgotCi1QcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlICJBbGlhc1giIHdpdGggIkFsaWFzMCIsIHRoZW4gIkFsaWFzMSIgYW5kIHNvIG9uLgotVGhlIGZha2Ugd2luZG93cyBuYW1lIGlzIHRoZSBuYW1lIHRoYXQgdGhlIGZvbnQgd2lsbCBiZSB1bmRlciBhIHdpbmRvd3MgYXBwIGluCi13aW5lLiBUaGUgcmVhbCBYIG5hbWUgaXMgdGhlIGZvbnQgbmFtZSBhcyBzZWVuIGJ5IFggKFJ1biAieGZvbnRzZWwiKS4KLVRoZSBvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbiBhbGxvd3MgeW91IHRvIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdQotZGVmaW5lLiBJZiBpdCBpcyBub3QgdXNlZCwgdGhlbiB3aW5lIHdpbGwganVzdCB0cnkgdG8gZXh0cmFjdCB0aGUgZmFrZSB3aW5kb3dzCi1uYW1lIGl0c2VsZiBhbmQgbm90IHVzZSB0aGUgdmFsdWUgeW91IGVudGVyLgotCi1IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWxpYXMgd2l0aG91dCBtYXNraW5nLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgaW4gd2luZG93cwotYXBwcyBhcyAiR29vZ2xlIi4gV2hlbiBkZWZpbmluZyBhbiBhbGlhcyBpbiBhIGNvbmZpZyBmaWxlLCBmb3JnZXQgYWJvdXQgbXkKLWNvbW1lbnQgdGV4dCAoVGhlICI8LS0gYmxhaCIgc3R1ZmYpCi0KLUFsaWFzMCA9IEZvbywtLWdvb2dsZS0gICAgICA8LS0gTm90ZSB0aGUgbm8gc3BhY2VzIGFmdGVyIHRoZSAiID0gIi4gSW1wb3J0YW50IQotCi1IZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBtYXNraW5nIGVuYWJsZWQuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBhcyAiRm9vIiBpbgotd2luZG93cyBhcHBzLgotCi1BbGlhczEgPSBGb28sLS1nb29nbGUtLHN1YnN0IAotCi1Gb3IgbW9yZSBpbmZvIGNoZWNrIG91dCA8ZGlycyB0byB3aW5lPi9kb2N1bWVudGF0aW9uL2ZvbnRzCi0KLTIuOSBUSEUgW3NlcmlhbHBvcnRzXSwgW3BhcmFsbGVscG9ydHNdLCBbc3Bvb2xlcl0sIEFORCBbcG9ydHNdIFNFQ1RJT05TCi0KLUV2ZW4gdGhvdWdoIGl0IHNvdW5kcyBsaWtlIGEgbG90IG9mIHNlY3Rpb25zLCB0aGVzZSBhcmUgYWxsIGNsb3NlbHkgcmVsYXRlZC4KLVRoZXkgYWxsIGFyZSBmb3IgY29tbXVuaWNhdGlvbnMgYW5kIHBhcmFsbGVsIHBvcnRzLiAKLQotVGhlIFtzZXJpYWxwb3J0c10gc2VjdGlvbiB0ZWxscyB3aW5lIHdoYXQgc2VyaWFsIHBvcnRzIGl0IGlzIGFsbG93ZWQgdG8gdXNlLgotCi1Db21YPS9kZXYvY3VhWQotCi1SZXBsYWNlIFggd2l0aCB0aGUgbnVtYmVyIG9mIHRoZSBDT00gcG9ydCBpbiBXaW5kb3dzICgxLTgpIGFuZCBZIHdpdGggdGhlCi1udW1iZXIgb2YgaXQgaW4gWCAoVXN1YWxseSB0aGUgbnVtYmVyIG9mIHRoZSBwb3J0IGluIFdpbmRvd3MgbWludXMgMSkuIENvbVggY2FuCi1hY3R1YWxseSBlcXVhbCBhbnkgZGV2aWNlICgvZGV2L21vZGVtIGlzIGFjY2VwdGFibGUpLiBJdCBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeQotdG8gZGVmaW5lIGFueSBDT00gcG9ydHMgKEFuIG9wdGlvbmFsIHNldHRpbmcpLiBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0KLUNvbTE9L2Rldi9jdWEwCi0KLVVzZSBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIGluIHRoZSBzZWN0aW9uIHRvIGRlZmluZSBhbGwgb2YgdGhlIENPTSBwb3J0cwoteW91IG5lZWQuCi0KLVRoZSBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbiBzZXRzIHVwIGFueSBwYXJhbGxlbCBwb3J0cyB0aGF0IHdpbGwgYmUgYWxsb3dlZAotYWNjZXNzIHVuZGVyIHdpbmUuCi0KLUxwdFg9L2Rldi9scFkKLQotU2VlbSBmYXJtaWxpYXI/IFN5bnRheCBpcyBqdXN0IGxpa2UgdGhlIENPTSBwb3J0IHNldHRpbmcuIFJlcGxhY2UgWCB3aXRoIGEgdmFsdWUKLWZyb20gMS00IGFzIGl0IGlzIGluIFdpbmRvd3MgYW5kIFkgd2l0aCBhIHZhbHVlIGZyb20gMC0zIChZIGlzIHVzdWFsbHkgdGhlIHZhbHVlCi1pbiB3aW5kb3dzIG1pbnVzIDEsIGp1c3QgbGlrZSBmb3IgQ09NIHBvcnRzKS4gWW91IGRvbid0IGFsd2F5cyBuZWVkIHRvIGRlZmluZSBhCi1wYXJhbGxlbCBwb3J0IChBS0EsIGl0J3Mgb3B0aW9uYWwpLiBBcyB3aXRoIHRoZSBvdGhlciBzZWN0aW9uLCBMcHRYIGNhbiBlcXVhbCAKLWFueSBkZXZpY2UgKE1heWJlIC9kZXYvcHJpbnRlcikuIEhlcmUgaXMgYW4gZXhhbXBsZToKLQotTHB0MT0vZGV2L2xwMAotCi1UaGUgW3Nwb29sZXJdIHNlY3Rpb24gd2lsbCBpbmZvcm0gd2luZSB3aGVyZSB0byBzcG9vbCBwcmludCBqb2JzLiBVc2UgdGhpcyBpZgoteW91IHdhbnQgdG8gdHJ5IHByaW50aW5nLiBXaW5lIGRvY3MgY2xhaW0gdGhhdCBzcG9vbGluZyBpcyAicmF0aGVyIHByaW1pdGl2ZSIgYXQKLXRoaXMgdGltZSwgc28gaXQgd29uJ3Qgd29yayBwZXJmZWN0bHkuIElUIElTIE9QVElPTkFMCi1UaGUgb25seSBzZXR0aW5nIHlvdSB1c2UgaW4gdGhpcyBzZWN0aW9uIHdvcmtzIHRvIG1hcCBhIHBvcnQgKExQVDEsIGZvciBleGFtcGxlKQotdG8gYSBmaWxlIG9yIGEgY29tbWFuZC4gSGVyZSBpcyBhbiBleGFtcGxlLCBtYXBwaW5nIExQVDEgdG8gdGhlIGZpbGUgIm91dC5wcyI6Ci0KLUxQVDE6PW91dC5wcwotCi1UaGUgZm9sbG93aW5nIGNvbW1hbmQgbWFwcyBwcmludGluZyBqb2JzIHRvIExQVDEgdG8gdGhlIGNvbW1hbmQgImxwciIuIE5vdGljZSAKLXRoZSB8OgotCi1MUFQxOj18bHByCi0KLVRoZSBbcG9ydHNdIHNlY3Rpb24gaXMgdXN1YWxseSB1c2VmdWwgb25seSBmb3IgcGVvcGxlIHdobyBuZWVkIGRpcmVjdCBwb3J0Ci1hY2Nlc3MgZm9yIHByb2dyYW1zIHJlcXVpcmluZyBkb25nbGVzIG9yIHNjYW5uZXJzLiBJRiBZT1UgRE9OJ1QgTkVFRCBJVCwgRE9OJ1QKLVVTRSBJVCEgCi0KLXJlYWQ9MHg3NzksMHgzNzksMHgyODAtMHgyYTAKLQotR2l2ZXMgZGlyZWN0IHJlYWQgYWNjZXNzIHRvIHRob3NlIElPJ3MuCi0KLXdyaXRlPTB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIAotCi1HaXZlcyBkaXJlY3Qgd3JpdGUgYWNjZXNzIHRvIHRob3NlIElPJ3MuIEl0IHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGtlZXAgdGhlCi12YWx1ZXMgb2YgdGhlICJyZWFkIiBhbmQgIndyaXRlIiBzZXR0aW5ncyB0aGUgc2FtZS4gVGhpcyBzdHVmZiB3aWxsIG9ubHkgd29yayAKLXdoZW4geW91J3JlIHJvb3QuCi0KLTIuMTAgVEhFIFtzcHldLCBbUmVnaXN0cnldLCBbdHdlYWsubGF5b3V0XSwgYW5kIFtwcm9ncmFtc10gU0VDVElPTlMKLQotW3NweV0gaXMgdXNlZCB0byBJbmNsdWRlIG9yIGV4Y2x1ZGUgZGVidWcgbWVzc2FnZXMsIGFuZCB0byBvdXRwdXQgdGhlbSB0byBhCi1maWxlLiBUaGUgbGF0dGVyIGlzIHJhcmVseSB1c2VkLiBUSEVTRSBBUkUgQUxMIE9QVElPTkFMIEFORCBZT1UgUFJPQkFCTFkgRE9OJ1QKLU5FRUQgVE8gQUREIE9SIFJFTU9WRSBBTllUSElORyBJTiBUSElTIFNFQ1RJT04gVE8gWU9VUiBDT05GSUcuCi0KLUZpbGU9L2JsYW5jbwotCi1TZXRzIHRoZSBsb2dmaWxlIGZvciB3aW5lLiBTZXQgdG8gQ09OIHRvIGxvZyB0byBzdGFuZGFyZCBvdXQuIFRISVMgSVMgUkFSRUxZCi1VU0VECi0KLUV4Y2x1ZGU9V01fU0laRTtXTV9USU1FUjsKLQotRXhjbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgV01fU0laRSBhbmQgV01fVElNRVIgaW4gdGhlIGxvZ2ZpbGUuCi0KLUluY2x1ZGU9V01fU0laRTtXTV9USU1FUjsKLQotSW5jbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgV01fU0laRSBhbmQgV01fVElNRVIgaW4gdGhlIGxvZ2ZpbGUuCi0KLVtSZWdpc3RyeV0gY2FuIGJlIHVzZWQgdG8gdGVsbCB3aW5lIHdoZXJlIHlvdXIgb2xkIHdpbmRvd3MgcmVnaXN0cnkgZmlsZXMgZXhpc3QuIFRoaXMKLXNlY3Rpb24gaXMgY29tcGxldGVseSBvcHRpb25hbCBhbmQgdXNlbGVzcyB0byBwZW9wbGUgdXNpbmcgd2luZSB3aXRob3V0IGFuIGV4aXN0aW5nCi13aW5kb3dzIGluc3RhbGxhdGlvbi4KLQotVXNlckZpbGVOYW1lPS9kaXJzL3RvL3VzZXIucmVnCi0KLVRoZSBsb2NhdGlvbiBvZiB5b3VyIG9sZCB1c2VyLnJlZyBmaWxlLgotCi1Mb2NhbE1hY2hpbmVGaWxlTmFtZT0vZGlycy90by9zeXN0ZW0ucmVnCi0KLVRoZSBsb2NhdGlvbiBvZiB5b3VyIG9sZCBzeXN0ZW0ucmVnIGZpbGUuCi0KLVt0d2Vhay5sYXlvdXRdIGlzIGRldm90ZWQgdG8gd2luZSdzIGxvb2suIFRoZXJlIGlzIG9ubHkgb25lIHNldHRpbmcgZm9yIGl0LgotCi1XaW5lTG9vaz13aW4zMXx3aW45NXx3aW45OAotCi1XaWxsIGNoYW5nZSB0aGUgbG9vayBvZiB3aW5lIGZyb20gV2luZG93cyAzLjEgdG8gV2luZG93cyA5NS4gIndpbjk4IiBiZWhhdmVzCi1qdXN0IGxpa2UgIndpbjk1IiBtb3N0IG9mIHRoZSB0aW1lLgotCi1bcHJvZ3JhbXNdIGNhbiBiZSB1c2VkIHRvIHNheSB3aGF0IHByb2dyYW1zIHJ1biB1bmRlciBzcGVjaWFsIGNvbmRpdGlvbnMuCi0KLURlZmF1bHQ9L3Byb2dyYW0vdG8vZXhlY3V0ZS5leGUKLQotU2V0cyB0aGUgcHJvZ3JhbSB0byBiZSBydW4gaWYgd2luZSBpcyBzdGFydGVkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHByb2dyYW0uCi0KLVN0YXJ0dXA9L3Byb2dyYW0vdG8vZXhlY3V0ZS5leGUKLQotU2V0cyB0aGUgcHJvZ3JhbSB0byBhdXRvbWF0aWNhbGx5IGJlIHJ1biBhdCBzdGFydHVwIGV2ZXJ5IHRpbWUuCi0KLTMuIFdIRVJFIERPIEkgUFVUIElUPwotCi1UaGUgd2luZSBjb25maWcgZmlsZSBjYW4gZ28gaW4gdHdvIHBsYWNlcy4gCi0KLQkvdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmYgPC0tLSBBIHN5c3RlbXdpZGUgY29uZmlnIGZpbGUsIHVzZWQgZm9yIGFueW9uZQotCXdobyBkb2Vzbid0IGhhdmUgdGhlaXIgb3duLgotCSRIT01FLy53aW5lcmMgPC0tLSBZb3VyIG93biBjb25maWcgZmlsZSwgdGhhdCBvbmx5IGlzIHVzZWQgZm9yIHlvdXIKLQl1c2VyLiAKLQotU28gY29weSB0aGUgZmlsZSB5b3UgbWFkZSB0byBiZSB0aGUgd2luZS5jb25mIHRvIC91c3IvbG9jYWwvZXRjL3dpbmUuY29uZiBvciAKLSRIT01FLy53aW5lcmMgZm9yIHdpbmUgdG8gcmVjb2duaXplIGl0LiAKLQotNC4gV0hBVCBJRiBJVCBET0VTTidUIFdPUks/Ci0KLVRoZXJlIGlzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHRoaW5ncyB3aWxsIGdvIHdyb25nLiBJZiB0aGUgdW50aGlua2FibGUgaGFwcGVucywgCi10cnkgdGhlIG5ld3Nncm91cCwgY29tcC5lbXVsYXRvcnMubXMtd2luZG93cy53aW5lCi1NYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBsb29rZWQgb3ZlciB0aGlzIGRvY3VtZW50IHRob3JvdWdobHksIGFuZCBoYXZlIGFsc28KLXJlYWQ6Ci1SRUFETUUKLWRvY3VtZW50YXRpb24vYnVncmVwb3J0cwotaHR0cDovL3d3dy53ZXN0ZmFsZW4uZGUvd2l0Y2gvd2luZS1IT1dUTy50eHQgKE9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCkKLUlmIGluZGVlZCBpdCBsb29rcyBsaWtlIHlvdSd2ZSBkb25lIHlvdXIgcmVzZWFyY2gsIGJlIHByZXBhcmVkIGZvciBoZWxwZnVsCi1zdWdnZXN0aW9ucy4gSWYgeW91IGhhdmVuJ3QsIGJyYWNlIHlvdXJzZWxmIGZvciBoZWF2aW5nIGZsYW1pbmcuCi0KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vY29uZmlndXJpbmcuc2dtbCBiL2RvY3VtZW50YXRpb24vY29uZmlndXJpbmcuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJiN2E5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9jb25maWd1cmluZy5zZ21sCkBAIC0wLDAgKzEsMTg3NCBAQAorICA8Y2hhcHRlciBpZD0iY29uZmlndXJpbmciPgorICAgIDx0aXRsZT5Db25maWd1cmluZyBXaW5lPC90aXRsZT4KKyAgICA8cGFyYT5TZXR0aW5nIHVwIGNvbmZpZyBmaWxlcywgZXRjLjwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0iY29uZmlnIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsIENvbmZpZ3VyYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIENvcHlyaWdodCAxOTk5IEFkYW0gU2FjYXJueSAobWFnaWNib3hAYmVzdHdlYi5uZXQpCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vY29uZmlnPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRoZSBXaW5lIENvbmZpZyBGaWxlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIFdpbmUgY29uZmlnIGZpbGUgc3RvcmVzIHZhcmlvdXMgc2V0dGluZ3MgZm9yIFdpbmUuIFRoZXNlIGluY2x1ZGU6CisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHJpdmVzIGFuZCBJbmZvcm1hdGlvbiBhYm91dCB0aGVtCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBTZXR0aW5ncworICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQb3J0IFNldHRpbmdzCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBXaW5lIGxvb2sgYW5kIGZlZWwKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2luZSdzIERMTCBVc2FnZQorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Ib3cgRG8gSSBNYWtlIE9uZT88L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIHNlY3Rpb24gd2lsbCBndWlkZSB5b3UgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBtYWtpbmcgYQorICAgICAgICAgIGNvbmZpZyBmaWxlLiBUYWtlIGEgbG9vayBhdCB0aGUgZmlsZSA8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KKyAgICAgICAgICB3aW5lPi93aW5lLmluaTwvZmlsZW5hbWU+LiBJdCBpcyBvcmdhbml6ZWQgYnkgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJhbGwiPgorICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5Pk5lZWRlZD88L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5XaGF0IGl0IERvZXM8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PltEcml2ZSBYXTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmVzIHJlY29nbml6ZWQgYnkgd2luZTwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bd2luZV08L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5TZXR0aW5ncyBmb3Igd2luZSBkaXJlY3RvcmllczwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsRGVmYXVsdHNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5EZWZhdWx0cyBmb3IgbG9hZGluZyBETEwnczwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsUGFpcnNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5TYW5pdHkgY2hlY2tlcnMgZm9yIERMTCdzPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PltEbGxPdmVycmlkZXNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5PdmVyaWRlcyBkZWZhdWx0cyBmb3IgRExMIGxvYWRpbmc8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+W29wdGlvbnNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5ObyBvbmUgc2VlbXMgdG8ga25vdzwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bZm9udHNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+Rm9udCBhcHBlYXJhbmNlIGFuZCByZWNvZ25pdGlvbjwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bc2VyaWFscG9ydHNdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5DT00gcG9ydHMgc2VlbiBieSB3aW5lPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PltwYXJhbGxlbHBvcnRzXTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+TFBUIHBvcnRzIHNlZW4gYnkgd2luZTwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bc3Bvb2xlcl08L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PlByaW50IHNwb29saW5nPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5Pltwb3J0c108L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PkRpcmVjdCBwb3J0IGFjY2VzczwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5bc3B5XTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCB0byBkbyB3aXRoIGNlcnRhaW4gZGVidWcgbWVzc2FnZXM8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+W1JlZ2lzdHJ5XTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+U3BlY2lmaWVzIGxvY2F0aW9ucyBvZiB3aW5kb3dzIHJlZ2lzdHJ5IGZpbGVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5Plt0d2Vhay5sYXlvdXRdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5BcHBlYXJhbmNlIG9mIHdpbmU8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+W3Byb2dyYW1zXTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+UHJvZ3JhbXMgdG8gYmUgcnVuIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+W0NvbnNvbGVdPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5Db25zb2xlIHNldHRpbmdzPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICA8L2luZm9ybWFsdGFibGU+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5UaGUgW0RyaXZlIFhdIFNlY3Rpb248L3RpdGxlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgc2hvdWxkIGJlIHByZXR0eSBzZWxmIGV4cGxhbmF0b3J5LCBidXQgaGVyZSBpcyBhbgorICAgICAgICAgICAgaW4tZGVwdGggdHV0b3JpYWwgYWJvdXQgdGhlbS4gVGhlcmUgYXJlIHVwIHRvIDYgbGluZXMgZm9yCisgICAgICAgICAgICBlYWNoIGRyaXZlIGluIFdpbmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPltEcml2ZSBYXTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBUaGUgYWJvdmUgbGluZSBiZWdpbnMgdGhlIHNlY3Rpb24gZm9yIGEgZHJpdmUgd2hvc2UgbGV0dGVyIGlzIFguIAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5QYXRoPS9kaXIvdG8vcGF0aDwvcHJvZ3JhbWxpc3Rpbmc+IFRoaXMKKyAgICAgICAgICAgIHBhdGggaXMgd2hlcmUgdGhlIGRyaXZlIHdpbGwgYmVnaW4uIFdoZW4gV2luZSBpcyBicm93c2luZworICAgICAgICAgICAgaW4gZHJpdmUgWCwgaXQgd2lsbCBzZWUgdGhlIGZpbGVzIHRoYXQgYXJlIGluIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IDxmaWxlbmFtZT4vZGlyL3RvL3BhdGg8L2ZpbGVuYW1lPi4gRG9uJ3QgZm9yZ2V0CisgICAgICAgICAgICB0byBsZWF2ZSBvZmYgdGhlIHRyYWlsaW5nIHNsYXNoIQorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1R5cGU9ZmxvcHB5fGhkfGNkcm9tfG5ldHdvcmsgJmx0Oy0tLSB0aGUgfCdzIG1lYW4gVHlwZT0mbHQ7b25lIG9mIHRoZSBvcHRpb25zPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXRzIHVwIHRoZSB0eXBlIG9mIGRyaXZlIFdpbmUgd2lsbCBzZWUgaXQgYXMuIFR5cGUgbXVzdAorICAgICAgICAgICAgZXF1YWwgb25lIG9mIHRoZSBmb3VyIDxsaXRlcmFsPmZsb3BweTwvbGl0ZXJhbD4sCisgICAgICAgICAgICA8bGl0ZXJhbD5oZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPmNkcm9tPC9saXRlcmFsPiwgb3IKKyAgICAgICAgICAgIDxsaXRlcmFsPm5ldHdvcms8L2xpdGVyYWw+LiBUaGV5IGFyZSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5MYWJlbD1ibGFoPC9wcm9ncmFtbGlzdGluZz4gRGVmaW5lcyB0aGUKKyAgICAgICAgICAgIGRyaXZlIGxhYmVsLiBHZW5lcmFsbHkgb25seSBuZWVkZWQgZm9yIHByb2dyYW1zIHRoYXQgbG9vaworICAgICAgICAgICAgZm9yIGEgc3BlY2lhbCBDRC1ST00uIEluZm8gb24gZmluZGluZyB0aGUgbGFibGUgaXMgaW4KKyAgICAgICAgICAgIDxsaXRlcmFsPiZsdDtkaXJzIHRvIHdpbmU+L2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzPC9saXRlcmFsPi4KKyAgICAgICAgICAgIFRoZSBsYWJlbCBtYXkgYmUgdXAgdG8gMTEgY2hhcmFjdGVycy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+U2VyaWFsPWRlYWRiZWVmPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIFRlbGxzIFdpbmUgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGRyaXZlLiBBIGZldyBwcm9ncmFtcyB3aXRoCisgICAgICAgICAgICBpbnRlbnNlIHByb3RlY3Rpb24gZm9yIHBpcmF0aW5nIG1pZ2h0IG5lZWQgdGhpcywgYnV0IG90aGVyd2lzZQorICAgICAgICAgICAgZG9uJ3QgdXNlIGl0LiBVcCB0byA4IGNoYXJhY3RlcnMgYW5kIGhleGFkZWNpbWFsLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5GaWxlc3lzdGVtPW1zZG9zfHdpbjk1fHVuaXg8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgU2V0cyB1cCB0aGUgd2F5IFdpbmUgbG9va3MgYXQgZmlsZXMgb24gdGhlIGRyaXZlLgorICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD5tc2RvczwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4gQWxpa2UgdG8gRE9TIGFuZAorICAgICAgICAgICAgICAgICAgV2luZG93cyAzLnguIDxsaXRlcmFsPjguMzwvbGl0ZXJhbD4gaXMgdGhlIG1heGltdW0KKyAgICAgICAgICAgICAgICAgIGxlbmd0aCBvZiBmaWxlcyAoZWlnaHRkb3QuMTIzKSAtIGxvbmdlciBvbmVzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgIHRydW5jYXRlZC4gKE5PVEU6IHRoaXMgaXMgYSB2ZXJ5IGJhZCBjaG9pY2UgaWYgeW91CisgICAgICAgICAgICAgICAgICBwbGFuIG9uIHJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBsb25nIGZpbGVuYW1lcy4gd2luOTUKKyAgICAgICAgICAgICAgICAgIHNob3VsZCB3b3JrIGZpbmUgd2l0aCBhcHBzIHRoYXQgd2VyZSBkZXNpZ25lZCB0byBydW4KKyAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZSBtc2RvcyBzeXN0ZW0uIEluIG90aGVyIHdvcmRzLCB5b3UgbWlnaHQKKyAgICAgICAgICAgICAgICAgIG5vdCB3YW50IHRvIHVzZSB0aGlzLikKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPndpbjk1PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgQ2FzZSBpbnNlbnNpdGl2ZS4gQWxpa2UgdG8gV2luZG93cyA5eC9OVCA0LiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICB0aGUgbG9uZyBmaWxlbmFtZSBmaWxlc3lzdGVtIHlvdSBhcmUgcHJvYmFibHkgdXNlZAorICAgICAgICAgICAgICAgICAgdG8gd29ya2luZyB3aXRoLiBUaGUgZmlsZXN5c3RlbSBvZiBjaG9pY2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBiZSBydW4gdW5kZXIgd2luZS4gIFBST0JBQkxZIFRIRSBPTkUKKyAgICAgICAgICAgICAgICAgIFlPVSBXQU5UIQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dW5peDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIENhc2Ugc2Vuc2l0aXZlLiBUaGlzIGZpbGVzeXN0ZW0gaGFzIGFsbW9zdCBubyB1c2UKKyAgICAgICAgICAgICAgICAgIChXaW5kb3dzIGFwcHMgZXhwZWN0IGNhc2UgaW5zZW5zaXRpdmUgZmlsZW5hbWVzKS4KKyAgICAgICAgICAgICAgICAgIFRyeSBpdCBpZiB5b3UgZGFyZSwgYnV0IHdpbjk1IGlzIGEgIG11Y2ggYmV0dGVyCisgICAgICAgICAgICAgICAgICBjaG9pY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+RGV2aWNlPS9kZXYveHg8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoaXMgT05MWSBmb3IgZmxvcHB5IGFuZCBjZHJvbSBkZXZpY2VzLiBVc2luZyBpdCBvbgorICAgICAgICAgICAgRXh0ZW5kZWQyIHBhcnRpdGlvbnMgY2FuIGhhdmUgZGlyZSByZXN1bHRzICh3aGVuIGEgd2luZG93cworICAgICAgICAgICAgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsIHRoZXkgZG8gaXQgaW4gYSBGQVQgd2F5CisgICAgICAgICAgICAtLSBGQVQgZG9lcyBub3QgbWl4IHdpdGggRXh0ZW5kZWQyKS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50OyBhbG1vc3QgYWxsIGFwcHMKKyAgICAgICAgICAgICAgd2lsbCBoYXZlIG5vIHByb2JsZW0gaWYgaXQgcmVtYWlucyB1bnNwZWNpZmllZC4gRm9yCisgICAgICAgICAgICAgIENELVJPTXMgeW91IG1pZ2h0IHdhbnQgdG8gYWRkIGl0IHRvIGdldCBhdXRvbWF0aWMgbGFiZWwKKyAgICAgICAgICAgICAgZGV0ZWN0aW9uLCB0aG91Z2guIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHNwZWNpZnlpbmcKKyAgICAgICAgICAgICAgZGV2aWNlIG5hbWVzLCBqdXN0IGxlYXZlIG91dCB0aGlzIHNldHRpbmcgZm9yIHlvdXIKKyAgICAgICAgICAgICAgZHJpdmVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBzZXR1cCBmb3IgRHJpdmUgWCwgYSBnZW5lcmljIGhhcmQgZHJpdmU6CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitbRHJpdmUgWF0KK1BhdGg9L2Rvcy1hCitUeXBlPWhkCitMYWJlbD1IYXJkIERyaXZlCitGaWxlc3lzdGVtPXdpbjk1CitUaGlzIGlzIGEgc2V0dXAgZm9yIERyaXZlIFgsIGEgZ2VuZXJpYyBDRC1ST00gZHJpdmU6CitbRHJpdmUgWF0KK1BhdGg9L2Rvcy1kCitUeXBlPWNkcm9tCitMYWJlbD1Ub3RhbCBBbm5paGlsYXRpb24KK0ZpbGVzeXN0ZW09d2luOTUKK0RldmljZT0vZGV2L2hkYworQW5kIGhlcmUgaXMgYSBzZXR1cCBmb3IgRHJpdmUgWCwgYSBnZW5lcmljIGZsb3BweSBkcml2ZToKK1tEcml2ZSBYXQorVHlwZT1mbG9wcHkKK1BhdGg9L21udC9mbG9wcHkKK0xhYmVsPUZsb3BweSBEcml2ZQorU2VyaWFsPTg3NjU0MzIxCitGaWxlc3lzdGVtPXdpbjk1CitEZXZpY2U9L2Rldi9mZDAKKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+VGhlIFt3aW5lXSBTZWN0aW9uIDwvdGl0bGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgW3dpbmVdIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucworICAgICAgICAgICAgaW5mb3JtYXRpb24gd2luZSB1c2VzIGZvciBkaXJlY3Rvcmllcy4gV2hlbiBzcGVjaWZ5aW5nIHRoZQorICAgICAgICAgICAgZGlyZWN0b3JpZXMgZm9yIHRoZSBzZXR0aW5ncywgbWFrZSB0aGVtIGFzIHRoZXkgd291bGQKKyAgICAgICAgICAgIGFwcGVhciBpbiB3aW5lLiBJZiB5b3VyIGRyaXZlIDxtZWRpYWxhYmVsPkM8L21lZGlhbGFiZWw+CisgICAgICAgICAgICBoYXMgYSBwYXRoIG9mIDxmaWxlbmFtZT4vZG9zPC9maWxlbmFtZT4sIGFuZCB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBsb2NhdGVkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rvcy93aW5kb3dzPC9maWxlbmFtZT4sIHRoZW4gdXNlOgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPldpbmRvd3M9Yzpcd2luZG93czwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZXRzIHVwIHRoZSA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIE1ha2Ugb25lIGlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiBOTyBUUkFJTElORyBTTEFTSAorICAgICAgICAgICAgKE5PVCA8ZmlsZW5hbWU+Qzpcd2luZG93c1w8L2ZpbGVuYW1lPikhCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPlN5c3RlbT1jOlx3aW5kb3dzXHN5c3RlbTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBUaGlzIHNldHMgdXAgd2hlcmUgdGhlIHdpbmRvd3Mgc3lzdGVtIGZpbGVzIGFyZS4gU2hvdWxkCisgICAgICAgICAgICByZXNpZGUgaW4gdGhlIGRpcmVjdG9yeSB1c2VkIGZvciB0aGUKKyAgICAgICAgICAgIDxsaXRlcmFsPldpbmRvd3M8L2xpdGVyYWw+IHNldHRpbmcuIElmIHlvdSBkb24ndCBoYXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IHRoZW4gdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtCisgICAgICAgICAgICBmaWxlcyB3aWxsIGdvLiBBZ2FpbiwgTk8gVFJBSUxJTkcgU0xBU0ghCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPlRlbXA9YzpcdGVtcDwvcHJvZ3JhbWxpc3Rpbmc+IFRoaXMgc2hvdWxkCisgICAgICAgICAgICBiZSB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IHlvdXIgdGVtcCBmaWxlcyBzdG9yZWQgaW4uIFlPVQorICAgICAgICAgICAgTVVTVCBIQVZFIFdSSVRFIEFDQ0VTUyBUTyBJVC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitQYXRoPWM6XHdpbmRvd3M7Yzpcd2luZG93c1xzeXN0ZW07YzpcYmxhbmNvCisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlaGF2ZXMgbGlrZSB0aGUgPGVudmFyPlBBVEg8L2VudmFyPiBzZXR0aW5nIG9uIFVOSVgKKyAgICAgICAgICAgIGJveGVzLiBXaGVuIHdpbmUgaXMgcnVuIGxpa2UgPHVzZXJpbnB1dD53aW5lCisgICAgICAgICAgICAgIHNvbC5leGU8L3VzZXJpbnB1dD4sIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHJlc2lkZXMgaW4gYSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgICAgPGxpdGVyYWw+UGF0aDwvbGl0ZXJhbD4gc2V0dGluZywgd2luZSB3aWxsIHJ1biBpdCAoT2YKKyAgICAgICAgICAgIGNvdXJzZSwgaWYgPGZpbGVuYW1lPnNvbC5leGU8L2ZpbGVuYW1lPiByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgY3VycmVudCBkaXJlY3RvcnksIHdpbmUgd2lsbCBydW4gdGhhdCBvbmUpLiBNYWtlIHN1cmUgaXQKKyAgICAgICAgICAgIGFsd2F5cyBoYXMgeW91ciA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgIHN5c3RlbSBkaXJlY3RvcnkgKEZvciB0aGlzIHNldHVwLCBpdCBtdXN0IGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jOlx3aW5kb3dzO2M6XHdpbmRvd3Ncc3lzdGVtPC9maWxlbmFtZT4pLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5TeW1ib2xUYWJsZUZpbGU9d2luZS5zeW08L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgU2V0cyB1cCB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgZm9yIHRoZSB3aW5lIGRlYnVnZ2VyLiBZb3UKKyAgICAgICAgICAgIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZmlkZGxlIHdpdGggdGhpcy4gTWF5IGJlIHVzZWZ1bCBpZgorICAgICAgICAgICAgeW91ciB3aW5lIGlzIHN0cmlwcGVkLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5wcmludGVyPW9mZnxvbjwvcHJvZ3JhbWxpc3Rpbmc+IFRlbGxzIHdpbmUKKyAgICAgICAgICAgIHdoZXRoZXIgdG8gYWxsb3cgcHJpbnRlciBkcml2ZXJzIGFuZCBwcmludGluZyB0byB3b3JrLgorICAgICAgICAgICAgVXNpbmcgdGhlc2UgdGhpbmdzIGFyZSBwcmV0dHkgYWxwaGEsIHNvIHlvdSBtaWdodCB3YW50IHRvCisgICAgICAgICAgICB3YXRjaCBvdXQuIFNvbWUgcGVvcGxlIG1pZ2h0IGZpbmQgaXQgdXNlZnVsLCBob3dldmVyLiBJZgorICAgICAgICAgICAgeW91J3JlIG5vdCBwbGFubmluZyBvbiB3b3JraW5nIG9uIHByaW50aW5nLCBkb24ndCBldmVuIGFkZAorICAgICAgICAgICAgdGhpcyB0byB5b3VyIDxmaWxlbmFtZT53aW5lLmluaTwvZmlsZW5hbWU+IChJdCBwcm9iYWJseQorICAgICAgICAgICAgaXNuJ3QgYWxyZWFkeSBpbiBpdCkuIENoZWNrIG91dCB0aGUgW3Nwb29sZXJdIGFuZAorICAgICAgICAgICAgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb25zIHRvby4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb24gVG8gRExMIFNlY3Rpb25zPC90aXRsZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byBrbm93IGJlZm9yZQorICAgICAgICAgICAgY29uZmlndXJpbmcgdGhlIERMTCBzZWN0aW9ucyBpbiB5b3VyIHdpbmUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHNlY3Q0PgorICAgICAgICAgICAgPHRpdGxlPldpbmRvd3MgRExMIFBhaXJzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBNb3N0IHdpbmRvd3MgRExMJ3MgaGF2ZSBhIHdpbjE2IChXaW5kb3dzIDMueCkgYW5kIHdpbjMyCisgICAgICAgICAgICAgIChXaW5kb3dzIDl4L05UKSBmb3JtLiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB3aW4xNiBhbmQKKyAgICAgICAgICAgICAgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQgdGhlICJETEwgcGFpciIuIFRoaXMgaXMgYQorICAgICAgICAgICAgICBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbiBwYWlyczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPGluZm9ybWFsdGFibGU+CisgICAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PldpbjE2PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PldpbjMyPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgIDxmb290bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICBJcyBpdCBwb3NzaWJsZSB0byB1c2UgbmF0aXZlIGRsbCB3aXRoIHdpbmU/CisgICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgbmV4dCBzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgIDwvZm9vdG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5LRVJORUw8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+S0VSTkVMMzI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Tm8hPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlVTRVI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VVNFUjMyPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5vITwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5TSEVMTDwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5TSEVMTDMyPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlllczwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5HREk8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+R0RJMzI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Tm8hPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PkNPTU1ETEc8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Q09NRExHMzI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+WWVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlZFUjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5WRVJTSU9OPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlllczwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICA8L3NlY3Q0PgorCisgICAgICAgICAgPHNlY3Q0PgorICAgICAgICAgICAgPHRpdGxlPkRpZmZlcmVudCBGb3JtcyBPZiBETEwnczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBmb3JtcyBvZiBETEwncyB3aW5lIGNhbiBsb2FkOgorICAgICAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CisgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgVGhlIERMTCdzIHRoYXQgYXJlIGluY2x1ZGVkIHdpdGggd2luZG93cy4gTWFueQorICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgRExMJ3MgY2FuIGJlIGxvYWRlZCBpbiB0aGVpciBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtLiBNYW55IHRpbWVzIHRoZXNlIG5hdGl2ZSB2ZXJzaW9ucyB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgYmV0dGVyIHRoYW4gdGhlaXIgbm9uLU1pY3Jvc29mdCBlcXVpdmFsZW50IC0tCisgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGltZXMgdGhleSBkb24ndC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgICAgIDx0ZXJtPmVsZmRsbDwvdGVybT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICBFTEYgZW5jYXBzdWxhdGVkIHdpbmRvd3MgRExMJ3MuIFRoaXMgaXMgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIChOb3Qgd29ya2luZyB5ZXQpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgICAgPHRlcm0+c288L3Rlcm0+CisgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlIEVMRiBsaWJyYXJpZXMuIFdpbGwgbm90IHdvcmsgeWV0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgICAgPHRlcm0+YnVpbHRpbjwvdGVybT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gZm9ybSBvZiBETEwgbG9hZGluZy4gVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IHdpbGwgdXNlIGlmIHRoZSBETEwgaXMgZXJyb3ItcHJvbmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICBuYXRpdmUgZm9ybSAoS0VSTkVMIGZvciBleGFtcGxlKSwgeW91IGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgbmF0aXZlIERMTCwgb3IgeW91IGp1c3Qgd2FudCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdC1mcmVlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9zZWN0ND4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIFNlY3Rpb248L3RpdGxlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2Ugc2V0dGluZ3MgcHJvdmlkZSB3aW5lJ3MgZGVmYXVsdCBoYW5kbGluZyBvZiBETEwgbG9hZGluZy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+RVhUUkFfTERfTElCUkFSWV9QQVRIPS9kaXJzPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHNwZWNpZmllZCBoZXJlIGlzIGFwcGVuZGVkIHRvIHRoZSBub3JtYWwgc2VhcmNoCisgICAgICAgICAgICBwYXRoIGZvciBjZXJ0YWluIGZvcm1zIG9mIERMTCdzIChlbGZkbGwgYW5kIC5zbykuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPkRlZmF1bHRMb2FkT3JkZXIgPSBuYXRpdmUsIGVsZmRsbCwgc28sIGJ1aWx0aW48L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHdoaWNoIG9yZGVyIHRvCisgICAgICAgICAgICBhdHRlbXB0IGxvYWRpbmcgRExMJ3MuIElmIHRoZSBmaXJzdCBvcHRpb24gZmFpbHMsIGl0IHdpbGwKKyAgICAgICAgICAgIHRyeSB0aGUgc2Vjb25kLCBhbmQgc28gb24uIFRoZSBvcmRlciBzcGVjaWZpZWQgYWJvdmUgaXMKKyAgICAgICAgICAgIHByb2JhYmx5IHRoZSBiZXN0IGluIG1vc3QgY29uZGl0aW9ucy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbFBhaXJzXSBTZWN0aW9uPC90aXRsZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBpcyBvcHRpb25hbCwgYnV0IHN0cm9uZ2x5IHJlY29tbWVuZGVkLiBJZiB5b3UKKyAgICAgICAgICAgIHRyeSB0byB1c2UgbmF0aXZlIFNIRUxMMzIsIGJ1dCBidWlsdGluIFNIRUxMLCB5b3UgY291bGQKKyAgICAgICAgICAgIGhhdmUgc29tZSBiaWcgcHJvYmxlbXMgKG5hdGl2ZSBhbmQgYnVpbHRpbi9zby9lbGZkbGwgZG8KKyAgICAgICAgICAgIGNlcnRhaW4gdGhpbmdzIGluIGRpZmZlcmVudCB3YXlzKS4gVXNpbmcgZGlmZmVyZW50IGZvcm1zCisgICAgICAgICAgICBvZiBhIHBhaXIgaXMgYSAqdmVyeSosICoqdmVyeSoqIGJhZCBpZGVhLiBCeSBzcGVjaWZ5aW5nCisgICAgICAgICAgICBETEwgcGFpcnMgaGVyZSwgd2luZSB3aWxsIHByaW50IG91dCBhIG1lc3NhZ2UgaWYgeW91IHVzZQorICAgICAgICAgICAgZGlmZmVyZW50IGZvcm1zIG9mIGEgcGFpci4gWW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZQorICAgICAgICAgICAgYW55dGhpbmcgaW4gdGhpcyBzZWN0aW9uLCB0aGUgZm9sbG93aW5nIHNob3VsZCB3b3JrIGZpbmUKKyAgICAgICAgICAgIGluIGFsbCBjYXNlczoKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorW0RsbFBhaXJzXQora2VybmVsCT0ga2VybmVsMzIKK2dkaQk9IGdkaTMyCit1c2VyCT0gdXNlcjMyCitjb21tZGxnCT0gY29tZGxnMzIKK2NvbW1jdHJsPSBjb21jdGwzMgordmVyCT0gdmVyc2lvbgorc2hlbGwJPSBzaGVsbDMyCitsemV4cGFuZD0gbHozMgord2luc29jawk9IHdzb2NrMzIKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxPdmVycmlkZXNdIFNlY3Rpb248L3RpdGxlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvcm1hdCBmb3IgdGhpcyBzZWN0aW9uIGlzIHRoZSBzYW1lIGZvciBlYWNoIGxpbmU6CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CismbHQ7RExMPnssJmx0O0RMTD4sJmx0O0RMTD4uLi59ID0gJmx0O0ZPUk0+eywmbHQ7Rk9STT4sJmx0O0ZPUk0+Li4ufQorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gbG9hZCBidWlsdGluIEtFUk5FTCBwYWlyIChDYXNlIGRvZXNuJ3QKKyAgICAgICAgICAgIG1hdHRlciBoZXJlKToKKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2tlcm5lbCxrZXJuZWwzMiA9IGJ1aWx0aW4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gbG9hZCB0aGUgbmF0aXZlIENPTU1ETEcgcGFpciwgYnV0IGlmIHRoYXQgZG9lc24ndCB3b3JrCisgICAgICAgICAgICB0cnkgYnVpbHRpbjoKKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2NvbW1kbGcsY29tZGxnMzIgPSBuYXRpdmUsYnVpbHRpbgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBsb2FkIHRoZSBuYXRpdmUgQ09NQ1RMMzI6CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Citjb21jdGwzMiA9IG5hdGl2ZQorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGEgZ29vZCBnZW5lcmljIHNldHVwIChBcyBpdCBpcyBkZWZpbmVkIGluIHdpbmUuaW5pCisgICAgICAgICAgICB0aGF0IHdhcyBpbmNsdWRlZCB3aXRoIHlvdXIgd2luZSBwYWNrYWdlKToKKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1tEbGxPdmVycmlkZXNdCitrZXJuZWwzMiwgZ2RpMzIsIHVzZXIzMgk9IGJ1aWx0aW4KK2tlcm5lbCwgZ2RpLCB1c2VyCT0gYnVpbHRpbgordG9vbGhlbHAJCT0gYnVpbHRpbgorY29tZGxnMzIsIGNvbW1kbGcJPSBlbGZkbGwsIGJ1aWx0aW4sIG5hdGl2ZQordmVyc2lvbiwgdmVyCQk9IGVsZmRsbCwgYnVpbHRpbiwgbmF0aXZlCitzaGVsbDMyLCBzaGVsbAkJPSBidWlsdGluLCBuYXRpdmUKK2x6MzIsIGx6ZXhwYW5kCQk9IGJ1aWx0aW4sIG5hdGl2ZQorY29tbWN0cmwsIGNvbWN0bDMyCT0gYnVpbHRpbiwgbmF0aXZlCit3c29jazMyLCB3aW5zb2NrCT0gYnVpbHRpbgorYWR2YXBpMzIsIGNydGRsbCwgbnRkbGwJPSBidWlsdGluLCBuYXRpdmUKK21wciwgd2luc3Bvb2wJCT0gYnVpbHRpbiwgbmF0aXZlCitkZHJhdywgZGlucHV0LCBkc291bmQJPSBidWlsdGluLCBuYXRpdmUKK3dpbm1tLCB3MzJza3JubCwgbXN2ZnczMj0gYnVpbHRpbgord25hc3BpMzIsIHdvdzMyCQk9IGJ1aWx0aW4KK3N5c3RlbSwgZGlzcGxheSwgd3Byb2NzCT0gYnVpbHRpbgord2luZXBzCQkJPSBidWlsdGluCisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBZb3Ugc2VlIHRoYXQgZWxmZGxsIG9yIHNvIGlzIHRoZSBmaXJzdCBvcHRpb24gZm9yIGEgZmV3CisgICAgICAgICAgICAgIG9mIHRoZXNlIGRsbCdzLiBUaGlzIHdpbGwgZmFpbCBmb3IgeW91LCBidXQgeW91IHdvbid0CisgICAgICAgICAgICAgIG5vdGljZSBpdCBhcyB3aW5lIHdpbGwganVzdCB1c2UgdGhlIHNlY29uZCBvciB0aGlyZAorICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+VGhlIFtvcHRpb25zXSBTZWN0aW9uPC90aXRsZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vIG9uZSBzZWVtcyB0byBrbm93IHdoYXQgdGhpcyBzZWN0aW9uIGlzLi4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQWxsb2NTeXN0ZW1Db2xvcnM9MTAwCisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgU3lzdGVtIGNvbG9ycyB0byBhbGxvY2F0ZT8gSnVzdCBsZWF2ZSBpdCBhdCAxMDAuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+VGhlIFtmb250c10gU2VjdGlvbjwvdGl0bGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gc2V0cyB1cCB3aW5lJ3MgZm9udCBoYW5kbGluZy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+UmVzb2x1dGlvbiA9IDk2PC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaW5jZSB0aGUgd2F5IFggaGFuZGxlcyBmb250cyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5CisgICAgICAgICAgICBXaW5kb3dzIGRvZXMsIHdpbmUgdXNlcyBhIHNwZWNpYWwgbWVjaGFuaXNtIHRvIGRlYWwgd2l0aAorICAgICAgICAgICAgdGhlbS4gSXQgbXVzdCBzY2FsZSB0aGVtIHVzaW5nIHRoZSBudW1iZXIgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICJSZXNvbHV0aW9uIiBzZXR0aW5nLiA2MC0xMjAgYXJlIHJlYXNvbmFibGUgdmFsdWVzLCA5NiBpcworICAgICAgICAgICAgYSBuaWNlIGluIHRoZSBtaWRkbGUgb25lLiBJZiB5b3UgaGF2ZSB0aGUgcmVhbCB3aW5kb3dzCisgICAgICAgICAgICBmb250cyBhdmFpbGFibGUgKDxmaWxlbmFtZT4mbHQ7ZGlycyB0bworICAgICAgICAgICAgICB3aW5lPi9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmZvbnRzPC9maWxlbmFtZT4pLCB0aGlzIHBhcmFtZXRlciB3aWxsIG5vdCBiZSBhcworICAgICAgICAgICAgaW1wb3J0YW50LiBPZiBjb3Vyc2UsIGl0J3MgYWx3YXlzIGdvb2QgdG8gZ2V0IHlvdXIgWCBmb250cworICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPkRlZmF1bHQgPSAtYWRvYmUtdGltZXMtPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorT1BUSU9OQUw6IAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD5BbGlhczwvbGl0ZXJhbD4gc2V0dGluZyBhbGxvd3MgeW91IHRvIG1hcCBhbiBYIGZvbnQgdG8gYSBmb250CisgICAgICAgICAgICB1c2VkIGluIHdpbmUuIFRoaXMgaXMgZ29vZCBmb3IgYXBwcyB0aGF0IG5lZWQgYSBzcGVjaWFsIGZvbnQgeW91IGRvbid0IGhhdmUsCisgICAgICAgICAgICBidXQgYSBnb29kIHJlcGxhY2VtZW50IGV4aXN0cy4gVGhlIHN5bnRheCBpcyBsaWtlIHNvOgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQWxpYXNYID0gW0Zha2Ugd2luZG93cyBuYW1lXSxbUmVhbCBYIG5hbWVdJmx0OyxvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbj4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gUmVwbGFjZSAiQWxpYXNYIiB3aXRoICJBbGlhczAiLAorICAgICAgICAgICAgdGhlbiAiQWxpYXMxIiBhbmQgc28gb24uIFRoZSBmYWtlIHdpbmRvd3MgbmFtZSBpcyB0aGUgbmFtZQorICAgICAgICAgICAgdGhhdCB0aGUgZm9udCB3aWxsIGJlIHVuZGVyIGEgd2luZG93cyBhcHAgaW4gd2luZS4gVGhlCisgICAgICAgICAgICByZWFsIFggbmFtZSBpcyB0aGUgZm9udCBuYW1lIGFzIHNlZW4gYnkgWCAoUnVuCisgICAgICAgICAgICAieGZvbnRzZWwiKS4gVGhlIG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdSBkZWZpbmUuIElmIGl0IGlzIG5vdAorICAgICAgICAgICAgdXNlZCwgdGhlbiB3aW5lIHdpbGwganVzdCB0cnkgdG8gZXh0cmFjdCB0aGUgZmFrZSB3aW5kb3dzCisgICAgICAgICAgICBuYW1lIGl0c2VsZiBhbmQgbm90IHVzZSB0aGUgdmFsdWUgeW91IGVudGVyLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBhbGlhcyB3aXRob3V0IG1hc2tpbmcuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBpbiB3aW5kb3dzCisgICAgICAgICAgICBhcHBzIGFzICJHb29nbGUiLiBXaGVuIGRlZmluaW5nIGFuIGFsaWFzIGluIGEgY29uZmlnIGZpbGUsIGZvcmdldCBhYm91dCBteQorICAgICAgICAgICAgY29tbWVudCB0ZXh0IChUaGUgIiZsdDstLSBibGFoIiBzdHVmZikKKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FsaWFzMCA9IEZvbywtLWdvb2dsZS0gICAgICAmbHQ7LS0gTm90ZSB0aGUgbm8gc3BhY2VzIGFmdGVyIHRoZSAiID0gIi4gSW1wb3J0YW50IQorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBtYXNraW5nIGVuYWJsZWQuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBhcyAiRm9vIiBpbgorICAgICAgICAgICAgd2luZG93cyBhcHBzLgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQWxpYXMxID0gRm9vLC0tZ29vZ2xlLSxzdWJzdCAKKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mbyBjaGVjayBvdXQgPGZpbGVuYW1lPiZsdDtkaXJzIHRvIHdpbmU+L2RvY3VtZW50YXRpb24vZm9udHM8L2ZpbGVuYW1lPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPlRoZSBbc2VyaWFscG9ydHNdLCBbcGFyYWxsZWxwb3J0c10sIFtzcG9vbGVyXSwgYW5kIFtwb3J0c10gU2VjdGlvbnM8L3RpdGxlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXZlbiB0aG91Z2ggaXQgc291bmRzIGxpa2UgYSBsb3Qgb2Ygc2VjdGlvbnMsIHRoZXNlIGFyZQorICAgICAgICAgICAgYWxsIGNsb3NlbHkgcmVsYXRlZC4gVGhleSBhbGwgYXJlIGZvciBjb21tdW5pY2F0aW9ucyBhbmQKKyAgICAgICAgICAgIHBhcmFsbGVsIHBvcnRzLiAKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgW3NlcmlhbHBvcnRzXSBzZWN0aW9uIHRlbGxzIHdpbmUgd2hhdCBzZXJpYWwgcG9ydHMgaXQKKyAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlLgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPkNvbVg9L2Rldi9jdWFZPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiB0aGUgQ09NCisgICAgICAgICAgICBwb3J0IGluIFdpbmRvd3MgKDEtOCkgYW5kIDxsaXRlcmFsPlk8L2xpdGVyYWw+IHdpdGggdGhlCisgICAgICAgICAgICBudW1iZXIgb2YgaXQgaW4gPGxpdGVyYWw+WDwvbGl0ZXJhbD4gKFVzdWFsbHkgdGhlIG51bWJlcgorICAgICAgICAgICAgb2YgdGhlIHBvcnQgaW4gV2luZG93cyBtaW51cyAxKS4gPGxpdGVyYWw+Q29tWDwvbGl0ZXJhbD4KKyAgICAgICAgICAgIGNhbiBhY3R1YWxseSBlcXVhbCBhbnkgZGV2aWNlCisgICAgICAgICAgICAoPG1lZGlhbGFiZWw+L2Rldi9tb2RlbTwvbWVkaWFsYWJlbD4gaXMgYWNjZXB0YWJsZSkuIEl0IGlzCisgICAgICAgICAgICBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBkZWZpbmUgYW55IENPTSBwb3J0cyAoQW4gb3B0aW9uYWwKKyAgICAgICAgICAgIHNldHRpbmcpLiBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Q29tMT0vZGV2L2N1YTA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIGluIHRoZSBzZWN0aW9uIHRvIGRlZmluZQorICAgICAgICAgICAgYWxsIG9mIHRoZSBDT00gcG9ydHMgeW91IG5lZWQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFtwYXJhbGxlbHBvcnRzXSBzZWN0aW9uIHNldHMgdXAgYW55IHBhcmFsbGVsIHBvcnRzCisgICAgICAgICAgICB0aGF0IHdpbGwgYmUgYWxsb3dlZCBhY2Nlc3MgdW5kZXIgd2luZS4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5McHRYPS9kZXYvbHBZPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZWVtIGZhcm1pbGlhcj8gU3ludGF4IGlzIGp1c3QgbGlrZSB0aGUgQ09NIHBvcnQgc2V0dGluZy4KKyAgICAgICAgICAgIFJlcGxhY2UgPGxpdGVyYWw+WDwvbGl0ZXJhbD4gd2l0aCBhIHZhbHVlIGZyb20gMS00IGFzIGl0CisgICAgICAgICAgICBpcyBpbiBXaW5kb3dzIGFuZCA8bGl0ZXJhbD5ZPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbQorICAgICAgICAgICAgMC0zICg8bGl0ZXJhbD5ZPC9saXRlcmFsPiBpcyB1c3VhbGx5IHRoZSB2YWx1ZSBpbiB3aW5kb3dzCisgICAgICAgICAgICBtaW51cyAxLCBqdXN0IGxpa2UgZm9yIENPTSBwb3J0cykuIFlvdSBkb24ndCBhbHdheXMgbmVlZAorICAgICAgICAgICAgdG8gZGVmaW5lIGEgcGFyYWxsZWwgcG9ydCAoQUtBLCBpdCdzIG9wdGlvbmFsKS4gQXMgd2l0aAorICAgICAgICAgICAgdGhlIG90aGVyIHNlY3Rpb24sIExwdFggY2FuIGVxdWFsICBhbnkgZGV2aWNlIChNYXliZQorICAgICAgICAgICAgPG1lZGlhbGFiZWw+L2Rldi9wcmludGVyPC9tZWRpYWxhYmVsPikuIEhlcmUgaXMgYW4KKyAgICAgICAgICAgIGV4YW1wbGU6ICA8cHJvZ3JhbWxpc3Rpbmc+THB0MT0vZGV2L2xwMDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFtzcG9vbGVyXSBzZWN0aW9uIHdpbGwgaW5mb3JtIHdpbmUgd2hlcmUgdG8gc3Bvb2wKKyAgICAgICAgICAgIHByaW50IGpvYnMuIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHRyeSBwcmludGluZy4gV2luZQorICAgICAgICAgICAgZG9jcyBjbGFpbSB0aGF0IHNwb29saW5nIGlzICJyYXRoZXIgcHJpbWl0aXZlIiBhdCB0aGlzCisgICAgICAgICAgICB0aW1lLCBzbyBpdCB3b24ndCB3b3JrIHBlcmZlY3RseS4gSVQgSVMgT1BUSU9OQUwuIFRoZSBvbmx5CisgICAgICAgICAgICBzZXR0aW5nIHlvdSB1c2UgaW4gdGhpcyBzZWN0aW9uIHdvcmtzIHRvIG1hcCBhIHBvcnQgKExQVDEsCisgICAgICAgICAgICBmb3IgZXhhbXBsZSkgdG8gYSBmaWxlIG9yIGEgY29tbWFuZC4gSGVyZSBpcyBhbiBleGFtcGxlLAorICAgICAgICAgICAgbWFwcGluZyBMUFQxIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT5vdXQucHM8L2ZpbGVuYW1lPjogCisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+TFBUMTo9b3V0LnBzPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbWFwcyBwcmludGluZyBqb2JzIHRvIExQVDEgdG8gdGhlCisgICAgICAgICAgICBjb21tYW5kIDxjb21tYW5kPmxwcjwvY29tbWFuZD4uIE5vdGljZSAgdGhlIHw6IAorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPkxQVDE6PXxscHI8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBbcG9ydHNdIHNlY3Rpb24gaXMgdXN1YWxseSB1c2VmdWwgb25seSBmb3IgcGVvcGxlIHdobworICAgICAgICAgICAgbmVlZCBkaXJlY3QgcG9ydCBhY2Nlc3MgZm9yIHByb2dyYW1zIHJlcXVpcmluZyBkb25nbGVzIG9yCisgICAgICAgICAgICBzY2FubmVycy4gSUYgWU9VIERPTidUIE5FRUQgSVQsIERPTidUIFVTRSBJVCEgCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPnJlYWQ9MHg3NzksMHgzNzksMHgyODAtMHgyYTA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgR2l2ZXMgZGlyZWN0IHJlYWQgYWNjZXNzIHRvIHRob3NlIElPJ3MuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPndyaXRlPTB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIEdpdmVzIGRpcmVjdCB3cml0ZSBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4gSXQgcHJvYmFibHkgYQorICAgICAgICAgICAgZ29vZCBpZGVhIHRvIGtlZXAgdGhlIHZhbHVlcyBvZiB0aGUKKyAgICAgICAgICAgIDxsaXRlcmFsPnJlYWQ8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD53cml0ZTwvbGl0ZXJhbD4KKyAgICAgICAgICAgIHNldHRpbmdzIHRoZSBzYW1lLiBUaGlzIHN0dWZmIHdpbGwgb25seSB3b3JrICB3aGVuIHlvdSdyZQorICAgICAgICAgICAgcm9vdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT5UaGUgW3NweV0sIFtSZWdpc3RyeV0sIFt0d2Vhay5sYXlvdXRdLCBhbmQgW3Byb2dyYW1zXSBTZWN0aW9uczwvdGl0bGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBbc3B5XSBpcyB1c2VkIHRvIEluY2x1ZGUgb3IgZXhjbHVkZSBkZWJ1ZyBtZXNzYWdlcywgYW5kIHRvCisgICAgICAgICAgICBvdXRwdXQgdGhlbSB0byBhIGZpbGUuIFRoZSBsYXR0ZXIgaXMgcmFyZWx5IHVzZWQuIFRIRVNFCisgICAgICAgICAgICBBUkUgQUxMIE9QVElPTkFMIEFORCBZT1UgUFJPQkFCTFkgRE9OJ1QgTkVFRCBUTyBBREQgT1IKKyAgICAgICAgICAgIFJFTU9WRSBBTllUSElORyBJTiBUSElTIFNFQ1RJT04gVE8gWU9VUiBDT05GSUcuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPkZpbGU9L2JsYW5jbzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBTZXRzIHRoZSBsb2dmaWxlIGZvciB3aW5lLiBTZXQgdG8gQ09OIHRvIGxvZyB0byBzdGFuZGFyZCBvdXQuCisgICAgICAgICAgICBUSElTIElTIFJBUkVMWSBVU0VELgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5FeGNsdWRlPVdNX1NJWkU7V01fVElNRVI7PC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIEV4Y2x1ZGVzIGRlYnVnIG1lc3NhZ2VzIGFib3V0IDxjb25zdGFudD5XTV9TSVpFPC9jb25zdGFudD4KKyAgICAgICAgICAgIGFuZCA8Y29uc3RhbnQ+V01fVElNRVI8L2NvbnN0YW50PiBpbiB0aGUgbG9nZmlsZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+SW5jbHVkZT1XTV9TSVpFO1dNX1RJTUVSOzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBJbmNsdWRlcyBkZWJ1ZyBtZXNzYWdlcyBhYm91dCA8Y29uc3RhbnQ+V01fU0laRTwvY29uc3RhbnQ+CisgICAgICAgICAgICBhbmQgPGNvbnN0YW50PldNX1RJTUVSPC9jb25zdGFudD4gaW4gdGhlIGxvZ2ZpbGUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgW1JlZ2lzdHJ5XSBjYW4gYmUgdXNlZCB0byB0ZWxsIHdpbmUgd2hlcmUgeW91ciBvbGQgd2luZG93cworICAgICAgICAgICAgcmVnaXN0cnkgZmlsZXMgZXhpc3QuIFRoaXMgc2VjdGlvbiBpcyBjb21wbGV0ZWx5IG9wdGlvbmFsCisgICAgICAgICAgICBhbmQgdXNlbGVzcyB0byBwZW9wbGUgdXNpbmcgd2luZSB3aXRob3V0IGFuIGV4aXN0aW5nCisgICAgICAgICAgICB3aW5kb3dzIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+VXNlckZpbGVOYW1lPS9kaXJzL3RvL3VzZXIucmVnPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB5b3VyIG9sZCA8ZmlsZW5hbWU+dXNlci5yZWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5Mb2NhbE1hY2hpbmVGaWxlTmFtZT0vZGlycy90by9zeXN0ZW0ucmVnPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB5b3VyIG9sZCA8ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgW3R3ZWFrLmxheW91dF0gaXMgZGV2b3RlZCB0byB3aW5lJ3MgbG9vay4gVGhlcmUgaXMgb25seQorICAgICAgICAgICAgb25lIHNldHRpbmcgZm9yIGl0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5XaW5lTG9vaz13aW4zMXx3aW45NXx3aW45ODwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBXaWxsIGNoYW5nZSB0aGUgbG9vayBvZiB3aW5lIGZyb20gV2luZG93cyAzLjEgdG8gV2luZG93cyA5NS4KKyAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD53aW45ODwvbGl0ZXJhbD4gc2V0dGluZyBiZWhhdmVzCisgICAgICAgICAgICBqdXN0IGxpa2UgPGxpdGVyYWw+d2luOTU8L2xpdGVyYWw+IG1vc3Qgb2YgdGhlIHRpbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgW3Byb2dyYW1zXSBjYW4gYmUgdXNlZCB0byBzYXkgd2hhdCBwcm9ncmFtcyBydW4gdW5kZXIKKyAgICAgICAgICAgIHNwZWNpYWwgY29uZGl0aW9ucy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+RGVmYXVsdD0vcHJvZ3JhbS90by9leGVjdXRlLmV4ZTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGJlIHJ1biBpZiB3aW5lIGlzIHN0YXJ0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvZ3JhbS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+U3RhcnR1cD0vcHJvZ3JhbS90by9leGVjdXRlLmV4ZTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGF1dG9tYXRpY2FsbHkgYmUgcnVuIGF0IHN0YXJ0dXAgZXZlcnkgdGltZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5XaGVyZSBEbyBJIFB1dCBJdD88L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgd2luZSBjb25maWcgZmlsZSBjYW4gZ28gaW4gdHdvIHBsYWNlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGMvd2luZS5jb25mPC9maWxlbmFtZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQSBzeXN0ZW13aWRlIGNvbmZpZyBmaWxlLCB1c2VkIGZvciBhbnlvbmUgd2hvIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICBoYXZlIHRoZWlyIG93bi4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+JEhPTUUvLndpbmVyYzwvZmlsZW5hbWU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFlvdXIgb3duIGNvbmZpZyBmaWxlLCB0aGF0IG9ubHkgaXMgdXNlZCBmb3IgeW91ciB1c2VyLiAKKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU28gY29weSB5b3VyIHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjL3dpbmUuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgPGZpbGVuYW1lPiRIT01FLy53aW5lcmM8L2ZpbGVuYW1lPiBmb3Igd2luZSB0byByZWNvZ25pemUgaXQuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5XaGF0IElmIEl0IERvZXNuJ3QgV29yaz88L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVyZSBpcyBhbHdheXMgYSBjaGFuY2UgdGhhdCB0aGluZ3Mgd2lsbCBnbyB3cm9uZy4gSWYgdGhlCisgICAgICAgICAgdW50aGlua2FibGUgaGFwcGVucywgIHRyeSB0aGUgbmV3c2dyb3VwLAorICAgICAgICAgIDxzeXN0ZW1pdGVtPmNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZTwvc3lzdGVtaXRlbT4gTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUKKyAgICAgICAgICBsb29rZWQgb3ZlciB0aGlzIGRvY3VtZW50IHRob3JvdWdobHksIGFuZCBoYXZlIGFsc28gcmVhZDoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjxmaWxlbmFtZT5kb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHM8L2ZpbGVuYW1lPjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovL3d3dy53ZXN0ZmFsZW4uZGUvd2l0Y2gvd2luZS1IT1dUTy50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAoT3B0aW9uYWwgYnV0IHJlY29tbWVuZGVkKQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBpbmRlZWQgaXQgbG9va3MgbGlrZSB5b3UndmUgZG9uZSB5b3VyIHJlc2VhcmNoLCBiZQorICAgICAgICAgIHByZXBhcmVkIGZvciBoZWxwZnVsIHN1Z2dlc3Rpb25zLiBJZiB5b3UgaGF2ZW4ndCwgYnJhY2UKKyAgICAgICAgICB5b3Vyc2VsZiBmb3IgaGVhdmluZyBmbGFtaW5nLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9Indpbjk1bG9vayI+CisgICAgICA8dGl0bGU+V2luOTUvOTggTG9vazwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgYnkgPz8/CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vd2luOTVsb29rPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2luOTUvV2luOTggaW50ZXJmYWNlIGNvZGUgaXMgYmVpbmcgaW50cm9kdWNlZC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbnN0ZWFkIG9mIGNvbXBpbGluZyBXaW5lIGZvciBXaW4zLjEgdnMuIFdpbjk1IHVzaW5nCisgICAgICAgIDxjb25zdGFudD4jZGVmaW5lPC9jb25zdGFudD4gc3dpdGNoZXMsIHRoZSBjb2RlIG5vdyBsb29rcyBpbiBhCisgICAgICAgIHNwZWNpYWwgW1R3ZWFrLkxheW91dF0gc2VjdGlvbiBvZgorICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gZm9yIGEKKyAgICAgICAgPGxpdGVyYWw+V2luZUxvb2s9V2luOTU8L2xpdGVyYWw+IG9yCisgICAgICAgIDxsaXRlcmFsPldpbmVMb29rPVdpbjk4PC9saXRlcmFsPiBlbnRyeS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBIGZldyBuZXcgc2VjdGlvbnMgYW5kIGEgbnVtYmVyIG9mIGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2luZS5jb25mIGZpbGU8L2ZpbGVuYW1lPiAtLSB0aGVzZSBhcmUgZm9yCisgICAgICAgIGRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlCisgICAgICAgIHJlbGVhc2UhICBUaGVzZSBlbnRyaWVzL3NlY3Rpb25zIGFyZToKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1tUd2Vhay5Gb250c10KK1N5c3RlbS5IZWlnaHQ9Jmx0O3BvaW50IHNpemU+ICAgICMgU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBzeXN0ZW0gdHlwZWZhY2UKK1N5c3RlbS5Cb2xkPVt0cnVlfGZhbHNlXSAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAorU3lzdGVtLkl0YWxpYz1bdHJ1ZXxmYWxzZV0gICAgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgaXRhbGljaXplZAorU3lzdGVtLlVuZGVybGluZT1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgdW5kZXJsaW5lZAorU3lzdGVtLlN0cmlrZU91dD1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAorT0VNRml4ZWQueHh4ICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBPRU0gZml4ZWQgdHlwZWZhY2UKK0Fuc2lGaXhlZC54eHggICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgQW5zaSBmaXhlZCB0eXBlZmFjZQorQW5zaVZhci54eHggICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCitTeXN0ZW1GaXhlZC54eHggICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIFN5c3RlbSBmaXhlZCB0eXBlZmFjZQorCitbVHdlYWsuTGF5b3V0XQorV2luZUxvb2s9W1dpbjMxfFdpbjk1fFdpbjk4XSAgIyBDaGFuZ2VzIFdpbmUncyBsb29rIGFuZCBmZWVsCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9IngxMWRydiI+CisgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIHgxMWRydiBEcml2ZXI8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSBPdmUgS+V2ZW4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi94MTFkcnY8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE1vc3QgV2luZSB1c2VycyBydW4gV2luZSB1bmRlciB0aGUgd2luZG93aW5nIHN5c3RlbSBrbm93biBhcworICAgICAgICBYMTEuIER1cmluZyBtb3N0IG9mIFdpbmUncyBoaXN0b3J5LCB0aGlzIHdhcyB0aGUgb25seSBkaXNwbGF5CisgICAgICAgIGRyaXZlciBhdmFpbGFibGUsIGJ1dCBpbiByZWNlbnQgeWVhcnMsIHBhcnRzIG9mIFdpbmUgaGFzIGJlZW4KKyAgICAgICAgcmVvcmdhbml6ZWQgdG8gYWxsb3cgZm9yIG90aGVyIGRpc3BsYXkgZHJpdmVycyAoYWx0aG91Z2ggdGhlCisgICAgICAgIG9ubHkgYWx0ZXJuYXRpdmUgY3VycmVudGx5IGF2YWlsYWJsZSBpcyBQYXRyaWsgU3RyaWR2YWxsJ3MKKyAgICAgICAgbmN1cnNlcy1iYXNlZCB0dHlkcnYsIHdoaWNoIGhlIGNsYWltcyB3b3JrcyBmb3IgZGlzcGxheWluZworICAgICAgICBjYWxjLmV4ZSkuIFRoZSBkaXNwbGF5IGRyaXZlciBpcyBjaG9zZW4gd2l0aCB0aGUKKyAgICAgICAgPGxpdGVyYWw+R3JhcGhpY3NEcml2ZXI8L2xpdGVyYWw+IG9wdGlvbiBpbiB0aGUgW3dpbmVdIHNlY3Rpb24KKyAgICAgICAgb2YgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgIDxmaWxlbmFtZT4ud2luZXJjPC9maWxlbmFtZT4sIGJ1dCBJIHdpbGwgb25seSBjb3ZlciB0aGUgeDExZHJ2CisgICAgICAgIGRyaXZlciBpbiB0aGlzIGFydGljbGUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPngxMWRydiBtb2RlcyBvZiBvcGVyYXRpb248L3RpdGxlPgorICAKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHgxMWRydiBkcml2ZXIgY29uc2lzdHMgb2YgdHdvIGNvbmNlcHR1YWxseSBkaXN0aW5jdAorICAgICAgICAgIHBpZWNlcywgdGhlIGdyYXBoaWNzIGRyaXZlciAoR0RJIHBhcnQpLCBhbmQgdGhlIHdpbmRvd2luZworICAgICAgICAgIGRyaXZlciAoVVNFUiBwYXJ0KS4gQm90aCBvZiB0aGVzZSBhcmUgbGlua2VkIGludG8gdGhlCisgICAgICAgICAgPGZpbGVuYW1lPmxpYngxMWRydi5zbzwvZmlsZW5hbWU+IG1vZHVsZSwgdGhvdWdoICh3aGljaCB5b3UKKyAgICAgICAgICBsb2FkIHdpdGggdGhlIDxsaXRlcmFsPkdyYXBoaWNzRHJpdmVyPC9saXRlcmFsPiBvcHRpb24pLiBJbgorICAgICAgICAgIFdpbmUsIHJ1bm5pbmcgb24gWDExLCB0aGUgZ3JhcGhpY3MgZHJpdmVyIG11c3QgZHJhdyBvbgorICAgICAgICAgIGRyYXdhYmxlcyAod2luZG93IGludGVyaW9ycykgcHJvdmlkZWQgYnkgdGhlIHdpbmRvd2luZworICAgICAgICAgIGRyaXZlci4gVGhpcyBkaWZmZXJzIGEgYml0IGZyb20gdGhlIFdpbmRvd3MgbW9kZWwsIHdoZXJlIHRoZQorICAgICAgICAgIHdpbmRvd2luZyBzeXN0ZW0gY3JlYXRlcyBhbmQgY29uZmlndXJlcyBkZXZpY2UgY29udGV4dHMKKyAgICAgICAgICBjb250cm9sbGVkIGJ5IHRoZSBncmFwaGljcyBkcml2ZXIsIGFuZCBhcHBsaWNhdGlvbnMgYXJlCisgICAgICAgICAgYWxsb3dlZCB0byBob29rIGludG8gdGhpcyByZWxhdGlvbnNoaXAgYW55d2hlcmUgdGhleSBsaWtlLgorICAgICAgICAgIFRodXMsIHRvIHByb3ZpZGUgYW55IHJlYXNvbmFibGUgdHJhZGVvZmYgYmV0d2VlbgorICAgICAgICAgIGNvbXBhdGliaWxpdHkgYW5kIHVzYWJpbGl0eSwgdGhlIHgxMWRydiBoYXMgdGhyZWUgZGlmZmVyZW50CisgICAgICAgICAgbW9kZXMgb2Ygb3BlcmF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+VW5tYW5hZ2VkL05vcm1hbDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQuIFdpbmRvdy1tYW5hZ2VyLWluZGVwZW5kZW50IChhbnkgcnVubmluZworICAgICAgICAgICAgICAgIHdpbmRvdyBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdworICAgICAgICAgICAgICAgIGRlY29yYXRpb25zICh0aXRsZSBiYXJzLCBib3JkZXJzLCBldGMpIGFyZSBkcmF3biBieQorICAgICAgICAgICAgICAgIFdpbmUgdG8gbG9vayBhbmQgZmVlbCBsaWtlIHRoZSByZWFsIFdpbmRvd3MuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggYXBwbGljYXRpb25zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUKKyAgICAgICAgICAgICAgICB0byBjb21wdXRlIHRoZSBleGFjdCBzaXplcyBvZiBhbnkgc3VjaCBkZWNvcmF0aW9ucywgb3IKKyAgICAgICAgICAgICAgICB0aGF0IHdhbnQgdG8gZHJhdyB0aGVpciBvd24uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5NYW5hZ2VkPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHBhcmFtZXRlcj4tLW1hbmFnZWQ8L3BhcmFtZXRlcj4gY29tbWFuZC1saW5lIG9wdGlvbgorICAgICAgICAgICAgICAgIG9yIHRoZSA8bGl0ZXJhbD5NYW5hZ2VkPC9saXRlcmFsPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcHRpb24gKHNlZSBiZWxvdykuCisgICAgICAgICAgICAgICAgT3JkaW5hcnkgdG9wLWxldmVsIGZyYW1lIHdpbmRvd3Mgd2l0aCB0aGljayBib3JkZXJzLAorICAgICAgICAgICAgICAgIHRpdGxlIGJhcnMsIGFuZCBzeXN0ZW0gbWVudXMgd2lsbCBiZSBtYW5hZ2VkIGJ5IHlvdXIKKyAgICAgICAgICAgICAgICB3aW5kb3cgbWFuYWdlci4gVGhpcyBsZXRzIHRoZXNlIGFwcGxpY2F0aW9ucyBpbnRlZ3JhdGUKKyAgICAgICAgICAgICAgICBiZXR0ZXIgd2l0aCB0aGUgcmVzdCBvZiB5b3VyIGRlc2t0b3AsIGJ1dCBtYXkgbm90CisgICAgICAgICAgICAgICAgYWx3YXlzIHdvcmsgcGVyZmVjdGx5LiAoQSByZXdyaXRlIG9mIHRoaXMgbW9kZSBvZgorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIHJvYnVzdCBhbmQgbGVzcyBwYXRjaHksIGlzCisgICAgICAgICAgICAgICAgaGlnaGx5IGRlc2lyYWJsZSwgdGhvdWdoLCBhbmQgaXMgcGxhbm5lZCB0byBiZSBkb25lCisgICAgICAgICAgICAgICAgYmVmb3JlIHRoZSBXaW5lIDEuMCByZWxlYXNlLikKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+RGVza3RvcC1pbi1hLUJveDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZXNrdG9wPC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24KKyAgICAgICAgICAgICAgICAod2l0aCBhIGdlb21ldHJ5LCBlLmcuIDxwYXJhbWV0ZXI+LS1kZXNrdG9wCisgICAgICAgICAgICAgICAgICA4MDB4NjAwPC9wYXJhbWV0ZXI+IGZvciBhIHN1Y2gtc2l6ZWQgZGVza3RvcCwgb3IKKyAgICAgICAgICAgICAgICBldmVuIDxwYXJhbWV0ZXI+LS1kZXNrdG9wIDgwMHg2MDArMCswPC9wYXJhbWV0ZXI+IHRvCisgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBwb3NpdGlvbiB0aGUgZGVza3RvcCBhdCB0aGUgdXBwZXItbGVmdAorICAgICAgICAgICAgICAgIGNvcm5lciBvZiB0aGUgZGlzcGxheSkuIFRoaXMgaXMgdGhlIG1vZGUgbW9zdAorICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgV2luZG93cyBtb2RlbC4gQWxsIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgd2luZG93cyB3aWxsIGp1c3QgYmUgV2luZS1kcmF3biB3aW5kb3dzIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICBXaW5lLXByb3ZpZGVkIGRlc2t0b3Agd2luZG93ICh3aGljaCB3aWxsIGl0c2VsZiBiZQorICAgICAgICAgICAgICAgIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIGNhbiByb2FtIGZyZWVseSB3aXRoaW4gdGhpcyB2aXJ0dWFsCisgICAgICAgICAgICAgICAgd29ya3NwYWNlIGFuZCB0aGluayB0aGV5IG93biBpdCBhbGwsIHdpdGhvdXQKKyAgICAgICAgICAgICAgICBkaXN0dXJiaW5nIHlvdXIgb3RoZXIgWCBhcHBzLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRoZSBbeDExZHJ2XSBzZWN0aW9uPC90aXRsZT4KKworICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5BbGxvY1N5c3RlbUNvbG9yczwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuCisgICAgICAgICAgICAgICAgaWYgeW91ciBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLCBhbmQgaWYgeW91CisgICAgICAgICAgICAgICAgaGF2ZW4ndCByZXF1ZXN0ZWQgYSBwcml2YXRlIGNvbG9yIG1hcC4gSXQgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNoYXJlZCBjb2xvcm1hcCBjZWxscyAocGFsZXR0ZQorICAgICAgICAgICAgICAgIGVudHJpZXMpIFdpbmUgc2hvdWxkIG9jY3VweS4gVGhlIGhpZ2hlciB0aGlzIHZhbHVlLAorICAgICAgICAgICAgICAgIHRoZSBsZXNzIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSB0byBvdGhlcgorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPlByaXZhdGVDb2xvck1hcDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuCisgICAgICAgICAgICAgICAgaWYgeW91ciBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLiBJdAorICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgc2hhcmVkIGNvbG9yCisgICAgICAgICAgICAgICAgbWFwLCBidXQgYSBwcml2YXRlIGNvbG9yIG1hcCwgd2hlcmUgYWxsIDI1NiBjb2xvcnMgYXJlCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlLiBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgV2luZSdzIHByaXZhdGUKKyAgICAgICAgICAgICAgICBjb2xvciBtYXAgaXMgb25seSBzZWVuIHdoaWxlIHRoZSBtb3VzZSBwb2ludGVyIGlzCisgICAgICAgICAgICAgICAgaW5zaWRlIGEgV2luZSB3aW5kb3csIHNvIHBzeWNoZWRlbGljIGZsYXNoaW5nIGFuZAorICAgICAgICAgICAgICAgIGZ1bmt5IGNvbG9ycyB3aWxsIGJlY29tZSByb3V0aW5lIGlmIHlvdSB1c2UgdGhlIG1vdXNlCisgICAgICAgICAgICAgICAgYSBsb3QuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5QZXJmZWN0R3JhcGhpY3M8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzCisgICAgICAgICAgICAgICAgb3IgZXhhY3QgV2luZSByb3V0aW5lcyB3aWxsIGJlIHVzZWQgZm9yIGNlcnRhaW4gUk9QCisgICAgICAgICAgICAgICAgY29kZXMgaW4gYmxpdCBvcGVyYXRpb25zLiBNb3N0IHVzZXJzIHdvbid0IG5vdGljZSBhbnkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+U2NyZWVuRGVwdGg8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGxpZXMgb25seSB0byBtdWx0aS1kZXB0aCBkaXNwbGF5cy4gSXQgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgd2hpY2ggb2YgdGhlIGF2YWlsYWJsZSBkZXB0aHMgV2luZSBzaG91bGQgdXNlIChhbmQKKyAgICAgICAgICAgICAgICB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5EaXNwbGF5PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGljaCBYMTEgZGlzcGxheSB0byB1c2UsIGFuZCBpZgorICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgd2lsbCBvdmVycmlkZSBib3RoIHRoZQorICAgICAgICAgICAgICAgIDxlbnZhcj5ESVNQTEFZPC9lbnZhcj4gZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kaXNwbGF5PC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5NYW5hZ2VkPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaW5lIGNhbiBsZXQgZnJhbWUgd2luZG93cyBiZSBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93CisgICAgICAgICAgICAgICAgbWFuYWdlci4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdGhhdAorICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5Vc2VER0E8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UKKyAgICAgICAgICAgICAgICBYRnJlZTg2J3MgPGZpcnN0dGVybT5EaXJlY3QgR3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgIEFyY2hpdGVjdHVyZTwvZmlyc3R0ZXJtPiAoREdBKSwgd2hpY2ggaXMgYWJsZSB0bworICAgICAgICAgICAgICAgIHRha2Ugb3ZlciB0aGUgZW50aXJlIGRpc3BsYXkgYW5kIHJ1biB0aGUgZ2FtZQorICAgICAgICAgICAgICAgIGZ1bGwtc2NyZWVuIGF0IG1heGltdW0gc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYKKyAgICAgICAgICAgICAgICAzLngpLCB5b3Ugc3RpbGwgaGF2ZSB0byBjb25maWd1cmUgdGhlIFggc2VydmVyIHRvIHRoZQorICAgICAgICAgICAgICAgIGdhbWUncyByZXF1ZXN0ZWQgYnBwIGZpcnN0LCBidXQgd2l0aCBER0EyIChYRnJlZTg2CisgICAgICAgICAgICAgICAgNC54KSwgcnVudGltZSBkZXB0aC1zd2l0Y2hpbmcgbWF5IGJlIHBvc3NpYmxlLAorICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB5b3VyIGRyaXZlcidzIGNhcGFiaWxpdGllcy4pIEJ1dCBiZSBhd2FyZQorICAgICAgICAgICAgICAgIHRoYXQgaWYgV2luZSBjcmFzaGVzIHdoaWxlIGluIERHQSBtb2RlLCBpdCBtYXkgbm90IGJlCisgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gcmVnYWluIGNvbnRyb2wgb3ZlciB5b3VyIGNvbXB1dGVyIHdpdGhvdXQKKyAgICAgICAgICAgICAgICByZWJvb3RpbmcuIERHQSBub3JtYWxseSByZXF1aXJlcyBlaXRoZXIgcm9vdAorICAgICAgICAgICAgICAgIHByaXZpbGVnZXMgb3IgcmVhZC93cml0ZSBhY2Nlc3MgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tZW08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPlVzZVhTaG08L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCB3YW50IERpcmVjdFggdG8gdXNlIERHQSwgeW91IGNhbiBhdCBsZWFzdAorICAgICAgICAgICAgICAgIHVzZSBYIFNoYXJlZCBNZW1vcnkgZXh0ZW5zaW9ucyAoWFNobSkuIEl0IGlzIG11Y2gKKyAgICAgICAgICAgICAgICBzbG93ZXIgdGhhbiBER0EsIHNpbmNlIHRoZSBhcHAgZG9lc24ndCBoYXZlIGRpcmVjdAorICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWUgYnVmZmVyLCBidXQgdXNpbmcgc2hhcmVkCisgICAgICAgICAgICAgICAgbWVtb3J5IHRvIGRyYXcgdGhlIGZyYW1lIGlzIGF0IGxlYXN0IGZhc3RlciB0aGFuCisgICAgICAgICAgICAgICAgc2VuZGluZyB0aGUgZGF0YSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBYMTEgc29ja2V0LCBldmVuCisgICAgICAgICAgICAgICAgdGhvdWdoIFdpbmUncyBYU2htIHN1cHBvcnQgaXMgc3RpbGwga25vd24gdG8gY3Jhc2gKKyAgICAgICAgICAgICAgICBzb21ldGltZXMuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5EWEdyYWI8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCB1c2UgREdBLCB5b3UgbWF5IHdhbnQgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICBtZWFucyB0byBjb252aW5jZSB0aGUgbW91c2UgY3Vyc29yIHRvIHN0YXkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIGdhbWUgd2luZG93LiBUaGlzIG9wdGlvbiBkb2VzIHRoYXQuIE9mIGNvdXJzZSwgYXMgd2l0aAorICAgICAgICAgICAgICAgIERHQSwgaWYgV2luZSBjcmFzaGVzLCB5b3UncmUgaW4gdHJvdWJsZSAoYWx0aG91Z2ggbm90CisgICAgICAgICAgICAgICAgYXMgYmFkbHkgYXMgaW4gdGhlIERHQSBjYXNlLCBzaW5jZSB5b3UgY2FuIHN0aWxsIHVzZQorICAgICAgICAgICAgICAgIHRoZSBrZXlib2FyZCB0byBnZXQgb3V0IG9mIFgpLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+RGVza3RvcERvdWJsZUJ1ZmZlcmVkPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgaWYgeW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCisgICAgICAgICAgICAgICAgdG8gcnVuIGluIGEgZGVza3RvcCB3aW5kb3cuIFNwZWNpZmllcyB3aGV0aGVyIHRvCisgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGEgZG91YmxlLWJ1ZmZlcmVkCisgICAgICAgICAgICAgICAgdmlzdWFsLCBzb21ldGhpbmcgbW9zdCBPcGVuR0wgZ2FtZXMgbmVlZCB0byBydW4KKyAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgPC9zZWN0Mj4gICAgICAgICAgCisgICAgPC9zZWN0MT4KKworICAgICZyZWdpc3RyeTsKKworICAgIDxzZWN0MSBpZD0iY2Ryb20tbGFiZWxzIj4KKyAgICAgIDxzZWN0MWluZm8+CisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgPGZpcnN0bmFtZT5QZXRyPC9maXJzdG5hbWU+CisgICAgICAgICAgICA8c3VybmFtZT5Ub21hc2VrPC9zdXJuYW1lPgorICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICA8YWRkcmVzcz48ZW1haWw+Jmx0O3RvbWFzZWtAZXRmLmN1bmkuY3o+PC9lbWFpbD48L2FkZHJlc3M+CisgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgPGNvbnRyaWI+Tm92IDE0IDE5OTk8L2NvbnRyaWI+CisgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgIDxmaXJzdG5hbWU+QW5kcmVhczwvZmlyc3RuYW1lPgorICAgICAgICAgICAgPHN1cm5hbWU+TW9ocjwvc3VybmFtZT4KKyAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgPGFkZHJlc3M+PGVtYWlsPiZsdDthLm1vaHJAbWFpbHRvLmRlPjwvZW1haWw+PC9hZGRyZXNzPgorICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgIDxjb250cmliPkphbiAyNSAyMDAwPC9jb250cmliPgorICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorICAgICAgPC9zZWN0MWluZm8+CisKKyAgICAgIDx0aXRsZT5Ecml2ZSBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIHdpdGggd2luZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgYnkgUGV0ciBUb21hc2VrICZsdDt0b21hc2VrQGV0Zi5jdW5pLmN6PgorICAgICAgICBOb3YgMTQgMTk5OQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIGNoYW5nZXMgYnkgQW5kcmVhcyBNb2hyICZsdDthLm1vaHJAbWFpbHRvLmRlPgorICAgICAgICBKYW4gMjUgMjAwMAorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVsczwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFVudGlsIG5vdywgeW91ciBvbmx5IHBvc3NpYmlsaXR5IG9mIHNwZWNpZnlpbmcgZHJpdmUgdm9sdW1lCisgICAgICAgIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgd2FzIHRvIHNldCB0aGVtIG1hbnVhbGx5IGluIHRoZSB3aW5lCisgICAgICAgIGNvbmZpZyBmaWxlLiBCeSBub3csIHdpbmUgY2FuIHJlYWQgdGhlbSBkaXJlY3RseSBmcm9tIHRoZQorICAgICAgICBkZXZpY2UgYXMgd2VsbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBtYW55IFdpbiA5eCBnYW1lcyBvcgorICAgICAgICBmb3Igc2V0dXAgcHJvZ3JhbXMgZGlzdHJpYnV0ZWQgb24gQ0QtUk9NcyB0aGF0IGNoZWNrIGZvcgorICAgICAgICB2b2x1bWUgbGFiZWwuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPldoYXQncyBTdXBwb3J0ZWQ/PC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KKyAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5GaWxlIFN5c3RlbTwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+Q29tbWVudDwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+RkFUIHN5c3RlbXM8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5oZCwgZmxvcHB5PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5JU085NjYwPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+Y2Ryb208L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5yZWFkcyBsYWJlbHMgb25seTwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorCisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Ib3cgVG8gU2V0IFVwPzwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFJlYWRpbmcgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyBqdXN0IHdvcmtzIGF1dG9tYWdpY2FsbHkKKyAgICAgICAgICBpZiB5b3Ugc3BlY2lmeSBhIDxsaXRlcmFsPkRldmljZT08L2xpdGVyYWw+IGxpbmUgaW4gdGhlCisgICAgICAgICAgW0RyaXZlIFhdIHNlY3Rpb24gaW4geW91ciA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIHRvIGV4aXN0IGFuZCBtdXN0IGJlIGFjY2Vzc2libGUgaWYKKyAgICAgICAgICB5b3UgZG8gdGhpcywgdGhvdWdoLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBkb24ndCBkbyB0aGF0LCB0aGVuIHlvdSBzaG91bGQgZ2l2ZSBmaXhlZAorICAgICAgICAgIDxsaXRlcmFsPkxhYmVsPTwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+U2VyaWFsPTwvbGl0ZXJhbD4KKyAgICAgICAgICBlbnRyaWVzIGluIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiwgYXMgV2luZSByZXR1cm5zCisgICAgICAgICAgdGhlc2UgZW50cmllcyBpbnN0ZWFkIGlmIG5vIGRldmljZSBpcyBnaXZlbi4gSWYgdGhleSBkb24ndAorICAgICAgICAgIGV4aXN0LCB0aGVuIFdpbmUgd2lsbCByZXR1cm4gZGVmYXVsdCB2YWx1ZXMgKGxhYmVsCisgICAgICAgICAgPGxpdGVyYWw+RHJpdmUgWDwvbGl0ZXJhbD4gYW5kIHNlcmlhbAorICAgICAgICAgIDxsaXRlcmFsPjEyMzQ1Njc4PC9saXRlcmFsPikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZ2l2ZSBhIDxsaXRlcmFsPkRldmljZT08L2xpdGVyYWw+IGVudHJ5CisgICAgICAgICAgKm9ubHkqIGZvciBkcml2ZSByYXcgc2VjdG9yIGFjY2Vzc2VzLCBidXQgbm90IGZvciByZWFkaW5nCisgICAgICAgICAgdGhlIHZvbHVtZSBpbmZvIGZyb20gdGhlIGRldmljZSAoaS5lLiB5b3Ugd2FudCBhCisgICAgICAgICAgPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4sIHByZWNvbmZpZ3VyZWQgbGFiZWwpLCB5b3UgbmVlZAorICAgICAgICAgIHRvIHNwZWNpZnkgPGxpdGVyYWw+UmVhZFZvbEluZm89MDwvbGl0ZXJhbD4gdG8gdGVsbCBXaW5lIHRvCisgICAgICAgICAgc2tpcCB0aGUgdm9sdW1lIHJlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkVYQU1QTEVTPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgY2Ryb20gYW5kIGZsb3BweTsgbGFiZWxzIHdpbGwgYmUKKyAgICAgICAgICByZWFkIGZyb20gdGhlIGRldmljZSBvbiBib3RoIGNkcm9tIGFuZCBmbG9wcHk7IHNlcmlhbAorICAgICAgICAgIG51bWJlcnMgb24gZmxvcHB5IG9ubHk6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK1tEcml2ZSBBXQorUGF0aD0vbW50L2Zsb3BweQorVHlwZT1mbG9wcHkKK0RldmljZT0vZGV2L2ZkMAorRmlsZXN5c3RlbT1tc2RvcworCitbRHJpdmUgUl0KK1BhdGg9L21udC9jZHJvbQorVHlwZT1jZHJvbQorRGV2aWNlPS9kZXYvaGRhMQorRmlsZXN5c3RlbT13aW45NQorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSdzIGFuIGV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgQ0QtUk9NIGxhYmVsOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitbRHJpdmUgSl0KK1BhdGg9L21udC9jZHJvbQorVHlwZT1jZHJvbQorTGFiZWw9WDIzNEdDRFNFCis7IG5vdGUgdGhhdCB0aGUgZGV2aWNlIGlzbid0IHJlYWxseSBuZWVkZWQgaGVyZSBhcyB3ZSBoYXZlIGEgZml4ZWQgbGFiZWwKK0RldmljZT0vZGV2L2Nkcm9tCitGaWxlc3lzdGVtPW1zZG9zCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VG9kbyAvIE9wZW4gSXNzdWVzPC90aXRsZT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICBUaGUgY2Ryb20gbGFiZWwgY2FuIGJlIHJlYWQgb25seSBpZiB0aGUgZGF0YSB0cmFjayBvZgorICAgICAgICAgICAgICB0aGUgZGlzayByZXNpZGVzIGluIHRoZSBmaXJzdCB0cmFjayBhbmQgdGhlIGNkcm9tIGlzCisgICAgICAgICAgICAgIGlzbzk2NjAuCisgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgQmV0dGVyIGNoZWNraW5nIGZvciBGQVQgc3VwZXJibG9jayAoaXQgbm93IGNoZWNrcyBvbmx5CisgICAgICAgICAgICAgIG9uZSBieXRlKS4gPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgbGFiZWxzL3NlcmlhbCBudW1zIFdSSVRJTkcuCisgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgQ2FuIHRoZSBsYWJlbCBiZSBsb25nZXIgdGhhbiAxMSBjaGFycz8gKGlzbzk2NjAgaGFzIDMyCisgICAgICAgICAgICAgIGNoYXJzKS4KKyAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICBXaGF0IGFib3V0IHJlYWRpbmcgZXh0MiB2b2x1bWUgbGFiZWw/IC4uLi4KKyAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9ImRsbC1vdmVycmlkZXMiPgorICAgICAgPHRpdGxlPkRsbCBPdmVycmlkZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT5ieSBPdmUgS2FhdmVuICZsdDtvdmVrQGFyY3RpY25ldC5ubz48L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vZGxsLW92ZXJyaWRlczwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RpdmVzIFtEbGxEZWZhdWx0c10KKyAgICAgICAgYW5kIFtEbGxPdmVycmlkZXNdIGFyZSB0aGUgc3ViamVjdCBvZiBzb21lIGNvbmZ1c2lvbi4gVGhlCisgICAgICAgIG92ZXJhbGwgcHVycG9zZSBvZiBtb3N0IG9mIHRoZXNlIGRpcmVjdGl2ZXMgYXJlIGNsZWFyIGVub3VnaCwKKyAgICAgICAgdGhvdWdoIC0gZ2l2ZW4gYSBjaG9pY2UsIHNob3VsZCBXaW5lIHVzZSBpdHMgb3duIGJ1aWx0LWluCisgICAgICAgIERMTHMsIG9yIHNob3VsZCBpdCB1c2UgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlcyBmb3VuZAorICAgICAgICBpbiBhbiBleGlzdGluZyBXaW5kb3dzIGluc3RhbGxhdGlvbj8gVGhpcyBkb2N1bWVudCBleHBsYWlucworICAgICAgICBob3cgdGhpcyBmZWF0dXJlIHdvcmtzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5ETEwgdHlwZXM8L3RpdGxlPgorICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIEEgIm5hdGl2ZSIgRExMIGlzIGEgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0IFdpbmRvd3MuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+YnVpbHRpbjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQSAiYnVpbHRpbiIgRExMIGlzIGEgV2luZSBETEwuIFRoZXNlIGNhbiBlaXRoZXIgYmUgYQorICAgICAgICAgICAgICAgIHBhcnQgb2YgPGZpbGVuYW1lPmxpYndpbmUuc288L2ZpbGVuYW1lPiwgb3IgbW9yZQorICAgICAgICAgICAgICAgIHJlY2VudGx5LCBpbiBhIHNwZWNpYWwgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IFdpbmUgaXMgYWJsZSB0byBsb2FkIG9uIGRlbWFuZC4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5lbGZkbGw8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIEFuICJlbGZkbGwiIGlzIGEgV2luZSA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHdpdGggYSBzcGVjaWFsIFdpbmRvd3MtbGlrZSBmaWxlIHN0cnVjdHVyZSB0aGF0IGlzIGFzCisgICAgICAgICAgICAgICAgY2xvc2UgdG8gV2luZG93cyBhcyBwb3NzaWJsZSwgYW5kIHRoYXQgY2FuIGFsc28KKyAgICAgICAgICAgICAgICBzZWFtbGVzc2x5IGxpbmsgZHluYW1pY2FsbHkgd2l0aCAibmF0aXZlIiBETExzLCBieQorICAgICAgICAgICAgICAgIHVzaW5nIHNwZWNpYWwgRUxGIGxvYWRlciBhbmQgbGlua2VyIHRyaWNrcy4gQmVydGhvCisgICAgICAgICAgICAgICAgU3R1bHRpZW5zIGRpZCBzb21lIHdvcmsgb24gdGhpcywgYnV0IHRoaXMgZmVhdHVyZSBoYXMKKyAgICAgICAgICAgICAgICBub3QgeWV0IGJlZW4gbWVyZ2VkIGJhY2sgaW50byBXaW5lIChiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgcG9saXRpY2FsIHJlYXNvbnMgYW5kIGxhY2sgb2YgdGltZSksIHNvIHRoaXMgRExMIHR5cGUKKyAgICAgICAgICAgICAgICBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2ZmaWNpYWwgV2luZSBhdCB0aGlzIHRpbWUuIEluCisgICAgICAgICAgICAgICAgdGhlIG1lYW50aW1lLCB0aGUgImJ1aWx0aW4iIERMTCB0eXBlIGdhaW5lZCBzb21lIG9mCisgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmVzIG9mIGVsZmRsbHMgKHN1Y2ggYXMgZHluYW1pYyBsb2FkaW5nKSwgc28KKyAgICAgICAgICAgICAgICBpdCdzIHBvc3NpYmxlIHRoYXQgImVsZmRsbCIgZnVuY3Rpb25hbGl0eSB3aWxsIGJlCisgICAgICAgICAgICAgICAgZm9sZGVkIGludG8gImJ1aWx0aW4iIGF0IHNvbWUgcG9pbnQuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+c288L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIEEgbmF0aXZlIFVuaXggPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGUsIHdpdGgKKyAgICAgICAgICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gY29udmVyc2lvbiB0aHVua3MgZ2VuZXJhdGVkIG9uIHRoZQorICAgICAgICAgICAgICAgIGZseSBhcyB0aGUgbGlicmFyeSBpcyBsb2FkZWQuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bAorICAgICAgICAgICAgICAgIGZvciBsaWJyYXJpZXMgc3VjaCBhcyAiZ2xpZGUiIHRoYXQgaGFzIGV4YWN0bHkgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBBUEkgb24gYm90aCBXaW5kb3dzIGFuZCBVbml4LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PiAgICAgICAgICAKKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIHNlY3Rpb248L3RpdGxlPgorICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5FWFRSQV9MRF9MSUJSQVJZX1BBVEg8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgV2luZSdzIERMTAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcy4gV2luZSB3aWxsIHNlYXJjaCB0aGlzCisgICAgICAgICAgICAgICAgcGF0aCB3aGVuIHRyeWluZyB0byBsb2NhdGUgYSBETEwgb2YgdGhlIHR5cGUKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPiBvcgorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmVsZmRsbDwvbGl0ZXJhbD4uIChUaGlzIGRvZXMgbm90IGFwcGx5IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYndpbmUuc288L2ZpbGVuYW1lPiwgc2luY2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlid2luZS5zbzwvZmlsZW5hbWU+IGlzIG5vdCBhIERMTCBpbiB0aGlzCisgICAgICAgICAgICAgICAgc2Vuc2UuKQorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPkRlZmF1bHRMb2FkT3JkZXI8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIGluIHdoYXQgb3JkZXIgV2luZSBzaG91bGQgc2VhcmNoIGZvcgorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdAorICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZSBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VGhlIFtEbGxQYWlyc10gc2VjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEF0IG9uZSB0aW1lLCB0aGVyZSB3YXMgYSBzZWN0aW9uIGNhbGxlZCBbRGxsUGFpcnNdIGluIHRoZQorICAgICAgICAgIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQKKyAgICAgICAgICBiZWNhdXNlIHRoZSBwYWlyaW5nIGluZm9ybWF0aW9uIGhhcyBub3cgYmVlbiBlbWJlZGRlZCBpbnRvCisgICAgICAgICAgV2luZSBpdHNlbGYuIChUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gd2FzIG1lcmVseSB0byBiZQorICAgICAgICAgIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIgYXR0ZW1wdGVkIHRvIHBhaXIKKyAgICAgICAgICBjb2RlcGVuZGVudCAxNi1iaXQvMzItYml0IERMTHMgb2YgZGlmZmVyZW50IHR5cGVzLikgSWYgeW91CisgICAgICAgICAgc3RpbGwgaGF2ZSB0aGlzIGluIHlvdXIgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPiwgeW91IG1heSBzYWZlbHkgZGVsZXRlIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgc2VjdGlvbiBzcGVjaWZpZXMgaG93IHlvdSB3YW50IHNwZWNpZmljIERMTHMgdG8gYmUKKyAgICAgICAgICBoYW5kbGVkLCBpbiBwYXJ0aWN1bGFyIHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlICJuYXRpdmUiIERMTHMKKyAgICAgICAgICBvciBub3QsIGlmIHlvdSBoYXZlIHNvbWUgZnJvbSBhIHJlYWwgV2luZG93cyBjb25maWd1cmF0aW9uLgorICAgICAgICAgIEJlY2F1c2UgYnVpbHRpbnMgZG8gbm90IG1peCBzZWFtbGVzc2x5IHdpdGggbmF0aXZlIERMTHMgeWV0LAorICAgICAgICAgIGNlcnRhaW4gRExMIGRlcGVuZGVuY2llcyBtYXkgYmUgcHJvYmxlbWF0aWMsIGJ1dCB3b3JrYXJvdW5kcworICAgICAgICAgIGV4aXN0IGluIFdpbmUgZm9yIG1hbnkgcG9wdWxhciBETEwgY29uZmlndXJhdGlvbnMuIEFsc28gc2VlCisgICAgICAgICAgV1dOJ3MgWzE2XVN0YXR1cyBQYWdlIHRvIGZpZ3VyZSBvdXQgaG93IHdlbGwgeW91ciBmYXZvcml0ZQorICAgICAgICAgIERMTCBpcyBpbXBsZW1lbnRlZCBpbiBXaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEl0IGlzIG9mIGNvdXJzZSBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGJ5CisgICAgICAgICAgZXhwbGljdGx5IHVzaW5nIFdpbmUncyA8cGFyYW1ldGVyPi0tZGxsPC9wYXJhbWV0ZXI+CisgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuICBTb21lCisgICAgICAgICAgaGludHMgZm9yIGNob29zaW5nIHlvdXIgb3B0aW1hbCBjb25maWd1cmF0aW9uIChsaXN0ZWQgYnkKKyAgICAgICAgICAxNi8zMi1iaXQgRExMIHBhaXIpOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPmtybmwzODYsIGtlcm5lbDMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBOYXRpdmUgdmVyc2lvbnMgb2YgdGhlc2Ugd2lsbCBuZXZlciB3b3JrLCBzbyBkb24ndCB0cnkuIExlYXZlCisgICAgICAgICAgICAgICAgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+Z2RpLCBnZGkzMjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgR3JhcGhpY3MgRGV2aWNlIEludGVyZmFjZS4gTm8gZWZmb3J0IGhhcyBiZWVuIG1hZGUgYXQgdHJ5aW5nIHRvCisgICAgICAgICAgICAgICAgcnVuIG5hdGl2ZSBHREkuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT51c2VyLCB1c2VyMzI8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFdpbmRvdyBtYW5hZ2VtZW50IGFuZCBzdGFuZGFyZCBjb250cm9scy4gSXQgd2FzCisgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gdXNlIFdpbjk1J3MgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgorICAgICAgICAgICAgICAgIHZlcnNpb25zIGF0IHNvbWUgcG9pbnQgKGlmIGFsbCBvdGhlciBETExzIHRoYXQgZGVwZW5kCisgICAgICAgICAgICAgICAgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPikuIEhvd2V2ZXIsIHRoaXMgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgcG9zc2libGUgYWZ0ZXIgdGhlIEFkZHJlc3MgU3BhY2UgU2VwYXJhdGlvbiwgc28gbGVhdmUKKyAgICAgICAgICAgICAgICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5udGRsbDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgTlQga2VybmVsIEFQSS4gQWx0aG91Z2ggYmFkbHkgZG9jdW1lbnRlZCwgdGhlCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMgd2lsbCBuZXZlcgorICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPnczMnNrcm5sPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaW4zMnMgKGZvciBXaW4zLngpLiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgorICAgICAgICAgICAgICAgIHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlciB3b3JrLiBMZWF2ZSBhdAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPndvdzMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaW4xNiBzdXBwb3J0IGxpYnJhcnkgZm9yIE5ULiBUaGUKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlcgorICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPnN5c3RlbTwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgV2luMTYga2VybmVsIHN0dWZmLiBXaWxsIG5ldmVyIHdvcmsKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LiBMZWF2ZSBhdAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5kaXNwbGF5PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBEaXNwbGF5IGRyaXZlci4gRGVmaW5pdGVseSBsZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT50b29saGVscDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgVG9vbCBoZWxwZXIgcm91dGluZXMuIFRoaXMgaXMgcmFyZWx5IGEgc291cmNlIG9mIHByb2JsZW1zLgorICAgICAgICAgICAgICAgIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPnZlciwgdmVyc2lvbjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgVmVyc2lvbmluZy4gU2VsZG9tIHVzZWZ1bCB0byBtZXNzIHdpdGguCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+YWR2YXBpMzI8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFJlZ2lzdHJ5IGFuZCBzZWN1cml0eSBmZWF0dXJlcy4gVHJ5aW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzIG1heSBvciBtYXkKKyAgICAgICAgICAgICAgICBub3Qgd29yay4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5jb21tZGxnLCBjb21kbGczMjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQ29tbW9uIERpYWxvZ3MsIHN1Y2ggYXMgY29sb3IgcGlja2VyLCBmb250IGRpYWxvZywKKyAgICAgICAgICAgICAgICBwcmludCBkaWFsb2csIG9wZW4vc2F2ZSBkaWFsb2csIGV0Yy4gSXQgaXMgc2FmZSB0byB0cnkKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPmNvbW1jdHJsLCBjb21jdGwzMjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQ29tbW9uIENvbnRyb2xzLiBUaGlzIGlzIHRvb2xiYXJzLCBzdGF0dXMgYmFycywgbGlzdCBjb250cm9scywKKyAgICAgICAgICAgICAgICB0aGUgd29ya3MuIEl0IGlzIHNhZmUgdG8gdHJ5IDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+c2hlbGwsIHNoZWxsMzI8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFNoZWxsIGludGVyZmFjZSAoZGVza3RvcCwgZmlsZXN5c3RlbSwgZXRjKS4gQmVpbmcgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgIG1vc3QgdW5kb2N1bWVudGVkIHBpZWNlcyBvZiBXaW5kb3dzLCB5b3UgbWF5IGhhdmUgbHVjayB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiwgc2hvdWxkIHlvdSBuZWVkIGl0LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT53aW5zb2NrLCB3c29jazMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaW5kb3dzIFNvY2tldHMuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24KKyAgICAgICAgICAgICAgICB3aWxsIG5vdCB3b3JrIHVuZGVyIFdpbmUsIHNvIGxlYXZlIGF0CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+aWNtcDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgSUNNUCByb3V0aW5lcyBmb3Igd3NvY2szMi4gQXMgd2l0aCB3c29jazMyLCBsZWF2ZSBhdAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPm1wcjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBtYXkgbm90IHdvcmsgZHVlCisgICAgICAgICAgICAgICAgdG8gdGh1bmtpbmcgaXNzdWVzLiBMZWF2ZSBhdAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPmx6ZXhwYW5kLCBsejMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBMZW1wZWwtWml2IGRlY29tcHJlc3Npb24uIFdpbmUncworICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gb3VnaHQgdG8gd29yayBmaW5lLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPndpbmFzcGksIHduYXNwaTMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZHZhbmNlZCBTQ1NJIFBlcmlwaGVyYWwgSW50ZXJmYWNlLiBUaGUKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlcgorICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPmNydGRsbDwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQyBSdW50aW1lIGxpYnJhcnkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CisgICAgICAgICAgICAgICAgdmVyc2lvbiB3aWxsIGVhc2lseSB3b3JrIGJldHRlciB0aGFuIFdpbmUncyBvbiB0aGlzCisgICAgICAgICAgICAgICAgb25lLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPndpbnNwb29sLmRydjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgUHJpbnRlciBzcG9vbGVyLiBZb3UgYXJlIG5vdCBsaWtlbHkgdG8gaGF2ZSBtb3JlIGx1Y2sKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24uCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+ZGRyYXc8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIERpcmVjdERyYXcvRGlyZWN0M0QuIFNpbmNlIFdpbmUgZG9lcyBub3QgaW1wbGVtZW50IHRoZQorICAgICAgICAgICAgICAgIERpcmVjdFggSEFMLCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgd2lsbCBub3Qgd29yayBhdCB0aGlzIHRpbWUuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+ZGlucHV0PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBEaXJlY3RJbnB1dC4gUnVubmluZyB0aGlzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgICBtYXkgb3IgbWF5IG5vdCB3b3JrLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5kc291bmQ8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LCBidXQgZG9uJ3QgY291bnQgb24gaXQuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+ZHBsYXkvZHBsYXl4PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBEaXJlY3RQbGF5LiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgb3VnaHQgdG8gd29yayBiZXN0IG9uIHRoaXMsIGlmIGF0IGFsbC4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5tbXN5c3RlbSwgd2lubW08L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIE11bHRpbWVkaWEgc3lzdGVtLiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgorICAgICAgICAgICAgICAgIHZlcnNpb24gaXMgbm90IGxpa2VseSB0byB3b3JrLiBMZWF2ZSBhdAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPm1zYWNtLCBtc2FjbTMyPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdWRpbyBDb21wcmVzc2lvbiBNYW5hZ2VyLiBUaGUKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPiB2ZXJzaW9uIHdvcmtzIGJlc3QsIGlmIHlvdQorICAgICAgICAgICAgICAgIHNldCBtc2FjbS5kcnYgdG8gdGhlIHNhbWUuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+bXN2aWRlbywgbXN2ZnczMjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgVmlkZW8gZm9yIFdpbmRvd3MuIEl0IGlzIHNhZmUgKGFuZCByZWNvbW1lbmRlZCkgdG8gdHJ5CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5tY2ljZGEuZHJ2PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBDRCBBdWRpbyBNQ0kgZHJpdmVyLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPm1jaXNlcS5kcnY8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIE1JREkgU2VxdWVuY2VyIE1DSSBkcml2ZXIgKDxmaWxlbmFtZT4uTUlEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwbGF5YmFjaykuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+bWNpd2F2ZS5kcnY8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIFdhdmUgYXVkaW8gTUNJIGRyaXZlciAoPGZpbGVuYW1lPi5XQVY8L2ZpbGVuYW1lPiBwbGF5YmFjaykuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+bWNpYXZpLmRydjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQVZJIE1DSSBkcml2ZXIgKDxmaWxlbmFtZT4uQVZJPC9maWxlbmFtZT4gdmlkZW8KKyAgICAgICAgICAgICAgICBwbGF5YmFjaykuIEJlc3QgdG8gdXNlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+bWNpYW5pbS5kcnY8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgorICAgICAgICAgICAgICAgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPm1zYWNtLmRydjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gU2V0IHRvIHNhbWUgYXMgbXNhY20zMi4KKyAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5taWRpbWFwLmRydjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CisgICAgICAgICAgICAgICAgTUlESSBNYXBwZXIuCisgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+d3Byb2NzPC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nCisgICAgICAgICAgICAgICAgcHVycG9zZXMuIEEgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgICAgICAgICBkb2Vzbid0IGV4aXN0LgorICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PiAgICAgICAgICAKKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0ia2V5Ym9hcmQiPgorICAgICAgPHRpdGxlPktleWJvYXJkPC90aXRsZT4KKworICAgICAgPHBhcmE+YnkgT3ZlIEthYXZlbiAmbHQ7b3Zla0BhcmN0aWNuZXQubm8+PC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2tleWJvYXJkPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaW5lIG5vdyBuZWVkcyB0byBrbm93IGFib3V0IHlvdXIga2V5Ym9hcmQgbGF5b3V0LiBUaGlzCisgICAgICAgIHJlcXVpcmVtZW50IGNvbWVzIGZyb20gYSBuZWVkIGZyb20gbWFueSBhcHBzIHRvIGhhdmUgdGhlCisgICAgICAgIGNvcnJlY3Qgc2NhbmNvZGVzIGF2YWlsYWJsZSwgc2luY2UgdGhleSByZWFkIHRoZXNlIGRpcmVjdGx5LAorICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdGFraW5nIHRoZSBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBYCisgICAgICAgIHNlcnZlci4gVGhpcyBtZWFucyB0aGF0IFdpbmUgbm93IG5lZWRzIHRvIGhhdmUgYSBtYXBwaW5nIGZyb20KKyAgICAgICAgWCBrZXlzIHRvIHRoZSBzY2FuY29kZXMgdGhlc2UgYXBwbGljYXRpb25zIGV4cGVjdC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPbiBzdGFydHVwLCBXaW5lIHdpbGwgdHJ5IHRvIHJlY29nbml6ZSB0aGUgYWN0aXZlIFggbGF5b3V0IGJ5CisgICAgICAgIHNlZWluZyBpZiBpdCBtYXRjaGVzIGFueSBvZiB0aGUgZGVmaW5lZCB0YWJsZXMuIElmIGl0IGRvZXMsCisgICAgICAgIGV2ZXJ5dGhpbmcgaXMgYWxyaWdodC4gSWYgbm90LCB5b3UgbmVlZCB0byBkZWZpbmUgaXQuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gZG8gdGhpcywgb3BlbiB0aGUgZmlsZQorICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzwvZmlsZW5hbWU+IGFuZCB0YWtlIGEgbG9vaworICAgICAgICBhdCB0aGUgZXhpc3RpbmcgdGFibGVzLiBNYWtlIGEgYmFja3VwIGNvcHkgb2YgaXQsIGVzcGVjaWFsbHkKKyAgICAgICAgaWYgeW91IGRvbid0IHVzZSBDVlMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hhdCB5b3UgcmVhbGx5IHdvdWxkIG5lZWQgdG8gZG8sIGlzIGZpbmQgb3V0IHdoaWNoIHNjYW5jb2RlCisgICAgICAgIGVhY2gga2V5IG5lZWRzIHRvIGdlbmVyYXRlLiAgRmluZCBpdCBpbiB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiB0YWJsZSwgd2hpY2ggbG9va3MgbGlrZQorICAgICAgICB0aGlzOgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGNvbnN0IGludCBtYWluX2tleV9zY2FuW01BSU5fTEVOXSA9Cit7CisvKiB0aGlzIGlzIG15ICgxMDIta2V5KSBrZXlib2FyZCBsYXlvdXQsIHNvcnJ5IGlmIGl0IGRvZXNuJ3QgcXVpdGUgbWF0Y2ggeW91cnMgKi8KKyAgIDB4MjksMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsCisgICAweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsMHgxOCwweDE5LDB4MUEsMHgxQiwKKyAgIDB4MUUsMHgxRiwweDIwLDB4MjEsMHgyMiwweDIzLDB4MjQsMHgyNSwweDI2LDB4MjcsMHgyOCwweDJCLAorICAgMHgyQywweDJELDB4MkUsMHgyRiwweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwKKyAgIDB4NTYgLyogdGhlIDEwMm5kIGtleSAoYWN0dWFsbHkgdG8gdGhlIHJpZ2h0IG9mIGwtc2hpZnQpICovCit9OworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBOZXh0LCBhc3NpZ24gZWFjaCBzY2FuY29kZSB0aGUgY2hhcmFjdGVycyBpbXByaW50ZWQgb24gdGhlCisgICAgICAgIGtleWNhcHMuIFRoaXMgd2FzIGRvbmUgKHNvcnQgb2YpIGZvciB0aGUgVVMgMTAxLWtleSBrZXlib2FyZCwKKyAgICAgICAgd2hpY2ggeW91IGNhbiBmaW5kIG5lYXIgdGhlIHRvcCBpbgorICAgICAgICA8ZmlsZW5hbWU+a2V5Ym9hcmQuYzwvZmlsZW5hbWU+LiBJdCBhbHNvIHNob3dzIHRoYXQgaWYgdGhlcmUKKyAgICAgICAgaXMgbm8gMTAybmQga2V5LCB5b3UgY2FuIHNraXAgdGhhdC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBIb3dldmVyLCBmb3IgbW9zdCBpbnRlcm5hdGlvbmFsIDEwMi1rZXkga2V5Ym9hcmRzLCB3ZSBoYXZlCisgICAgICAgIGRvbmUgaXQgZWFzeSBmb3IgeW91LiBUaGUgc2NhbmNvZGUgbGF5b3V0IGZvciB0aGVzZSBhbHJlYWR5CisgICAgICAgIHByZXR0eSBtdWNoIG1hdGNoZXMgdGhlIHBoeXNpY2FsIGxheW91dCBpbiB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiwgc28gYWxsIHlvdSBuZWVkIHRvIGRvIGlzCisgICAgICAgIHRvIGdvIHRocm91Z2ggYWxsIHRoZSBrZXlzIHRoYXQgZ2VuZXJhdGUgY2hhcmFjdGVycyBvbiB5b3VyCisgICAgICAgIG1haW4ga2V5Ym9hcmQgKGV4Y2VwdCBzcGFjZWJhciksIGFuZCBzdHVmZiB0aG9zZSBpbnRvIGFuCisgICAgICAgIGFwcHJvcHJpYXRlIHRhYmxlLiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aGUgMTAybmQga2V5LAorICAgICAgICB3aGljaCBpcyB1c3VhbGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBrZXkgb2YgdGhlIGxhc3QgbGluZQorICAgICAgICAodXN1YWxseSA8a2V5Y2FwPlo8L2tleWNhcD4pLCBtdXN0IGJlIHBsYWNlZCBvbiBhIHNlcGFyYXRlCisgICAgICAgIGxpbmUgYWZ0ZXIgdGhlIGxhc3QgbGluZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwgbXkgTm9yd2VnaWFuIGtleWJvYXJkIGxvb2tzIGxpa2UgdGhpcworICAgICAgPC9wYXJhPgorICAgICAgPHNjcmVlbj4KK6cgICEgICIgICMgIKQgICUgICYgIC8gICggICkgID0gID8gIGAgIEJhY2stCit8ICAxICAyQCAzoyA0JCA1ICA2ICA3eyA4WyA5XSAwfSArICBctCBzcGFjZQorCitUYWIgUSAgVyAgRSAgUiAgVCAgWSAgVSAgSSAgTyAgUCAgxSAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKh+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIKK0NhcHMgQSAgUyAgRCAgRiAgRyAgSCAgSiAgSyAgTCAg2CAgxiAgKgorTG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnCisKK1NoLSA+IFogIFggIEMgIFYgIEIgIE4gIE0gIDsgIDogIF8gIFNoaWZ0CitpZnQgJmx0OyAgICAgICAgICAgICAgICAgICAgICAsICAuICAtCisKK0N0cmwgIEFsdCAgICAgICBTcGFjZWJhciAgICAgICBBbHRHciAgQ3RybAorICAgICAgPC9zY3JlZW4+CisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGUgMTAybmQga2V5LCB3aGljaCBpcyB0aGUgPGtleWNhcD4mbHQ7Pjwva2V5Y2FwPiBrZXksIHRvCisgICAgICAgIHRoZSBsZWZ0IG9mIDxrZXljYXA+Wjwva2V5Y2FwPi4gVGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YKKyAgICAgICAgdGhlIG1haW4gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgZ2VuZXJhdGVkIGJ5CisgICAgICAgIDxrZXljYXA+QWx0R3I8L2tleWNhcD4uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBrZXlib2FyZCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgY29uc3QgY2hhciBtYWluX2tleV9OT1tNQUlOX0xFTl1bNF0gPQoreworICJ8pyIsIjEhIiwiMlwiQCIsIjMjoyIsIjSkJCIsIjUlIiwiNiYiLCI3L3siLCI4KFsiLCI5KV0iLCIwPX0iLCIrPyIsIlxctCIsCisgInFRIiwid1ciLCJlRSIsInJSIiwidFQiLCJ5WSIsInVVIiwiaUkiLCJvTyIsInBQIiwi5cUiLCKoXn4iLAorICJhQSIsInNTIiwiZEQiLCJmRiIsImdHIiwiaEgiLCJqSiIsImtLIiwibEwiLCL42CIsIubGIiwiJyoiLAorICJ6WiIsInhYIiwiY0MiLCJ2ViIsImJCIiwibk4iLCJtTSIsIiw7IiwiLjoiLCItXyIsCisgIiZsdDs+IgorfTsgICAKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgRXhjZXB0IHRoYXQgIiBhbmQgXCBuZWVkcyB0byBiZSBxdW90ZWQgd2l0aCBhIGJhY2tzbGFzaCwgYW5kCisgICAgICAgIHRoYXQgdGhlIDEwMm5kIGtleSBpcyBvbiBhIHNlcGFyYXRlIGxpbmUsIGl0J3MgcHJldHR5CisgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB5b3UgaGF2ZSB3cml0dGVuIHN1Y2ggYSB0YWJsZSwgeW91IG5lZWQgdG8gYWRkIGl0IHRvIHRoZQorICAgICAgICA8ZnVuY3Rpb24+bWFpbl9rZXlfdGFiW108L2Z1bmN0aW9uPiBsYXlvdXQgaW5kZXggdGFibGUuIFRoaXMKKyAgICAgICAgd2lsbCBsb29rIGxpa2UgdGhpczoKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBzdHJ1Y3QgeworIFdPUkQgbGFuZywgYW5zaV9jb2RlcGFnZSwgb2VtX2NvZGVwYWdlOworIGNvbnN0IGNoYXIgKCprZXkpW01BSU5fTEVOXVs0XTsKK30gbWFpbl9rZXlfdGFiW109eworLi4uCisuLi4KKyB7TUFLRUxBTkdJRChMQU5HX05PUldFR0lBTixTVUJMQU5HX0RFRkFVTFQpLCAgMTI1MiwgODY1LCAmYW1wO21haW5fa2V5X05PfSwgIAorLi4uCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIHlvdSBoYXZlIGFkZGVkIHlvdXIgdGFibGUsIHJlY29tcGlsZSBXaW5lIGFuZCB0ZXN0IHRoYXQKKyAgICAgICAgaXQgd29ya3MuIElmIGl0IGZhaWxzIHRvIGRldGVjdCB5b3VyIHRhYmxlLCB0cnkgcnVubmluZworICAgICAgPC9wYXJhPgorICAgICAgPHNjcmVlbj4KK3dpbmUgLS1kZWJ1Z21zZyAra2V5LCtrZXlib2FyZCA+JiBrZXkubG9nCisgICAgICA8L3NjcmVlbj4KKyAgICAgIDxwYXJhPgorICAgICAgICBhbmQgbG9vayBpbiB0aGUgcmVzdWx0aW5nIDxmaWxlbmFtZT5rZXkubG9nPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICBmaW5kIHRoZSBlcnJvciBtZXNzYWdlcyBpdCBnaXZlcyBmb3IgeW91ciBsYXlvdXQuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IHRoZSA8Y29uc3RhbnQ+TEFOR18qPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5TVUJMQU5HXyo8L2NvbnN0YW50PiBkZWZpbml0aW9ucyBhcmUgaW4KKyAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGUvd2lubmxzLmg8L2ZpbGVuYW1lPiwgd2hpY2ggeW91IG1pZ2h0IG5lZWQgdG8KKyAgICAgICAga25vdyB0byBmaW5kIG91dCB3aGljaCBudW1iZXJzIHlvdXIgbGFuZ3VhZ2UgaXMgYXNzaWduZWQsIGFuZAorICAgICAgICBmaW5kIGl0IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQuIFRoZSBudW1iZXJzIHdpbGwgYmUKKyAgICAgICAgPGxpdGVyYWw+KFNVQkxBTkcgKiAweDQwMCArIExBTkcpPC9saXRlcmFsPiwgc28sIGZvciBleGFtcGxlCisgICAgICAgIHRoZSBjb21iaW5hdGlvbiA8bGl0ZXJhbD5MQU5HX05PUldFR0lBTiAoMHgxNCk8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5TVUJMQU5HX0RFRkFVTFQgKDB4MSk8L2xpdGVyYWw+IHdpbGwgYmUgKGluIGhleCkKKyAgICAgICAgPGxpdGVyYWw+MTQgKyAxKjQwMCA9IDQxNDwvbGl0ZXJhbD4sIHNvIHNpbmNlIEknbSBOb3J3ZWdpYW4sIEkKKyAgICAgICAgY291bGQgbG9vayBmb3IgPGxpdGVyYWw+MDQxNDwvbGl0ZXJhbD4gaW4gdGhlIGRlYnVnbXNnIG91dHB1dAorICAgICAgICB0byBmaW5kIG91dCB3aHkgbXkga2V5Ym9hcmQgd29uJ3QgZGV0ZWN0LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIE9uY2UgaXQgd29ya3MsIHN1Ym1pdCBpdCB0byB0aGUgV2luZSBwcm9qZWN0LiBJZiB5b3UgdXNlIENWUywKKyAgICAgICAgeW91IHdpbGwganVzdCBoYXZlIHRvIGRvCisgICAgICA8L3BhcmE+CisgICAgICA8c2NyZWVuPgorY3ZzIC16MyBkaWZmIC11IHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMgPiBsYXlvdXQuZGlmZgorICAgICAgPC9zY3JlZW4+CisgICAgICA8cGFyYT4KKyAgICAgICAgZnJvbSB5b3VyIG1haW4gV2luZSBkaXJlY3RvcnksIHRoZW4gc3VibWl0CisgICAgICAgIDxmaWxlbmFtZT5sYXlvdXQuZGlmZjwvZmlsZW5hbWU+IHRvCisgICAgICAgIDxlbWFpbD53aW5lLXBhdGNoZXNAd2luZWhxLmNvbTwvZW1haWw+IGFsb25nIHdpdGggYSBicmllZiBub3RlCisgICAgICAgIG9mIHdoYXQgaXQgaXMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGRvbid0IHVzZSBDVlMsIHlvdSBuZWVkIHRvIGRvCisgICAgICA8L3BhcmE+CisgICAgICA8c2NyZWVuPgorZGlmZiAtdSB0aGVfYmFja3VwX2ZpbGVfeW91X21hZGUgd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYyA+IGxheW91dC5kaWZmCisgICAgICA8L3NjcmVlbj4KKyAgICAgIDxwYXJhPgorICAgICAgICBhbmQgc3VibWl0IGl0IGFzIGV4cGxhaW5lZCBhYm92ZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgZGlkIGl0IHJpZ2h0LCBpdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBuZXh0IFdpbmUKKyAgICAgICAgcmVsZWFzZSwgYW5kIGFsbCB0aGUgdHJvdWJsZXNvbWUgYXBwbGljYXRpb25zIChlc3BlY2lhbGx5CisgICAgICAgIHJlbW90ZS1jb250cm9sIGFwcGxpY2F0aW9ucykgYW5kIGdhbWVzIHRoYXQgdXNlIHNjYW5jb2RlcyB3aWxsCisgICAgICAgIGJlIGhhcHBpbHkgdXNpbmcgeW91ciBrZXlib2FyZCBsYXlvdXQsIGFuZCB5b3Ugd29uJ3QgZ2V0IHRob3NlCisgICAgICAgIGFubm95aW5nIGZpeG1lIG1lc3NhZ2VzIGVpdGhlci4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBHb29kIGx1Y2suCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9jb25zb2xlIGIvZG9jdW1lbnRhdGlvbi9jb25zb2xlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzY1YjU1Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vY29uc29sZQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0KLUNvbnNvbGUgLSBGaXJzdCBQYXNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db25zb2xlcyBhcmUganVzdCB4dGVybXMgY3JlYXRlZCB3aXRoIHRoZSAtU3h4biBzd2l0Y2guCi1BIHB0eSBpcyBvcGVuZWQgYW5kIHRoZSBtYXN0ZXIgZ29lcyB0byB0aGUgeHRlcm0gc2lkZQotYW5kIHRoZSBzbGF2ZSBpcyBoZWxkIGJ5IHRoZSB3aW5lIHNpZGUuICBUaGUgY29uc29sZQotaXRzZWxmIGl0IHR1cm5lZCBpbnRvIGEgZmV3IEhBTkRMRTMycyBhbmQgaXMgc2V0IAotdG8gdGhlIFNURF8qX0hBTkRMRVMuCi0KLUl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgV3JpdGVGaWxlIGFuZCBSZWFkRmlsZSBjb21tYW5kcwotdG8gd3JpdGUgdG8gYSB3aW4zMiBjb25zb2xlLiAgVG8gYWNjb21wbGlzaCB0aGlzLCBhbGwgSzMyT0JKcyAKLXRoYXQgc3VwcG9ydCBJL08gaGF2ZSBhIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHBvaW50ZXIuCi1TbywgV3JpdGVGaWxlIGNhbGxzIEszMk9CSl9Xcml0ZUZpbGUgd2hpY2ggY2FsbHMgdGhlIEszMk9CSidzCi13cml0ZSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCB0aGVuIGZpbmFsbHkgY2FsbHMgd3JpdGUuCi0KLVt0aGlzIHBhcmFncmFwaCBpcyBub3cgb3V0IG9mIGRhdGVdCi1JZiB0aGUgY29tbWFuZCBsaW5lIGNvbnNvbGUgaXMgdG8gYmUgaW5oZWlyaXRlZCBvcgotYSBwcm9jZXNzIGluaGVyaXRzIGl0cyBwYXJlbnQncyBjb25zb2xlICgtLSBjYW4gdGhhdCBoYXBwZW4/Pz8pLAotdGhlIGNvbnNvbGUgaXMgY3JlYXRlZCBhdCBwcm9jZXNzIGluaXQgdGltZSB2aWEgUFJPQ0VTU19Jbmhlcml0Q29uc29sZS4KLVRoZSAwLCAxLCBhbmQgMiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBkdXBlZCB0byBiZSB0aGUKLVNURF8qX0hBTkRMRVMgaW4gdGhpcyBjYXNlLiAgQWxzbyBpbiB0aGlzIGNhc2UgYSBmbGFnIGlzIHNldAotdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29uc29sZSBjb21lcyBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcyBvcgotY29tbWFuZCBsaW5lLgotCi1JZiBhIHByb2Nlc3MgZG9lc24ndCBoYXZlIGEgY29uc29sZSBhdCBhbGwsIGl0cyAKLXBkYi0+Y29uc29sZSBpcyBzZXQgdG8gTlVMTC4gIFRoaXMgaGVscHMgaW5kaWNhdGUgd2hlbgotaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgbmV3IGNvbnNvbGUgKHZpYSBBbGxvY0NvbnNvbGUpLgotCi0KLVdoZW4gRnJlZUNvbnNvbGUgaXMgY2FsbGVkLCBhbGwgaGFuZGxlcyB0aGF0IHRoZSBwcm9jZXNzIGhhcwotb3BlbiB0byB0aGUgY29uc29sZSBhcmUgY2xvc2VkLiAgTGlrZSBtb3N0IGszMm9ianMsIGlmIHRoZSAKLWNvbnNvbGUncyByZWZjb3VudCByZWFjaGVzIHplcm8sIGl0cyBrMzJvYmogZGVzdHJveSBmdW5jdGlvbgotaXMgY2FsbGVkLiAgVGhlIGRlc3Ryb3kga2lsbHMgdGhlIHh0ZXJtIGlmIG9uZSB3YXMgb3Blbi4KLQotQWxzbyBsaWtlIG1vc3QgazMyIG9iamVjdHMsIHdlIGFzc3VtZSB0aGF0IChLMzJPQkopIGhlYWRlciBpcyB0aGUKLWZpcnN0IGZpZWxkIHNvIHRoZSBjYXN0aW5nIChmcm9tIEszMk9CSiAqdG8gQ09OU09MRSAqKQotd29ya3MgY29ycmVjdGx5LgotCi1GcmVlQ29uc29sZSBpcyBjYWxsZWQgb24gcHJvY2VzcyBleGl0IChpbiBFeGl0UHJvY2VzcykgaWYgCi1wZGItPmNvbnNvbGUgaXMgbm90IE5VTEwuCi0KLQotQlVHUwotLS0tLQotQ29uc29sZSBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgaGFuZGxlcy4gIEkgdGhpbmsKLXRoZXJlIG5lZWRzIHRvIGJlIHR3byBjYXNlcywgb25lIHdoZXJlIHRoZXkgaGF2ZSB0byBpbmhlcml0Ci10aGUgc3RkaW4vc3Rkb3V0L3N0ZGVyciBmcm9tIHVuaXgsIGFuZCBvbmUgd2hlcmUgdGhleSBoYXZlIHRvCi1pbmhlcml0IGZyb20gYW5vdGhlciB3aW5kb3dzIGFwcC4KLQotU2V0Q29uc29sZU1vZGUgLS0gVU5JWCBvbmx5IGhhcyBJQ0FOT04gYW5kIHZhcmlvdXMgRUNIT3MKLXRvIHBsYXkgYXJvdW5kIHdpdGggZm9yIHByb2Nlc3NpbmcgaW5wdXQuICBXaW4zMiBoYXMKLWxpbmUtYXQtYS10aW1lIHByb2Nlc3NpbmcsIGNoYXJhY3RlciBwcm9jZXNzaW5nLCBhbmQKLWVjaG8uICBJJ20gcHV0dGluZyB0b2dldGhlciBhbiBpbnRlcm1lZGlhdGUgZHJpdmVyCi10aGF0IHdpbGwgaGFuZGxlIHRoaXMgKGFuZCBob3BlZnVsbHkgd29uJ3QgYmUgYW55IG1vcmUKLWJ1Z2d5IHRoZW4gdGhlIE5UNCBjb25zb2xlIGltcGxlbWVudGF0aW9uKS4KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWV4cGVyaW1lbnRhdGlvbiB3aXRoIE5UNCB5aWVsZHMgdGhhdDoKLQotV3JpdGVGaWxlCi0tLS0tLS0tLS0KLQlvIGRvZXMgbm90IHRydW5jYXRlIGZpbGUgb24gMCBsZW5ndGggd3JpdGUKLQlvIDAgbGVuZ3RoIHdyaXRlIG9yIGVycm9yIG9uIHdyaXRlIGNoYW5nZXMgbnVtY2hhcnN3cml0dGVuIHRvIDAKLQlvIDAgbGVuZ3RoIHdyaXRlIHJldHVybnMgVFJVRQotCW8gd29ya3Mgd2l0aCBjb25zb2xlIGhhbmRsZXMKLQotX2x3cml0ZQotLS0tLS0tLQotCW8gZG9lcyB0cnVuY2F0ZS9leHBhbmQgZmlsZSBhdCBjdXJyZW50IHBvc2l0aW9uIG9uIDAgbGVuZ3RoIHdyaXRlCi0JbyByZXR1cm5zIDAgb24gYSB6ZXJvIGxlbmd0aCB3cml0ZQotCW8gd29ya3Mgd2l0aCBjb25zb2xlIGhhbmRsZXMgKHR5cGVjYXN0ZWQpCi0KLVdyaXRlQ29uc29sZQotLS0tLS0tLS0tLS0tCi0JbyBleHBlY3RzIG9ubHkgY29uc29sZSBoYW5kbGVzCi0KLQotU2V0RmlsZVBvaW50ZXIKLS0tLS0tLS0tLS0tLS0tCi0JbyByZXR1cm5zIC0xIChlcnIgNikgd2hlbiB1c2VkIHdpdGggYSBjb25zb2xlIGhhbmRsZQotCi0KLUZyZWVDb25zb2xlCi0tLS0tLS0tLS0tLQotCW8gZXZlbiB3aGVuIGFsbCB0aGUgaGFuZGxlcyB0byBpdCBhcmUgZnJlZWQsIHRoZSB3aW4zMiBjb25zb2xlCi0JICBzdGF5cyB2aXNpYmxlLCB0aGUgb25seSB3YXkgSSBjb3VsZCBmaW5kIHRvIGZyZWUgaXQKLQkgIHdhcyB2aWEgdGhlIEZyZWVDb25zb2xlCi0KLQotSXMgaXQgcG9zc2libGUgdG8gaW50ZXJydXB0IHdpbjMyJ3MgRmlsZVdyaXRlPyAgSSdtIG5vdCBzdXJlLgotSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBpbnRlcnJ1cHQgYW55IHN5c3RlbSBjYWxscy4KLQotCi1ET1MgKEdlbmVyaWMpIENvbnNvbGUgU3VwcG9ydAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSS4gQ29tbWFuZCBMaW5lIENvbmZpZ3VyYXRpb24KLQotICAgRE9TIGNvbnNvbGVzIG11c3QgYmUgY29uZmlndXJlZCBlaXRoZXIgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIGRvdAotICAgcmVzb3VyY2UgZmlsZSAoLmNvbnNvbGUpLiBBIHR5cGljYWwgY29uZmlndXJhdGlvbiBjb25zaXN0cyBvZiBhIHN0cmluZwotICAgb2YgZHJpdmVyIGtleXdvcmRzIHNlcGFyYXRlZCBieSBwbHVzICgnKycpIHNpZ25zLiBUbyBjaGFuZ2UgdGhlIAotICAgY29uZmlndXJhdGlvbiBvbiB0aGUgY29tbWFuZC1saW5lLCB1c2UgdGhlIC1jb25zb2xlIHN3aXRjaC4KLQotICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgIHdpbmUgLWNvbnNvbGUgbmN1cnNlcyt4dGVybSA8YXBsbGljYXRpb24+Ci0gICAKLSAgIFBvc3NpYmxlIGRyaXZlcnM6Ci0KLSAgICAgIHR0eQktIEdlbmVyaWMgdGV4dC1vbmx5IHN1cHBvcnQuIFN1cHBvcnRzIHJlZGlyZWN0aW9uLgotICAgICAgbmN1cnNlcwktIEZ1bGwtc2NyZWVuIGdyYXBoaWNhbCBzdXBwb3J0IHdpdGggY29sb3IuCi0gICAgICB4dGVybQktIExvYWQgYSBuZXcgd2luZG93IHRvIGRpc3BsYXkgdGhlIGNvbnNvbGUgaW4uIEFsc28KLSAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHJlc2l6aW5nIHdpbmRvd3MuCi0KLQotSUkuIFdpbmUuY29uZiBDb25maWd1cmF0aW9uCi0KLSAgIEluIHRoZSB3aW5lLmNvbmYgZmlsZSwgeW91IGNhbiBjcmVhdGUgYSBzZWN0aW9uIGNhbGxlZCBbY29uc29sZV0gdGhhdAotICAgY29udGFpbnMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlc3BlY3RlZCBieSB0aGUgYXNzb3J0ZWQKLSAgIGNvbnNvbGUgZHJpdmVycy4KLQotICAgQ3VycmVudCBPcHRpb25zOgotCi0gICAgICBYdGVybVByb2c9PHByb2dyYW0+Ci0KLSAgICAgICAgIFVzZSB0aGlzIHByb2dyYW0gaW5zdGVhZCBvZiB4dGVybS4gVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBhCi0gICAgICAgICByZWNvbXBpbGUuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIGEgY29tcGFyaXNvbiBvZiB2YXJpb3VzCi0gICAgICAgICB0ZXJtaW5hbHMuCi0KLSAgICAgIEluaXRpYWxSb3dzPTxudW1iZXI+Ci0KLSAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYWxsIGRyaXZlcnMgd2l0aCB0aGlzIG51bWJlciBvZiByb3dzLiBUaGlzCi0gICAgICAgICBjYXVzZXMgeHRlcm1zIHRvIGJlIHJlc2l6ZWQsIGZvciBpbnN0YW5jZS4KLQotICAgICAgICAgTm90ZTogVGhpcyBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZSB3aXRoIHRoZQotICAgICAgICAgLWcgc3dpdGNoLgotCi0gICAgICBJbml0aWFsQ29sdW1ucz08bnVtYmVyPgotCi0gICAgICAgICBBdHRlbXB0IHRvIHN0YXJ0IGFsbCBkcml2ZXJzIHdpdGggdGhpcyBudW1iZXIgb2YgY29sdW1ucy4gVGhpcwotICAgICAgICAgY2F1c2VzIHh0ZXJtcyB0byBiZSByZXNpemVkLCBmb3IgaW5zdGFuY2UuCi0KLSAgICAgICAgIE5vdGU6IFRoaXMgaW5mb3JtYXRpb24gaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kLWxpbmUgd2l0aCB0aGUKLSAgICAgICAgIC1nIHN3aXRjaC4KLQotICAgICAgVGVybWluYWxUeXBlPTxuYW1lPgotCi0gICAgICAgICBUZWxsIGFueSBkcml2ZXIgdGhhdCBpcyBpbnRlcmVzdGVkIChuY3Vyc2VzKSB3aGljaCB0ZXJtY2FwCi0gICAgICAgICBhbmQvb3IgdGVybWluZm8gdHlwZSB0byB1c2UuIFRoZSBkZWZhdWx0IGlzIHh0ZXJtIHdoaWNoIGlzCi0gICAgICAgICBhcHByb3BpYXRlIGZvciBtb3N0IHVzZXMuICJueHRlcm0iIG1heSBnaXZlIHlvdSBiZXR0ZXIgc3VwcG9ydAotICAgICAgICAgaWYgeW91IHVzZSB0aGF0IHRlcm1pbmFsLiBUaGlzIGNhbiBhbHNvIGJlIGNoYW5nZWQgdG8KLSAgICAgICAgICJsaW51eCIgKG9yICJjb25zb2xlIiBvbiBvbGRlciBzeXN0ZW1zKSBpZiB5b3UgbWFuYWdlIHRvIGhhY2sKLSAgICAgICAgIHRoZSBhYmlsaXR5IHRvIHdyaXRlIHRvIHRoZSBjb25zb2xlIGludG8gdGhpcyBkcml2ZXIuCi0KLUlJSS4gVGVybWluYWwgVHlwZXMKLQotICAgVGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIHBvdGVudGlhbCB0ZXJtaW5hbHMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoCi0gICBXaW5lLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgYXJlIHRyeWluZyB0byBkby4gVW5mb3J0dW5hdGVseSwgSSBhbSBzdGlsbAotICAgbG9va2luZyBmb3IgdGhlICJiZXN0IiBkcml2ZXIgY29tYmluYXRpb24uCi0KLSAgIE5vdGUgdGhhdCAnc2xhdmUnIGlzIHJlcXVpcmVkIGZvciB1c2UgaW4gV2luZSwgY3VycmVudGx5LgotCi0gICBQcm9ncmFtICAgICB8IENvbG9yPyB8IFJlc2l6aW5nPyB8IFNsYXZlPwotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHh0ZXJtCSAgIE4gICAgICAgICAgWSAgICAgICAgIFkKLSAgIG54dGVybSAgICAgICAgICBZICAgICAgICAgIE4gICAgICAgICBZCi0gICByeHZ0ICAgICAgICAgICAgWSAgICAgICAgICA/ICAgICAgICAgTgotICAgCi0gICAobGludXggY29uc29sZSkgWSAgICAgICAgICBOICAgICAgICAgPwotCi0gICBBcyBYIHRlcm1pbmFscyB0eXBpY2FsbHkgdXNlIGEgMjR4ODAgc2NyZWVuIHJlc29sdXRpb24gcmF0aGVyIHRoYW4gdGhlCi0gICB0eXBpY2FsIDI1eDgwIG9uZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlc2l6ZSB0aGUgc2NyZWVuIHRvIGFsbG93IGEgRE9TCi0gICBwcm9ncmFtIHRvIHdvcmsgZnVsbC1zY3JlZW4uIFRoZXJlIGlzIGEgd2luZS5jb25mIG9wdGlvbiB0byB3b3JrCi0gICBhcm91bmQgdGhpcyBpbiBzb21lIGNhc2VzIGJ1dCBydW4tdGltZSByZXNpemluZyB3aWxsIGJlIGRpc2FibGVkLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9jb25zb2xlcy5zZ21sIGIvZG9jdW1lbnRhdGlvbi9jb25zb2xlcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YjExNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2NvbnNvbGVzLnNnbWwKQEAgLTAsMCArMSwzODYgQEAKKyAgPGNoYXB0ZXIgaWQ9ImNvbnNvbGVzIj4KKyAgICA8dGl0bGU+Q29uc29sZXMgaW4gV2luZTwvdGl0bGU+CisKKyAgICA8c2VjdDEgaWQ9IndpbmUtY29uc29sZXMiPgorICAgICAgPHRpdGxlPkNvbnNvbGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgKD8/PykKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9jb25zb2xlPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkNvbnNvbGUgLSBGaXJzdCBQYXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBDb25zb2xlcyBhcmUganVzdCB4dGVybXMgY3JlYXRlZCB3aXRoIHRoZQorICAgICAgICAgIDxwYXJhbWV0ZXI+LVN4eG48L3BhcmFtZXRlcj4gc3dpdGNoLiBBCisgICAgICAgICAgPHN5c3RlbWl0ZW0+cHR5PC9zeXN0ZW1pdGVtPiBpcyBvcGVuZWQgYW5kIHRoZSBtYXN0ZXIgZ29lcworICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+eHRlcm08L2ZpbGVuYW1lPiBzaWRlIGFuZCB0aGUgc2xhdmUgaXMgaGVsZAorICAgICAgICAgIGJ5IHRoZSB3aW5lIHNpZGUuICBUaGUgY29uc29sZSBpdHNlbGYgaXQgdHVybmVkIGludG8gYSBmZXcKKyAgICAgICAgICA8dHlwZT5IQU5ETEUzMjwvdHlwZT5zIGFuZCBpcyBzZXQgdG8gdGhlCisgICAgICAgICAgPHZhcm5hbWU+U1REXypfSEFORExFUzwvdmFybmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSA8ZnVuY3Rpb24+V3JpdGVGaWxlPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgPGZ1bmN0aW9uPlJlYWRGaWxlPC9mdW5jdGlvbj4gY29tbWFuZHMgdG8gd3JpdGUgdG8gYSB3aW4zMgorICAgICAgICAgIGNvbnNvbGUuICBUbyBhY2NvbXBsaXNoIHRoaXMsIGFsbCA8dHlwZT5LMzJPQko8L3R5cGU+cyB0aGF0CisgICAgICAgICAgc3VwcG9ydCBJL08gaGF2ZSBhIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHBvaW50ZXIuIFNvLAorICAgICAgICAgIDxmdW5jdGlvbj5Xcml0ZUZpbGU8L2Z1bmN0aW9uPiBjYWxscworICAgICAgICAgIDxmdW5jdGlvbj5LMzJPQkpfV3JpdGVGaWxlPC9mdW5jdGlvbj4gd2hpY2ggY2FsbHMgdGhlCisgICAgICAgICAgPHR5cGU+SzMyT0JKPC90eXBlPidzIHdyaXRlIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIHRoZW4KKyAgICAgICAgICBmaW5hbGx5IGNhbGxzIDxmdW5jdGlvbj53cml0ZTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxlbXBoYXNpcz5bdGhpcyBwYXJhZ3JhcGggaXMgbm93IG91dCBvZiBkYXRlXTwvZW1waGFzaXM+IElmCisgICAgICAgICAgdGhlIGNvbW1hbmQgbGluZSBjb25zb2xlIGlzIHRvIGJlIGluaGVpcml0ZWQgb3IgYSBwcm9jZXNzCisgICAgICAgICAgaW5oZXJpdHMgaXRzIHBhcmVudCdzIGNvbnNvbGUgKC0tIGNhbiB0aGF0IGhhcHBlbj8/PyksIHRoZQorICAgICAgICAgIGNvbnNvbGUgaXMgY3JlYXRlZCBhdCBwcm9jZXNzIGluaXQgdGltZSB2aWEKKyAgICAgICAgICA8ZnVuY3Rpb24+UFJPQ0VTU19Jbmhlcml0Q29uc29sZTwvZnVuY3Rpb24+LiBUaGUKKyAgICAgICAgICA8bGl0ZXJhbD4wPC9saXRlcmFsPiwgPGxpdGVyYWw+MTwvbGl0ZXJhbD4sIGFuZAorICAgICAgICAgIDxsaXRlcmFsPjI8L2xpdGVyYWw+IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGR1cGVkIHRvIGJlIHRoZQorICAgICAgICAgIDx2YXJuYW1lPlNURF8qX0hBTkRMRVM8L3Zhcm5hbWU+IGluIHRoaXMgY2FzZS4gIEFsc28gaW4gdGhpcworICAgICAgICAgIGNhc2UgYSBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb25zb2xlIGNvbWVzIGZyb20KKyAgICAgICAgICB0aGUgcGFyZW50IHByb2Nlc3Mgb3IgY29tbWFuZCBsaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIGEgcHJvY2VzcyBkb2Vzbid0IGhhdmUgYSBjb25zb2xlIGF0IGFsbCwgaXRzCisgICAgICAgICAgPHZhcm5hbWU+cGRiLSZndDtjb25zb2xlPC92YXJuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+LiAgVGhpcyBoZWxwcyBpbmRpY2F0ZSB3aGVuIGl0IGlzCisgICAgICAgICAgcG9zc2libGUgdG8gY3JlYXRlIGEgbmV3IGNvbnNvbGUgKHZpYQorICAgICAgICAgIDxmdW5jdGlvbj5BbGxvY0NvbnNvbGU8L2Z1bmN0aW9uPikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hlbiA8ZnVuY3Rpb24+RnJlZUNvbnNvbGU8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIGFsbCBoYW5kbGVzIHRoYXQgdGhlIHByb2Nlc3MgaGFzCisgICAgICAgICAgb3BlbiB0byB0aGUgY29uc29sZSBhcmUgY2xvc2VkLiAgTGlrZSBtb3N0IDx0eXBlPkszMk9CSjwvdHlwZT5zLCBpZiB0aGUKKyAgICAgICAgICBjb25zb2xlJ3MgcmVmY291bnQgcmVhY2hlcyB6ZXJvLCBpdHMgPHR5cGU+SzMyT0JKPC90eXBlPiBkZXN0cm95IGZ1bmN0aW9uCisgICAgICAgICAgaXMgY2FsbGVkLiAgVGhlIGRlc3Ryb3kga2lsbHMgdGhlIHh0ZXJtIGlmIG9uZSB3YXMgb3Blbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbHNvIGxpa2UgbW9zdCBrMzIgb2JqZWN0cywgd2UgYXNzdW1lIHRoYXQKKyAgICAgICAgICAoPHR5cGU+SzMyT0JKPC90eXBlPikgaGVhZGVyIGlzIHRoZSBmaXJzdCBmaWVsZCBzbyB0aGUKKyAgICAgICAgICBjYXN0aW5nIChmcm9tIDx0eXBlPkszMk9CSio8L3R5cGU+dG8gPHR5cGU+Q09OU09MRSo8L3R5cGU+KQorICAgICAgICAgIHdvcmtzIGNvcnJlY3RseS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+RnJlZUNvbnNvbGU8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgb24gcHJvY2VzcyBleGl0CisgICAgICAgICAgKGluIDxmdW5jdGlvbj5FeGl0UHJvY2VzczwvZnVuY3Rpb24+KSBpZgorICAgICAgICAgIDx2YXJuYW1lPnBkYi0mZ3Q7Y29uc29sZTwvdmFybmFtZT4gaXMgbm90CisgICAgICAgICAgPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+QlVHUzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQ29uc29sZSBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgaGFuZGxlcy4gIEkKKyAgICAgICAgICB0aGluayB0aGVyZSBuZWVkcyB0byBiZSB0d28gY2FzZXMsIG9uZSB3aGVyZSB0aGV5IGhhdmUgdG8KKyAgICAgICAgICBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+c3RkaW48L2ZpbGVuYW1lPiAvCisgICAgICAgICAgPGZpbGVuYW1lPnN0ZG91dDwvZmlsZW5hbWU+IC8gPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+CisgICAgICAgICAgZnJvbSB1bml4LCBhbmQgb25lIHdoZXJlIHRoZXkgaGF2ZSB0byBpbmhlcml0IGZyb20gYW5vdGhlcgorICAgICAgICAgIHdpbmRvd3MgYXBwLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5TZXRDb25zb2xlTW9kZTwvZnVuY3Rpb24+IC0tIFVOSVggb25seSBoYXMKKyAgICAgICAgICA8Y29uc3RhbnQ+SUNBTk9OPC9jb25zdGFudD4gYW5kIHZhcmlvdXMKKyAgICAgICAgICA8Y29uc3RhbnQ+RUNITzwvY29uc3RhbnQ+cyB0byBwbGF5IGFyb3VuZCB3aXRoIGZvcgorICAgICAgICAgIHByb2Nlc3NpbmcgaW5wdXQuICBXaW4zMiBoYXMgbGluZS1hdC1hLXRpbWUgcHJvY2Vzc2luZywKKyAgICAgICAgICBjaGFyYWN0ZXIgcHJvY2Vzc2luZywgYW5kIGVjaG8uIEknbSBwdXR0aW5nIHRvZ2V0aGVyIGFuCisgICAgICAgICAgaW50ZXJtZWRpYXRlIGRyaXZlciB0aGF0IHdpbGwgaGFuZGxlIHRoaXMgKGFuZCBob3BlZnVsbHkKKyAgICAgICAgICB3b24ndCBiZSBhbnkgbW9yZSBidWdneSB0aGVuIHRoZSBOVDQgY29uc29sZQorICAgICAgICAgIGltcGxlbWVudGF0aW9uKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+RXhwZXJpbWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBleHBlcmltZW50YXRpb24gd2l0aCBOVDQgeWllbGRzIHRoYXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZnVuY3Rpb24+V3JpdGVGaWxlPC9mdW5jdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+ZG9lcyBub3QgdHJ1bmNhdGUgZmlsZSBvbiAwIGxlbmd0aCB3cml0ZTwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAwIGxlbmd0aCB3cml0ZSBvciBlcnJvciBvbiB3cml0ZSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgIDx2YXJuYW1lPm51bWNoYXJzd3JpdHRlbjwvdmFybmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+MDwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPjAgbGVuZ3RoIHdyaXRlIHJldHVybnMgPGNvbnN0YW50PlRSVUU8L2NvbnN0YW50PjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPndvcmtzIHdpdGggY29uc29sZSBoYW5kbGVzPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PiAgICAgICAgICAgIAorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGZ1bmN0aW9uPl9sd3JpdGU8L2Z1bmN0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT5kb2VzIHRydW5jYXRlL2V4cGFuZCBmaWxlIGF0IGN1cnJlbnQgcG9zaXRpb24gb24gMCBsZW5ndGggd3JpdGU8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT5yZXR1cm5zIDAgb24gYSB6ZXJvIGxlbmd0aCB3cml0ZTwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPndvcmtzIHdpdGggY29uc29sZSBoYW5kbGVzICh0eXBlY2FzdGVkKTwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxmdW5jdGlvbj5Xcml0ZUNvbnNvbGU8L2Z1bmN0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT5leHBlY3RzIG9ubHkgY29uc29sZSBoYW5kbGVzPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGZ1bmN0aW9uPlNldEZpbGVQb2ludGVyPC9mdW5jdGlvbj48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+cmV0dXJucyAtMSAoZXJyIDYpIHdoZW4gdXNlZCB3aXRoIGEgY29uc29sZSBoYW5kbGU8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48ZnVuY3Rpb24+RnJlZUNvbnNvbGU8L2Z1bmN0aW9uPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgZXZlbiB3aGVuIGFsbCB0aGUgaGFuZGxlcyB0byBpdCBhcmUgZnJlZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICB3aW4zMiBjb25zb2xlIHN0YXlzIHZpc2libGUsIHRoZSBvbmx5IHdheSBJIGNvdWxkCisgICAgICAgICAgICAgICAgICAgIGZpbmQgdG8gZnJlZSBpdCB3YXMgdmlhIHRoZSA8ZnVuY3Rpb24+RnJlZUNvbnNvbGU8L2Z1bmN0aW9uPgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSXMgaXQgcG9zc2libGUgdG8gaW50ZXJydXB0IHdpbjMyJ3MKKyAgICAgICAgICA8ZnVuY3Rpb24+RmlsZVdyaXRlPC9mdW5jdGlvbj4/ICBJJ20gbm90IHN1cmUuIEl0IG1heSBub3QgYmUKKyAgICAgICAgICBwb3NzaWJsZSB0byBpbnRlcnJ1cHQgYW55IHN5c3RlbSBjYWxscy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+RE9TIChHZW5lcmljKSBDb25zb2xlIFN1cHBvcnQ8L3RpdGxlPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+SS4gQ29tbWFuZCBMaW5lIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBET1MgY29uc29sZXMgbXVzdCBiZSBjb25maWd1cmVkIGVpdGhlciBvbiB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgICAgICBvciBpbiBhIGRvdCByZXNvdXJjZSBmaWxlICg8ZmlsZW5hbWU+LmNvbnNvbGU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBBIHR5cGljYWwgY29uZmlndXJhdGlvbiBjb25zaXN0cyBvZiBhIHN0cmluZyBvZiBkcml2ZXIKKyAgICAgICAgICAgIGtleXdvcmRzIHNlcGFyYXRlZCBieSBwbHVzICgnKycpIHNpZ25zLiBUbyBjaGFuZ2UgdGhlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9uIHRoZSBjb21tYW5kLWxpbmUsIHVzZSB0aGUKKyAgICAgICAgICAgIDxwYXJhbWV0ZXI+LWNvbnNvbGU8L3BhcmFtZXRlcj4gc3dpdGNoLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8c2NyZWVuPgord2luZSAtY29uc29sZSBuY3Vyc2VzK3h0ZXJtICZsdDthcHBsaWNhdGlvbiZndDsKKyAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFBvc3NpYmxlIGRyaXZlcnM6CisgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPnR0eTo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5HZW5lcmljIHRleHQtb25seSBzdXBwb3J0LiBTdXBwb3J0cyByZWRpcmVjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPm5jdXJzZXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RnVsbC1zY3JlZW4gZ3JhcGhpY2FsIHN1cHBvcnQgd2l0aCBjb2xvci48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPnh0ZXJtOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgTG9hZCBhIG5ldyB3aW5kb3cgdG8gZGlzcGxheSB0aGUgY29uc29sZSBpbi4gQWxzbworICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgcmVzaXppbmcgd2luZG93cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPklJLiA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHRoZSA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gZmlsZSwgeW91IGNhbiBjcmVhdGUKKyAgICAgICAgICAgIGEgc2VjdGlvbiBjYWxsZWQgW2NvbnNvbGVdIHRoYXQgY29udGFpbnMgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgb3B0aW9ucyB0aGF0IGFyZSByZXNwZWN0ZWQgYnkgdGhlIGFzc29ydGVkIGNvbnNvbGUKKyAgICAgICAgICAgIGRyaXZlcnMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3VycmVudCBPcHRpb25zOgorICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5YdGVybVByb2c9Jmx0O3Byb2dyYW0mZ3Q7PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBwcm9ncmFtIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgIDxjb21tYW5kPnh0ZXJtPC9jb21tYW5kPi4gVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkCisgICAgICAgICAgICAgICAgICBmb3IgYSByZWNvbXBpbGUuIFNlZSB0aGUgdGFibGUgYmVsb3cgZm9yIGEKKyAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb24gb2YgdmFyaW91cyB0ZXJtaW5hbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5Jbml0aWFsUm93cz0mbHQ7bnVtYmVyJmd0OzwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgQXR0ZW1wdCB0byBzdGFydCBhbGwgZHJpdmVycyB3aXRoIHRoaXMgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICByb3dzLiBUaGlzIGNhdXNlcyB4dGVybXMgdG8gYmUgcmVzaXplZCwgZm9yCisgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8cGFyYW1ldGVyPi1nPC9wYXJhbWV0ZXI+IHN3aXRjaC4KKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkluaXRpYWxDb2x1bW5zPSZsdDtudW1iZXImZ3Q7PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBBdHRlbXB0IHRvIHN0YXJ0IGFsbCBkcml2ZXJzIHdpdGggdGhpcyBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgIGNvbHVtbnMuIFRoaXMgY2F1c2VzIHh0ZXJtcyB0byBiZSByZXNpemVkLCBmb3IKKyAgICAgICAgICAgICAgICAgIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZC1saW5lCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxwYXJhbWV0ZXI+LWc8L3BhcmFtZXRlcj4gc3dpdGNoLgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+VGVybWluYWxUeXBlPSZsdDtuYW1lJmd0OzwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgVGVsbCBhbnkgZHJpdmVyIHRoYXQgaXMgaW50ZXJlc3RlZCAobmN1cnNlcykgd2hpY2gKKyAgICAgICAgICAgICAgICAgIHRlcm1jYXAgYW5kL29yIHRlcm1pbmZvIHR5cGUgdG8gdXNlLiBUaGUgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgeHRlcm0gd2hpY2ggaXMgYXBwcm9waWF0ZSBmb3IgbW9zdCB1c2VzLgorICAgICAgICAgICAgICAgICAgPGNvbW1hbmQ+bnh0ZXJtPC9jb21tYW5kPiBtYXkgZ2l2ZSB5b3UgYmV0dGVyCisgICAgICAgICAgICAgICAgICBzdXBwb3J0IGlmIHlvdSB1c2UgdGhhdCB0ZXJtaW5hbC4gVGhpcyBjYW4gYWxzbyBiZQorICAgICAgICAgICAgICAgICAgY2hhbmdlZCB0byAibGludXgiIChvciAiY29uc29sZSIgb24gb2xkZXIgc3lzdGVtcykKKyAgICAgICAgICAgICAgICAgIGlmIHlvdSBtYW5hZ2UgdG8gaGFjayB0aGUgYWJpbGl0eSB0byB3cml0ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgIGNvbnNvbGUgaW50byB0aGlzIGRyaXZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPklJSS4gVGVybWluYWwgVHlwZXM8L3RpdGxlPgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSBhcmUgYSBsYXJnZSBudW1iZXIgb2YgcG90ZW50aWFsIHRlcm1pbmFscyB0aGF0IGNhbgorICAgICAgICAgICAgYmUgdXNlZCB3aXRoIFdpbmUsIGRlcGVuZGluZyBvbiB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvLgorICAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgSSBhbSBzdGlsbCBsb29raW5nIGZvciB0aGUgImJlc3QiIGRyaXZlcgorICAgICAgICAgICAgY29tYmluYXRpb24uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICdzbGF2ZScgaXMgcmVxdWlyZWQgZm9yIHVzZSBpbiBXaW5lLCBjdXJyZW50bHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgPGluZm9ybWFsdGFibGU+CisgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjQiPgorICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5Qcm9ncmFtPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5Db2xvcj88L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlJlc2l6aW5nPzwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+U2xhdmU/PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRmb290PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+KGxpbnV4IGNvbnNvbGUpPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5OPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4/PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90Zm9vdD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+eHRlcm08L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pk48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Plk8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Plk8L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+bnh0ZXJtPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5OPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PnJ4dnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Plk8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pj88L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pk48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBYIHRlcm1pbmFscyB0eXBpY2FsbHkgdXNlIGEgMjR4ODAgc2NyZWVuIHJlc29sdXRpb24KKyAgICAgICAgICAgIHJhdGhlciB0aGFuIHRoZSB0eXBpY2FsIDI1eDgwIG9uZSwgaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAgICAgICByZXNpemUgdGhlIHNjcmVlbiB0byBhbGxvdyBhIERPUyBwcm9ncmFtIHRvIHdvcmsKKyAgICAgICAgICAgIGZ1bGwtc2NyZWVuLiBUaGVyZSBpcyBhIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9uIHRvIHdvcmsgYXJvdW5kIHRoaXMgaW4gc29tZSBjYXNlcyBidXQgcnVuLXRpbWUKKyAgICAgICAgICAgIHJlc2l6aW5nIHdpbGwgYmUgZGlzYWJsZWQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJ3aW5lLWRvYy5zZ21sIiAiYm9vayIgInBhcnQiICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzIGIvZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTY1MGQ2Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vZGVidWctbXNncworKysgL2Rldi9udWxsCkBAIC0xLDQ3MCArMCwwIEBACi1Ob3RlOiBUaGUgbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgc3RhYmxlLAotICAgICAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBpbi1tZW1vcnkgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gZnVuY3Rpb25zLgotICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgYSBsb3Qgb2Ygd29yayB0byBiZSBkb25lIHRvIHBvbGlzaAotICAgICAgdGhpbmdzIHVwLiBUbyBtYWtlIG15IGxpZmUgZWFzaWVyLCBwbGVhc2UgZm9sbG93IHRoZSBndWlkZWxpbmVzCi0gICAgICBkZXNjcmliZWQgaW4gdGhpcyBkb2N1bWVudC4gCi0KLSAgICAgIFJlYWQgdGhpcyBkb2N1bWVudCBiZWZvcmUgd3JpdGluZyBuZXcgY29kZS4gRE8gTk9UIFVTRSBmcHJpbnRmIAotICAgICAgKG9yIHByaW50ZikgdG8gb3V0cHV0IHRoaW5ncy4gQWxzbywgaW5zdGVhZCBvZiB3cml0aW5nIAotICAgICAgRklYTUVzIGluIHRoZSBzb3VyY2UsIG91dHB1dCBhIEZJWE1FIG1lc3NhZ2UgaWYgeW91IGNhbi4gCi0KLSAgICAgIElNUE9SVEFOVDogYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsIHRoZXJlIGlzIGEgIlN0eWxlIEd1aWRlIgotICAgICAgZm9yIGRlYnVnZ2luZyBtZXNzYWdlcy4gUGxlYXNlIHJlYWQgaXQuCi0KLTI4IE1hciAxOTk4LCBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgotCi0KLURlYnVnZ2luZyBjbGFzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVyZSBhcmUgNCB0eXBlcyAob3IgY2xhc3Nlcykgb2YgZGVidWdnaW5nIG1lc3NhZ2VzOgotCi1GSVhNRSAtLSBNZXNzYWdlcyBpbiB0aGlzIGNsYXNzIHJlbGF0ZSB0byBiZWhhdmlvciBvZiBXaW5lIHRoYXQgZG9lcwotICAgICAgICAgbm90IGNvcnJlc3BvbmQgdG8gc3RhbmRhcmQgV2luZG93cyBiZWhhdmlvciBhbmQgdGhhdCBzaG91bGQKLSAgICAgICAgIGJlIGZpeGVkLiAKLSAgICAgICAgIEV4YW1wbGVzOiBzdHVicywgc2VtaS1pbXBsZW1lbnRlZCBmZWF0dXJlcywgZXRjLgotCi1FUlIgICAtLSBNZXNzYWdlcyBpbiB0aGlzIGNsYXNzIHJlbGF0ZSB0byBzZXJpb3VzIGVycm9ycyBpbiBXaW5lLgotICAgICAgICAgVGhpcyBzb3J0IG9mIG1lc3NhZ2VzIGFyZSBjbG9zZSB0byBhc3NlcnRzIC0tIHRoYXQgaXMsCi0gICAgICAgICB5b3Ugc2hvdWxkIG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNvZGUgZGV0ZWN0cyBhCi0gICAgICAgICBjb25kaXRpb24gd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uIEluIG90aGVyIHdvcmRzLCBpbXBvcnRhbnQKLSAgICAgICAgIHRoaW5ncyB0aGF0IGFyZSBub3Qgd2FybmluZ3MgKHNlZSBiZWxvdyksIGFyZSBlcnJvcnMuCi0JIEV4YW1wbGVzOiB1bmV4cGVjdGVkIGNoYW5nZSBpbiBpbnRlcm5hbCBzdGF0ZSwgZXRjLgotCi1XQVJOICAtLSBUaGVzZSBhcmUgd2FybmluZyBtZXNzYWdlcy4gWW91IHNob3VsZCByZXBvcnQgYSB3YXJuaW5nIHdoZW4KLSAgICAgICAgIHNvbWV0aGluZyB1bndhbnRlZCBoYXBwZW4gYnV0IHRoZSBmdW5jdGlvbiBiZWhhdmVzIHByb3Blcmx5LgotICAgICAgICAgVGhhdCBpcywgb3V0cHV0IGEgd2FybmluZyB3aGVuIHlvdSBlbmNvdW50ZXIgc29tZXRoaW5nCi0gICAgICAgICB1bmV4cGVjdGVkIChleDogY291bGQgbm90IG9wZW4gYSBmaWxlKSBidXQgdGhlIGZ1bmN0aW9uIGRlYWxzCi0gICAgICAgICBjb3JyZWN0bHkgd2l0aCB0aGUgc2l0dWF0aW9uICh0aGF0IGlzLCBhY2NvcmRpbmcgdG8gdGhlIGRvY3MpLgotICAgICAgICAgSWYgeW91IGRvIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIGl0LCBvdXRwdXQgYSBmaXhtZS4KLQkgRXhhbXBsZXM6IGZhaWwgdG8gYWNjZXNzIGEgcmVzb3VyY2UgcmVxdWlyZWQgYnkgdGhlIGFwcCwgZXRjLgotCi1UUkFDRSAtLSBUaGVzZSBhcmUgZGV0YWlsZWQgZGVidWdnaW5nIG1lc3NhZ2VzIHRoYXQgYXJlIG1haW5seSB1c2VmdWwgCi0gICAgICAgICB0byBkZWJ1ZyBhIGNvbXBvbmVudC4gVGhlc2UgYXJlIHVzdWFsbHkgdHVybmVkIG9mZi4KLSAgICAgICAgIEV4YW1wbGVzOiBldmVyeXRoaW5nIGVsc2UgdGhhdCBkb2VzIG5vdCBmYWxsIGluIG9uZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICBhYm92ZSBtZW50aW9uZWQgY2F0ZWdvcmllcyBhbmQgdGhlIHVzZXIgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGtub3cgYWJvdXQgaXQuCi0KLSAgICAgICAgICAgIAotVGhlIHVzZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHR1cm4gb24gb3Igb2ZmIG1lc3NhZ2VzIG9mIGEgcGFydGljdWxhcgotdHlwZS4gWW91IGNhbiBleHBlY3QgdGhlIGZvbGxvd2luZyBwYXR0ZXJucyBvZiB1c2FnZSAoYnV0IG5vdGUgdGhhdCAKLWFueSBjb21iaW5hdGlvbiBpcyBwb3NzaWJsZSk6Ci0gIC0tIHdoZW4geW91IGRlYnVnIGEgY29tcG9uZW50LCBhbGwgdHlwZXMgKFRSQUNFLFdBUk4sRVJSLEZJWE1FKQotICAgICB3aWxsIGJlIGVuYWJsZWQuCi0gIC0tIGR1cmluZyB0aGUgcHJlLWFscGhhIChtYXliZSBhbHBoYSkgc3RhZ2Ugb2YgV2luZSwgbW9zdCBsaWtlbHkKLSAgICAgdGhlIFRSQUNFIGNsYXNzIHdpbGwgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFsbCBvdGhlcnMKLSAgICAgKFdBUk4sRVJSLEZJWE1FKSB3aWxsIGJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgLS0gd2hlbiBXaW5lIHdpbGwgYmVjb21lIHN0YWJsZSwgbW9zdCBsaWtlbHkgdGhlIFRSQUNFIGFuZCBXQVJOCi0gICAgIGNsYXNzZXMgd2lsbCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgYWxsIEVSUnMgYW5kIEZJWE1FcyAKLSAgICAgd2lsbCBiZSBlbmFibGVkLgotICAtLSBpbiBzb21lIGluc3RhbGxhdGlvbnMgdGhhdCB3YW50IHRoZSBzbWFsbGVzdCBmb290cHJpbnQKLSAgICAgYW5kIHdoZXJlIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBvZiBubyBpbnRlcmVzdCwgCi0gICAgIGFsbCBjbGFzc2VzIG1heSBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LgotCi1PZiBjb3Vyc2UsIHRoZSB1c2VyIHdpbGwgaGF2ZSB0aGUgcnVudGltZSBhYmlsaXR5IHRvIG92ZXJyaWRlIHRoZXNlCi1kZWZhdWx0cy4gSG93ZXZlciwgdGhpcyBhYmlsaXR5IG1heSBiZSB0dXJuZWQgb2ZmIGFuZCBjZXJ0YWluIGNsYXNzZXMKLW9mIG1lc3NhZ2VzIG1heSBiZSBjb21wbGV0ZWx5IGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSB0byByZWR1Y2UgdGhlIAotc2l6ZSBvZiBXaW5lLgotCi1EZWJ1Z2dpbmcgY2hhbm5lbHMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BbHNvLCB3ZSBkaXZpZGUgdGhlIGRlYnVnZ2luZyBtZXNzYWdlcyBvbiBhIGNvbXBvbmVudCBiYXNpcy4gRWFjaAotY29tcG9uZW50IGlzIGFzc2lnbmVkIGEgZGVidWdnaW5nIGNoYW5uZWwuIFRoZSBpZGVudGlmaWVyIG9mIHRoZQotY2hhbm5lbCBtdXN0IGJlIGEgdmFsaWQgQyBpZGVudGlmaWVyIGJ1dCBub3RlIHRoYXQgaXQgbWF5IGFsc28gYmUgYQotcmVzZXJ2ZWQgd29yZCBsaWtlIGludCBvciBzdGF0aWMuCi0KLUV4YW1wbGVzIG9mIGRlYnVnZ2luZyBjaGFubmVsczoKLXJlZywgdXBkb3duLCBzdHJpbmcKLQotV2Ugd2lsbCByZWZlciB0byBhIGdlbmVyaWMgY2hhbm5lbCBhcyB4eHguCi0KLU5vdGU6IGZvciB0aG9zZSB3aG8ga25vdyB0aGUgb2xkIGludGVyZmFjZSwgdGhlIGNoYW5uZWwvdHlwZSBpcwotICAgICAgd2hhdCBmb2xsb3dlZCB0aGUgXyBpbiB0aGUgZHByaW50Zl94eHggc3RhdGVtZW50cy4KLSAgICAgIEZvciBleGFtcGxlLCB0byBvdXRwdXQgYSBtZXNzYWdlIG9uIHRoZSBkZWJ1Z2dpbmcgY2hhbm5lbAotICAgICAgcmVnIGluIHRoZSBvbGQgaW50ZXJmYWNlIHlvdSB3b3VsZCBoYWQgdG8gd3JpdGU6Ci0KLSAgICAgIGRwcmludGZfcmVnKHN0ZGRlYiwgIkNvdWxkIG5vdCBhY2Nlc3Mga2V5IVxuIik7Ci0KLSAgICAgIEluIHRoZSBuZXcgaW50ZXJmYWNlLCB3ZSBkcm9wIHRoZSBzdGRkZWIgYXMgaXQgaXMgaW1wbGljaXQuCi0gICAgICBIb3dldmVyLCB3ZSBhZGQgYW4gb3J0aG9nb25hbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0byB0aGUKLSAgICAgIG1lc3NhZ2U6IGl0cyBjbGFzcy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBhcyBpdCB3aWxsIGFsbG93Ci0gICAgICB1cyB0byBzZWxlY3RpdmVseSB0dXJuIG9uIG9yIG9mZiBjZXJ0YWluIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZQotICAgICAgdHlwZSBvZiBpbmZvcm1hdGlvbiB0aGV5IHJlcG9ydC4gRm9yIHRoaXMgcmVhc29uIGl0IGlzIGVzc2VudGlhbAotICAgICAgdG8gY2hvb3NlIHRoZSByaWdodCBjbGFzcyBmb3IgdGhlIG1lc3NhZ2UuIAotICAgICAgQW55aG93LCBzdXBwb3NlIHdlIGZpZ3VyZWQgdGhhdCB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlbG9uZwotICAgICAgaW4gdGhlIFdBUk4gY2xhc3MsIHNvIGluIHRoZSBuZXcgaW50ZXJmYWNlLCB5b3Ugd3JpdGU6Ci0KLSAgICAgIFdBUk4ocmVnLCAiQ291bGQgbm90IGFjY2VzcyBrZXkhXG4iKTsKLS0tLQotCi1Ib3cgdG8gdXNlIGl0Ci0tLS0tLS0tLS0tLS0tCi0KLVNvLCB0byBvdXRwdXQgYSBtZXNzYWdlIChjbGFzcyBZWVkpIG9uIGNoYW5uZWwgeHh4LCBkbzoKLQotI2luY2x1ZGUgImRlYnVnLmgiCi0KLS4uLi4KLQotWVlZKHh4eCwgIjxtZXNzYWdlPiIsIC4uLik7Ci0KLQotU29tZSBleGFtcGxlcyBmcm9tIHRoZSBjb2RlOgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLQotLi4uCi0KLSAgVFJBQ0UoY3J0ZGxsLCAiQ1JURExMX3NldGJ1ZihmaWxlICVwIGJ1ZiAlcCkiLCBmaWxlLCBidWYpOwotCi0gIFdBUk4oYXNwaSwgIkVycm9yIG9wZW5pbmcgZGV2aWNlIGVycm5vPSVkIiwgc2F2ZV9lcnJvcik7Ci0KLQotSWYgeW91IG5lZWQgdG8gZGVjbGFyZSBhIG5ldyBkZWJ1Z2dpbmcgY2hhbm5lbCwgdXNlIGl0IGluIHlvdXIgY29kZQotYW5kIHRoZW4gZG86Ci0ldG9vbHMvbWFrZV9kZWJ1ZwotaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIFdpbmUuCi0KLU5vdGUgdGhhdCB0aGlzIHdpbGwgcmVzdWx0IGluIGFsbW9zdCBjb21wbGV0ZSByZWNvbXBpbGF0aW9uIG9mIFdpbmUuCi0KLU5vdGVzOgotICAgMS4gUGxlYXNlIHBheSBhdHRlbnRpb24gdG8gd2hpY2ggY2xhc3MgeW91IGFzc2lnbiB0aGUgbWVzc2FnZS4KLSAgICAgIFRoZXJlIGFyZSBvbmx5IDQgY2xhc3Nlcywgc28gaXQgaXMgbm90IGhhcmQuIFRoZSByZWFzb24KLSAgICAgIGl0IGlzIGltcG9ydGFudCB0byBnZXQgaXQgcmlnaHQgaXMgdGhhdCB0b28gbXVjaCBpbmZvcm1hdGlvbgotICAgICAgaXMgbm8gaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpZiB5b3UgcHV0IHRoaW5ncyBpbnRvIHRoZSAKLSAgICAgIFdBUk4gY2xhc3MgdGhhdCBzaG91bGQgcmVhbGx5IGJlIGluIHRoZSBUUkFDRSBjbGFzcywgdGhlIAotICAgICAgb3V0cHV0IHdpbGwgYmUgdG9vIGJpZyBhbmQgdGhpcyB3aWxsIGZvcmNlIHRoZSB1c2VyIHRvIAotICAgICAgdHVybiB3YXJuaW5ncyBvZmYuIEJ1dCB0aGlzIHdheSBoZSB3aWxsIGZhaWwgdG8gc2VlIHRoZSBpbXBvcnRhbnQKLSAgICAgIG9uZXMuIEFsc28sIGlmIHlvdSBwdXQgd2FybmluZ3MgaW50byB0aGUgVFJBQ0UgY2xhc3MgbGV0cyBzYXksCi0gICAgICBoZSB3aWxsIG1vc3QgbGlrZWx5IG1pc3MgdGhvc2UgYmVjYXVzZSB1c3VhbGx5IHRoZSBUUkFDRSBjbGFzcwotICAgICAgaXMgdHVybmVkIG9mZi4gQSBzaW1pbGFyIGFyZ3VtZW50IGNhbiBiZSBtYWRlIGlmIHlvdSBtaXggYW55Ci0gICAgICBvdGhlciB0d28gY2xhc3Nlcy4KLSAgIDIuIEFsbCBsaW5lcyBzaG91bGQgZW5kIHdpdGggYSBuZXdsaW5lLklmIHlvdSBjYW4gTk9UIG91dHB1dCAKLSAgICAgIGV2ZXJ5dGhpbmcgdGhhdCB5b3Ugd2FudCBpbiB0aGUgbGluZSB3aXRoIG9ubHkgb25lIHN0YXRlbWVudCwgCi0gICAgICB0aGVuIHlvdSBuZWVkIHRvIGJ1aWxkIHRoZSBzdHJpbmcgaW4gbWVtb3J5LgotICAgICAgUGxlYXNlIHJlYWQgdGhlIHNlY3Rpb24gYmVsb3cgIkluLW1lbW9yeSBtZXNzYWdlcyIgb24gdGhlCi0gICAgICBwcmVmZXJyZWQgd2F5IHRvIGRvIGl0LiBQTEVBU0UgVVNFIFRIQVQgSU5URVJGQUNFIFRPIEJVSUxECi0gICAgICBNRVNTQUdFUyBJTiBNRU1PUlkuIFRoZSByZWFzb24gaXMgdGhhdCB3ZSBhcmUgbm90IHN1cmUgdGhhdAotICAgICAgd2UgbGlrZSBpdCBhbmQgaGF2aW5nIGV2ZXJ5dGhpbmcgaW4gb25lIGZvcm1hdCB3aWxsIGZhY2lsaXRhdGUKLSAgICAgIHRoZSAoYXV0b21hdGljKSB0cmFuc2xhdGlvbiB0byBhIGJldHRlciBpbnRlcmZhY2UuCi0KLQotCi1BcmUgd2UgZGVidWdnaW5nPwotLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gdGVzdCB3aGV0aGVyIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IG9mIGNsYXNzIHl5eSBvbiBjaGFubmVsIHh4eCBpcwotZW5hYmxlZCwgdXNlOgotCi1UUkFDRV9PTiAgdG8gdGVzdCBpZiBUUkFDRSBpcyBlbmFibGVkCi1XQVJOX09OICAgdG8gdGVzdCBpZiBXQVJOIGlzIGVuYWJsZWQKLUZJWE1FX09OICB0byB0ZXN0IGlmIEZJWE1FIGlzIGVuYWJsZWQKLUVSUl9PTiAgICB0byB0ZXN0IGlmIEVSUiBpcyBlbmFibGVkCi0KLUV4YW1wbGVzOgotCi1pZihUUkFDRV9PTihhdG9tKSl7Ci0gIC4uLmJsYWguLi4KLX0KLQotTm90ZSB0aGF0IHlvdSBzaG91bGQgbm9ybWFsbHkgbmVlZCB0byB0ZXN0IG9ubHkgaWYgVFJBQ0VfT04uIEF0IHByZXNlbnQsCi1ub25lIG9mIHRoZSBvdGhlciAzIHRlc3RzIChleGNlcHQgZm9yIEVSUl9PTiB3aGljaCBpcyB1c2VkIG9ubHkgb25jZSEpCi1hcmUgdXNlZCBpbiBXaW5lLgotCi1Jbi1tZW1vcnkgbWVzc2FnZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgTkVFRCB0byBidWlsZCB0aGUgbWVzc2FnZSBmcm9tIG11bHRpcGxlIGNhbGxzLCB5b3UgbmVlZCB0byAKLWJ1aWxkIGl0IGluIG1lbW9yeS4gVG8gZG8gdGhhdCwgeW91IHNob3VsZCB1c2UgdGhlIGZvbGxvd2luZwotaW50ZXJmYWNlOgotCi0gLSBkZWNsYXJlIGEgc3RyaW5nICh3aGVyZSB5b3UgYXJlIGFsbG93ZWQgdG8gZGVjbGFyZSBDIHZhcmlhYmxlcykKLSAgIGFzIGZvbGxvd3M6Ci0gICBkYmdfZGVjbF9zdHIobmFtZSwgbGVuKTsKLSAgIHdoZXJlIG5hbWUgIGlzIHRoZSBuYW1lIG9mIHRoZSBzdHJpbmcgKHlvdSBzaG91bGQgdXNlIHRoZSBjaGFubmVsCi0gICBuYW1lIG9uIHdoaWNoIHlvdSBhcmUgZ29pbmcgdG8gb3V0cHV0IGl0KQotCi0gLSBwcmludCBpbiBpdCB3aXRoOgotICAgZHNwcmludGYobmFtZSwgIjxtZXNzYWdlPiIsIC4uLik7Ci0gICB3aGljaCBpcyBqdXN0IGxpa2UgYSBzcHJpbnRmIGZ1bmN0aW9uIGJ1dCBpbnN0ZWFkIG9mIGEgQyBzdHJpbmcgYXMKLSAgIGZpcnN0IHBhcmFtZXRlciBpdCB0YWtlcyB0aGUgbmFtZSB5b3UgdXNlZCB0byBkZWNsYXJlIGl0LgotCi0gLSBvYnRhaW4gYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgd2l0aDoKLSAgIGRiZ19zdHIobmFtZSkKLQotIC0gcmVzZXQgdGhlIHN0cmluZyAoaWYgeW91IHdhbnQgdG8gcmV1c2UgaXQgd2l0aCk6Ci0gICBkYmdfcmVzZXRfc3RyKG5hbWUpOwotCi1FeGFtcGxlIChtb2RpZmllZCBmcm9tIHRoZSBjb2RlKToKLQotdm9pZCBzb21lX2Z1bmModGFicykKLXsKLSAgSU5UMzIgaTsKLSAgTFBJTlQxNiBwID0gKExQSU5UMTYpdGFiczsKLSAgZGJnX2RlY2xfc3RyKGxpc3Rib3gsIDI1Nik7ICAgICAgICAgICAgICAgICAgIC8qIGRlY2xhcmUgdGhlIHN0cmluZyAqLwotCi0gIGZvciAoaSA9IDA7IGkgPCBkZXNjci0+bmJfdGFiczsgaSsrKSB7Ci0gICAgZGVzY3ItPnRhYnNbaV0gPSAqcCsrPDwxOyAKLSAgICBpZihUUkFDSU5HKGxpc3Rib3gpKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBpbiBpdCBvbmx5IGlmCi0gICAgICBkc3ByaW50ZihsaXN0Ym94LCAiJWhkICIsIGRlc2NyLT50YWJzW2ldKTsgLyogd2UgYXJlIGdvbm5hIG91dHB1dCBpdCAqLwotICB9Ci0gIFRSQUNFKGxpc3Rib3gsICJMaXN0Ym94ICUwNHg6IHNldHRhYnN0b3BzICVzIiwgCi0Jd25kLT5od25kU2VsZiwgZGJnX3N0cihsaXN0Ym94KSk7ICAgICAgICAvKiBvdXRwdXQgdGhlIHdob2xlIHRoaW5nICovCi19Ci0KLUlmIHlvdSBuZWVkIHRvIHVzZSBpdCB0d28gdGltZXMgaW4gdGhlIHNhbWUgc2NvcGUgZG8gbGlrZSB0aGlzOgotCi12b2lkIHNvbWVfZnVuYyh0YWJzKQotewotICBJTlQzMiBpOwotICBMUElOVDE2IHAgPSAoTFBJTlQxNil0YWJzOwotICBkYmdfZGVjbF9zdHIobGlzdGJveCwgMjU2KTsgICAgICAgICAgICAgICAgICAgLyogZGVjbGFyZSB0aGUgc3RyaW5nICAgICAgKi8KLQotICBmb3IgKGkgPSAwOyBpIDwgZGVzY3ItPm5iX3RhYnM7IGkrKykgewotICAgIGRlc2NyLT50YWJzW2ldID0gKnArKzw8MTsgIAotICAgIGlmKFRSQUNJTkcobGlzdGJveCkpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGluIGl0IG9ubHkgaWYKLSAgICAgIGRzcHJpbnRmKGxpc3Rib3gsICIlaGQgIiwgZGVzY3ItPnRhYnNbaV0pOyAvKiB3ZSBhcmUgZ29ubmEgb3V0cHV0IGl0ICovCi0gIH0KLSAgVFJBQ0UobGlzdGJveCwgIkxpc3Rib3ggJTA0eDogc2V0dGFic3RvcHMgJXNcbiIsIAotCXduZC0+aHduZFNlbGYsIGRiZ19zdHIobGlzdGJveCkpOyAgICAgICAgLyogb3V0cHV0IHRoZSB3aG9sZSB0aGluZyAqLwotCi0gIGRiZ19yZXNldF9zdHIobGlzdGJveCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogISEhcmVzZXQgdGhlIHN0cmluZyEhISAqLwotICBmb3IgKGkgPSAwOyBpIDwgZGVzY3ItPmV4dHJhaW5mb19ucjsgaSsrKSB7Ci0gICAgZGVzY3ItPmV4dHJhaW5mbyA9ICpwKzE7IAotICAgIGlmKFRSQUNJTkcobGlzdGJveCkpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGluIGl0IG9ubHkgaWYKLSAgICAgIGRzcHJpbnRmKGxpc3Rib3gsIiUzZCAiLGRlc2NyLT5leHRyYWluZm8pOyAvKiB3ZSBhcmUgZ29ubmEgb3V0cHV0IGl0ICovCi0gIH0KLQotICBUUkFDRShsaXN0Ym94LCAiTGlzdGJveCAlMDR4OiBleHRyYWluZm8gJXNcbiIsIAotCXduZC0+aHduZFNlbGYsIGRiZ19zdHIobGlzdGJveCkpOyAgICAgICAgLyogb3V0cHV0IHRoZSB3aG9sZSB0aGluZyAqLwotCi19Ci0KLUlNUE9SVEFOVCBOT1RFOgotICBBcyBJIGFscmVhZHkgc3RhdGVkLCBJIGRvIG5vdCB0aGluayB0aGlzIHdpbGwgYmUgdGhlIHVsdGltYXRlIGludGVyZmFjZQotICBmb3IgYnVpbGRpbmcgaW4tbWVtb3J5IGRlYnVnZ2luZyBtZXNzYWdlcy4gSW4gZmFjdCwgSSBkbyBoYXZlIGJldHRlciBpZGVhcwotICB3aGljaCBJIGhvcGUgdG8gaGF2ZSB0aW1lIHRvIGltcGxlbWVudCBmb3IgdGhlIG5leHQgcmVsZWFzZS4gRm9yIHRoaXMKLSAgcmVhc29uLCBwbGVhc2UgdHJ5IG5vdCB0byB1c2UgaXQuIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRvIG91dHB1dCBhIGxpbmUKLSAgaW4gbW9yZSB0aGFuIG9uZSBkcHJpbnRmX3h4eCBjYWxscywgdGhlbiBVU0UgVEhJUyBJTlRFUkZBQ0UuIERPIE5PVCB1c2UKLSAgb3RoZXIgbWV0aG9kcy4gVGhpcyB3YXksIEkgd2lsbCBlYXNpbHkgdHJhbnNsYXRlIGV2ZXJ5dGhpbmcgdG8gdGhlIG5ldwotICBpbnRlcmZhY2UgKHdoZW4gaXQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlKS4gU28sIGlmIHlvdSBuZWVkIHRvIHVzZSBpdCwKLSAgdGhlbiBmb2xsb3cgdGhlIGZvbGxvd2luZyBndWlkZWxpbmVzOgotICAgLS0gd3JhcCBjYWxscyB0byBkc3ByaW50ZiB3aXRoIGEgCi0gICAgICBpZihZWVkoeHh4KSkKLSAgICAgICAgZHNwcmludGYoeHh4LC4uLik7Ci0gICAgICBPZiBjb3Vyc2UsIGlmIHRoZSBjYWxsIHRvIGRzcHJpbnRmIGlzIG1hZGUgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiAKLSAgICAgIHdoaWNoIHlvdSBrbm93IGlzIGNhbGxlZCBvbmx5IGlmIFlZWSh4eHgpIGlzIHRydWUKLSAgICAgIChzYXkgeW91IGNhbGwgaXQgb25seSBsaWtlIHRoaXM6Ci0gICAgICAgIGlmKFlZWSh4eHgpKQotICAgICAgICAgIHByaW50X3NvbWVfZGVidWdfaW5mbygpOwotICAgICAgKQotICAgICAgdGhlbiB5b3UgbmVlZCBub3QgKGFuZCBzaG91bGQgbm90KSB3cmFwIGNhbGxzIHRvIGRzcHJpbnRmIHdpdGgKLSAgICAgIHRoZSBiZWZvcmUgbWVudGlvbmVkIGlmLgotICAgLS0gbmFtZSB0aGUgc3RyaW5nIEVYQUNUTFkgbGlrZSB0aGUgZGVidWdnaW5nIGNoYW5uZWwgb24gd2hpY2gKLSAgICAgIGlzIGdvaW5nIHRvIGJlIG91dHB1dC4gUGxlYXNlIHNlZSB0aGUgYWJvdmUgZXhhbXBsZS4gCi0KLQotUmVzb3VyY2UgaWRlbnRpZmllcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlc291cmNlIGlkZW50aWZpZXJzIGNhbiBiZSBlaXRoZXIgc3RyaW5ncyBvciBudW1iZXJzLiBUbyBtYWtlIGxpZmUgYSBiaXQKLWVhc2llciBmb3Igb3V0cHV0dGluZyB0aGlzIGJlYXN0cyAoYW5kIHRvIGhlbHAgeW91IGF2b2lkIHRoZSBuZWVkIHRvIGJ1aWxkCi10aGUgbWVzc2FnZSBpbiBtZW1vcnkpLCBJIGludHJvZHVjZWQgYSBuZXcgZnVuY3Rpb24gY2FsbGVkOgotCi1kZWJ1Z3JlcwotCi1UaGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBkZWJ1Z3N0ci5oCi1hbmQgaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgotCi1MUFNUUiBkZWJ1Z3Jlcyhjb25zdCB2b2lkICppZCk7Ci0KLUl0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgcmVzb3VyY2UgaWQgYW5kIHJldHVybnMgYSBuaWNlbHkgZm9ybWF0dGVkCi1zdHJpbmcgb2YgdGhlIGlkZW50aWZpZXIuCi0KLUl0IHRoZSBoaWdoIHdvcmQgb2YgdGhlIHBvaW50ZXIgaXMgMCwgdGhlbiBpdCBhc3N1bWVzIHRoYXQgdGhlCi1pZGVudGlmaWVyIGlzIGEgbnVtYmVyIGFuZCB0aHVzIHJldHVybnMgYSBzdHJpbmcgb2YgdGhlIGZvcm06Ci0KLSN4eHh4Ci0KLXdoZXJlIHh4eHggYXJlIDQgaGV4LWRpZ2l0cyByZXByZXNlbnRpbmcgdGhlIGxvdyB3b3JkIG9mIGlkLgotCi1JdCB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwb2ludGVyIGlzIG5vdCAwLCB0aGVuIGl0IGFzc3VtZXMgdGhhdCB0aGUKLWlkZW50aWZpZXIgaXMgYSBzdHJpbmcgYW5kIHRodXMgcmV0dXJucyBhIHN0cmluZyBvZiB0aGUgZm9ybToKLQotJzxpZGVudGlmaWVyPicKLQotVGh1cywgdG8gdXNlIGl0LCBkbyBzb21ldGhpbmcgb24gdGhlIGZvbGxvd2luZyBsaW5lczoKLQotI2luY2x1ZGUgImRlYnVnLmgiCi0KLS4uLgotCi0gICBZWVkoeHh4LCAicmVzb3VyY2UgaXMgJXMiLCBkZWJ1Z3JlcyhteXJlc291cmNlKSk7Ci0KLQotVGhlIC1kZWJ1Z21zZyBjb21tYW5kIGxpbmUgb3B0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU28sIHRoZSAtZGVidWdtc2cgY29tbWFuZCBsaW5lIG9wdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIGFzIGZvbGxvd3M6Ci0gIC0gdGhlIG5ldyBzeW50YXggaXM6IC1kZWJ1Z21zZyBbeXl5XSN4eHhbLFt5eXkxXSN4eHgxXSoKLSAgICB3aGVyZSAjIGlzIGVpdGhlciArIG9yIC0KLQotICAtIHdoZW4gdGhlIG9wdGlvbmFsIGNsYXNzIGFyZ3VtZW50ICh5eXkpIGlzIG5vdCBwcmVzZW50LCAKLSAgICB0aGVuIHRoZSBzdGF0ZW1lbnQgd2lsbCBlbmFibGUoKykvZGlzYWJsZSgtKSBhbGwgbWVzc2FnZXMgZm9yCi0gICAgdGhlIGdpdmVuIGNoYW5uZWwgKHh4eCkgb24gYWxsIGNsYXNzZXMuIEZvciBleGFtcGxlOgotICAgCi0gICAgLWRlYnVnbXNnICtyZWcsLWZpbGUKLSAgIAotICAgIGVuYWJsZXMgYWxsIG1lc3NhZ2VzIG9uIHRoZSByZWcgY2hhbm5lbCBhbmQgZGlzYWJsZXMgYWxsCi0gICAgbWVzc2FnZXMgb24gdGhlIGZpbGUgY2hhbm5lbC4KLSAgICBUaGlzIGlzIHNhbWUgYXMgdGhlIG9sZCBzZW1hbnRpY3MuCi0KLSAgLSB3aGVuIHRoZSBvcHRpb25hbCBjbGFzcyBhcmd1bWVudCAoeXl5KSBpcyBwcmVzZW50LCAKLSAgICB0aGVuIHRoZSBzdGF0ZW1lbnQgd2lsbCBlbmFibGUoKykvZGlzYWJsZSgtKSBtZXNzYWdlcyBmb3IKLSAgICB0aGUgZ2l2ZW4gY2hhbm5lbCAoeHh4KSBvbmx5IG9uIHRoZSBnaXZlbiBjbGFzcy4gRm9yIGV4YW1wbGU6Ci0gICAKLSAgICAtZGVidWdtc2cgdHJhY2UrcmVnLHdhcm4tZmlsZQotICAgCi0gICAgZW5hYmxlcyB0cmFjZSBtZXNzYWdlcyBvbiB0aGUgcmVnIGNoYW5uZWwgYW5kIGRpc2FibGVzIHdhcm5pbmcKLSAgICBtZXNzYWdlcyBvbiB0aGUgZmlsZSBjaGFubmVsLgotCi0gIC0gYWxzbywgdGhlIHBzZXVkby1jaGFubmVsIGFsbCBpcyBhbHNvIHN1cHBvcnRlZCBhbmQgaXQgaGFzIHRoZSAKLSAgICBpbnR1aXRpdmUgc2VtYW50aWNzOgotCi0gICAgLWRlYnVnbXNnICthbGwgICAgICAtLSBlbmFibGVzIGFsbCBkZWJ1ZyBtZXNzYWdlcwotICAgIC1kZWJ1Z21zZyAtYWxsICAgICAgLS0gZGlzYWJsZXMgYWxsIGRlYnVnIG1lc3NhZ2VzICAgCi0gICAgLWRlYnVnbXNnIHl5eSthbGwgICAtLSBlbmFibGVzIGRlYnVnIG1lc3NhZ2VzIGZvciBjbGFzcyB5eXkgb24gYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVscy4KLSAgICAtZGVidWdtc2cgeXl5LWFsbCAgIC0tIGRpc2FibGVzIGRlYnVnIG1lc3NhZ2VzIGZvciBjbGFzcyB5eXkgb24gYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVscy4KLQotICAgIFNvLCBmb3IgZXhhbXBsZToKLQotICAgIC1kZWJ1Z21zZyB3YXJuLWFsbCAgLS0gZGlzYWJsZXMgYWxsIHdhcm5pbmcgbWVzc2FnZXMuCi0KLQotQWxzbywgbm90ZSB0aGF0IGF0IHRoZSBtb21lbnQ6Ci0gICAtIHRoZSBmaXhtZSBhbmQgZXJyIGNsYXNzZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdAotICAgLSB0aGUgdHJhY2UgYW5kIHdhcm4gIGNsYXNzZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKLQotCi1Db21waWxpbmcgT3V0IERlYnVnZ2luZyBNZXNzYWdlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gY29tcGlsZSBvdXQgdGhlIGRlYnVnZ2luZyBtZXNzYWdlcywgcHJvdmlkZSBjb25maWd1cmUgd2l0aCB0aGUKLWZvbGxvd2luZyBvcHRpb25zOgotCi0tLWRpc2FibGUtZGVidWcgICAgICAtLSB0dXJucyBvZmYgVFJBQ0UsIFdBUk4sIGFuZCBGSVhNRSAoYW5kIERVTVApLgotCi0tLWRpc2FibGUtdHJhY2UgICAgICAtLSB0dXJucyBvZmYgVFJBQ0Ugb25seS4KLQotVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBleGVjdXRhYmxlIHRoYXQsIHdoZW4gc3RyaXBwZWQsIGlzIGFib3V0IDE1JS0yMCUKLXNtYWxsZXIuICBOb3RlLCBob3dldmVyLCB0aGF0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGRlYnVnCi1XaW5lIHdpdGhvdXQgdGhlc2UgbWVzc2FnZXMuICAKLQotVGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiBleHRlbnNpdmVseSB0ZXN0ZWQtLWl0IG1heSBzdWJ0bHkgYnJlYWsgc29tZQotdGhpbmdzLgotCi0KLUEgRmV3IE5vdGVzIG9uIFN0eWxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG5ldyBzY2hlbWUgbWFrZXMgY2VydGFpbiB0aGluZ3MgbW9yZSBjb25zaXN0ZW50IGJ1dCB0aGVyZSBpcyBzdGlsbAotcm9vbSBmb3IgaW1wcm92ZW1lbnQgYnkgdXNpbmcgYSBjb21tb24gc3R5bGUgb2YgZGVidWcgbWVzc2FnZXMuIEJlZm9yZQotSSBjb250aW51ZSwgbGV0IG1lIG5vdGUgdGhhdCB0aGUgb3V0cHV0IGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCi15eXk6eHh4OmZmZiA8bWVzc2FnZT4KLQotd2hlcmU6IAotICB5eXkgPSB0aGUgY2xhc3MgKGZpeG1lLCBlcnIsIHdhcm4sIHRyYWNlKQotICB4eHggPSB0aGUgY2hhbm5lbCAoYXRvbSwgd2luLCBmb250LCBldGMpCi0gIGZmZiA9IHRoZSBmdW5jdGlvbiBuYW1lCi10aGVzZSBmaWVsZHMgYXJlIG91dHB1dCBhdXRvbWF0aWNhbGx5LiBBbGwgeW91IGhhdmUgdG8gcHJvdmlkZSBpcwotdGhlIDxtZXNzYWdlPiBwYXJ0LgotCi1TbyBoZXJlIGFyZSBzb21lIGlkZWFzOgotCi0qIGRvIE5PVCBpbmNsdWRlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbjogaXQgaXMgaW5jbHVkZWQgYXV0b21hdGljYWxseQotCi0qIGlmIHlvdSB3YW50IHRvIG91dHB1dCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZnVuY3Rpb24sIGRvIGl0IGFzIHRoZSBmaXJzdAotdGhpbmcgYW5kIGluY2x1ZGUgdGhlbSBpbiBwYXJlbnRoZXNpcywgbGlrZSB0aGlzOgotCi0gICBZWVkoeHh4LCAiKCVkLCVwLGV0YykuLi5cbiIsIHBhcjEsIHBhcjIsIC4uLik7Ci0KLSogZm9yIHN0dWJzLCB5b3Ugc2hvdWxkIG91dHB1dCBhIEZJWE1FIG1lc3NhZ2UuIEkgc3VnZ2VzdCB0aGlzIHN0eWxlOgotCi0gICBGSVhNRSh4eHgsICIoJXgsJWQuLi4pOiBzdHViXG4iLCBwYXIxLCBwYXIyLCAuLi4pOwotCi0gIFRoYXQgaXMsIHlvdSBvdXRwdXQgdGhlIHBhcmFtZXRlcnMsIHRoZW4gYSA6IGFuZCB0aGVuIGEgc3RyaW5nCi1jb250YWluaW5nIHRoZSB3b3JkICJzdHViIi4gSSd2ZSBzZWVuICJlbXB0eSBzdHViIiwgYW5kIG90aGVycywgYnV0IEkKLXRoaW5rIHRoYXQganVzdCAic3R1YiIgc3VmZmljZXMuCi0KLSogb3V0cHV0IDEgYW5kIE9OTFkgMSBsaW5lIHBlciBtZXNzYWdlLiBUaGF0IGlzLCB0aGUgZm9ybWF0IHN0cmluZyBzaG91bGQKLWNvbnRhaW4gb25seSAxIFxuIGFuZCBpdCBzaG91bGQgYWx3YXlzIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi0odGhlcmUgYXJlIG1hbnkgcmVhc29ucyAgZm9yIHRoaXMgcmVxdWlyZW1lbnQsIG9uZSBvZiB0aGVtIGlzIHRoYXQgZWFjaAotZGVidWcgbWFjcm8gYWRkcyB0aGluZ3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSkKLQotKiBpZiB5b3Ugd2FudCB0byBuYW1lIGEgdmFsdWUsIHVzZSA9IGFuZCBOT1QgOi4gVGhhdCBpcywgaW5zdGVhZCBvZgotc2F5aW5nOgotICBGSVhNRSh4eHgsICIoZmQ6ICVkLCBmaWxlOiAlcyk6IHN0dWJcbiIsIGZkLCBuYW1lKTsKLXNheToKLSAgRklYTUUoeHh4LCAiKGZkPSVkLCBmaWxlPSVzKTogc3R1YlxuIiwgZmQsIG5hbWUpOwotCi11c2UgOiB0byBzZXBhcmF0ZSBjYXRlZ29yaWVzLgotCi0qIHRyeSB0byBhdm9pZCB0aGUgc3R5bGU6Ci0KLSAgIEZJWE1FKHh4eCwKLSAgICAgICAgICIoZmQ9JWQsIGZpbGU9JXMpOiBzdHViXG4iLCBmZCwgbmFtZSk7Ci1idXQgdXNlOgotCi0gIEZJWE1FKHh4eCwgIihmZD0lZCwgZmlsZT0lcyk6IHN0dWJcbiIsIGZkLCBuYW1lKTsKLQotVGhlIHJlYXNvbiBpcyB0aGF0IGlmIHlvdSB3YW50IHRvIGdyZXAgZm9yIHRoaW5ncywgeW91IHdvdWxkIHNlYXJjaCBmb3IKLUZJWE1FIGJ1dCBpbiB0aGUgZmlyc3QgY2FzZSB0aGVyZSBpcyBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwKLXdoZXJlIGluIHRoZSBzZWNvbmQgb25lLCB0aGVyZSBpcyAoZS5nLiB0aGUgd29yZCBzdHViKQotCi0qIGlmIHlvdSBvdXRwdXQgYSBzdHJpbmcgcyB0aGF0IG1pZ2h0IGNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLAotICBvciBpZiBzIG1heSBiZSBudWxsLCB1c2UgZGVidWdzdHJfYSAoZm9yIEFTQ0lJIHN0cmluZ3MsIG9yCi0gIGRlYnVnc3RyX3cgZm9yIFVuaWNvZGUgc3RyaW5ncykgdG8gY29udmVydCBzIHRvIGEgQyBzdHJpbmcsIGxpa2UgCi0gIHRoaXM6Ci0KLSAgIEhBTkRMRTMyIFdJTkFQSSBZb3VyRnVuYyhMUENTVFIgcykKLXsKLSAgIEZJWE1FKHh4eCwgIiglcyk6IHN0dWJcbiIsIGRlYnVnc3RyX2EocykpOwotfQotCi0qIGlmIHlvdSB3YW50IHRvIG91dHB1dCBhIHJlc291cmNlIGlkZW50aWZpZXIsIHVzZSBkZWJ1Z3JlcyB0bwotICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIGZpcnN0LCBsaWtlIHRoaXM6Ci0KLSAgIEhBTkRMRTMyIFdJTkFQSSBZb3VyRnVuYyhMUENTVFIgcmVzKQotewotICAgRklYTUUoeHh4LCAiKHJlcz0lcyk6IHN0dWJcbiIsIGRlYnVncmVzKHMpKTsKLX0KLQotaWYgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgaXMgYSBTRUdQVFIsIHVzZSBQVFJfU0VHX1RPX0xJTiB0byBnZXQgYQotbGluZXIgcG9pbnRlciBmaXJzdDoKLQotSFJTUkMxNiBXSU5BUEkgRmluZFJlc291cmNlMTYoIEhNT0RVTEUxNiBoTW9kdWxlLCBTRUdQVFIgbmFtZSwgU0VHUFRSIHR5cGUgKQotewotWy4uLl0KLSAgICBUUkFDRShyZXNvdXJjZSwgIm1vZHVsZT0lMDR4IG5hbWU9JXMgdHlwZT0lc1xuIiwgCi0JCSBoTW9kdWxlLCBkZWJ1Z3JlcyhQVFJfU0VHX1RPX0xJTihuYW1lKSksIAotCQkgZGVidWdyZXMoUFRSX1NFR19UT19MSU4odHlwZSkpICk7Ci1bLi4uXQotfQotCi0qIGZvciBtZXNzYWdlcyBpbnRlbmRlZCBmb3IgdGhlIHVzZXIgKHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IHJlcG9ydAotICBlcnJvcnMgaW4gd2luZS5jb25mKSwgdXNlIHRoZSBNU0cgbWFjcm8uIFVzZSBpdCBsaWtlIGEgcHJpbnRmOgotCi0gICAgICAgICAgIE1TRyggIkRlZmluaXRpb24gb2YgZHJpdmUgJWQgaXMgaW5jb3JyZWN0IVxuIiwgZHJpdmUgKTsgCi0KLSAgSG93ZXZlciwgbm90ZSB0aGF0IHRoZXJlIGFyZSBfdmVyeV8gZmV3IHZhbGlkIHVzZXMgb2YgdGhpcyBtYWNyby4KLSAgTW9zdCBtZXNzYWdlcyBhcmUgZGVidWdnaW5nIG1lc3NhZ2VzLCBzbyBjaGFuY2VzIGFyZSB5b3Ugd2lsbCBub3QKLSAgbmVlZCB0byB1c2UgdGhpcyBtYWNyby4gR3JlcCB0aGUgc291cmNlIHRvIGdldCBhbiBpZGVhIHdoZXJlIGl0Ci0gIGlzIGFwcHJvcHJpYXRlIHRvIHVzZSBpdC4KLQotKiBmb3Igc3RydWN0dXJlIGR1bXBzLCB1c2UgdGhlIERVTVAgbWFjcm8uIFVzZSBpdCBsaWtlIGEgcHJpbnRmLAotICBqdXN0IGxpa2UgdGhlIE1TRyBtYWNyby4gU2ltaWxhcmx5LCB0aGVyZSBhcmUgb25seSBhIGZldyB2YWxpZAotICB1c2VzIG9mIHRoaXMgbWFjcm8uIEdyZXAgdGhlIHNvdXJjZSB0byBzZWUgd2hlbiB0byB1c2UgaXQuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2RlYnVnZ2VyLnNnbWwgYi9kb2N1bWVudGF0aW9uL2RlYnVnZ2VyLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1YjYzYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZGVidWdnZXIuc2dtbApAQCAtMCwwICsxLDg0NyBAQAorICA8Y2hhcHRlciBpZD0iZGVidWdnZXIiPgorICAgIDx0aXRsZT5UaGUgV2luZSBEZWJ1Z2dlcjwvdGl0bGU+CisKKyAgICA8c2VjdDEgaWQ9ImRiZy1pbnRybyI+CisgICAgICA8dGl0bGU+SSBJbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSBFcmljIFBvdWVjaCAoPz8/KSAoTGFzdCB1cGRhdGVkOiA2LzE0LzIwMDApCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vd2luZWRiZzwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JLjEgUHJvY2Vzc2VzIGFuZCB0aHJlYWRzOiBpbiB1bmRlcmx5aW5nIE9TIGFuZCBpbiBXaW5kb3dzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCZWZvcmUgZ29pbmcgaW50byB0aGUgZGVwdGhzIG9mIGRlYnVnZ2luZyBpbiBXaW5lLCBoZXJlJ3MKKyAgICAgICAgICBhIHNtYWxsIG92ZXJ2aWV3IG9mIHByb2Nlc3MgYW5kIHRocmVhZCBoYW5kbGluZyBpbiBXaW5lLgorICAgICAgICAgIEl0IGhhcyB0byBiZSBjbGVhciB0aGF0IHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGJlYXN0czoKKyAgICAgICAgICBwcm9jZXNzZXMvdGhyZWFkcyBmcm9tIHRoZSBVbml4IHBvaW50IG9mIHZpZXcgYW5kCisgICAgICAgICAgcHJvY2Vzc2VzL3RocmVhZHMgZnJvbSBhIFdpbmRvd3MgcG9pbnQgb2Ygdmlldy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFYWNoIFdpbmRvd3MnIHRocmVhZCBpcyBpbXBsZW1lbnRlZCBhcyBhIFVuaXggcHJvY2VzcyAodW5kZXIKKyAgICAgICAgICBMaW51eCB1c2luZyB0aGUgPGZ1bmN0aW9uPmNsb25lPC9mdW5jdGlvbj4gc3lzY2FsbCksIG1lYW5pbmcKKyAgICAgICAgICB0aGF0IGFsbCB0aHJlYWRzIG9mIGEgc2FtZSBXaW5kb3dzJyBwcm9jZXNzIHNoYXJlIHRoZSBzYW1lCisgICAgICAgICAgKHVuaXgpIGFkZHJlc3Mgc3BhY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjx2YXJuYW1lPlctcHJvY2VzczwvdmFybmFtZT4gbWVhbnMgYSBwcm9jZXNzIGluIFdpbmRvd3MnIHRlcm1pbm9sb2d5PC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+PHZhcm5hbWU+VS1wcm9jZXNzPC92YXJuYW1lPiBtZWFucyBhIHByb2Nlc3MgaW4gVW5peCcgdGVybWlub2xvZ3k8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT48dmFybmFtZT5XLXRocmVhZDwvdmFybmFtZT4gbWVhbnMgYSB0aHJlYWQgaW4gV2luZG93cycgdGVybWlub2xvZ3k8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgPHZhcm5hbWU+Vy1wcm9jZXNzPC92YXJuYW1lPiBpcyBtYWRlIG9mIG9uZSBvciBzZXZlcmFsCisgICAgICAgICAgPHZhcm5hbWU+Vy10aHJlYWRzPC92YXJuYW1lPi4gRWFjaAorICAgICAgICAgIDx2YXJuYW1lPlctdGhyZWFkPC92YXJuYW1lPiBpcyBtYXBwZWQgdG8gb25lIGFuZCBvbmx5IG9uZQorICAgICAgICAgIDx2YXJuYW1lPlUtcHJvY2VzczwvdmFybmFtZT4uIEFsbAorICAgICAgICAgIDx2YXJuYW1lPlUtcHJvY2Vzc2VzPC92YXJuYW1lPiBvZiBhIHNhbWUKKyAgICAgICAgICA8dmFybmFtZT5XLXByb2Nlc3M8L3Zhcm5hbWU+IHNoYXJlIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWFjaCBVbml4IHByb2Nlc3MgY2FuIGJlIGlkZW50aWZpZWQgYnkgdHdvIHZhbHVlczoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPnRoZSBVbml4IHByb2Nlc3MgaWQgKDx2YXJuYW1lPnVwaWQ8L3Zhcm5hbWU+IGluIHRoZSBmb2xsb3dpbmcpPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+dGhlIFdpbmRvd3MncyB0aHJlYWQgaWQgKDx2YXJuYW1lPnRpZDwvdmFybmFtZT4pPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFYWNoIFdpbmRvd3MnIHByb2Nlc3MgaGFzIGFsc28gYSBXaW5kb3dzJyBwcm9jZXNzIGlkCisgICAgICAgICAgKDx2YXJuYW1lPndwaWQ8L3Zhcm5hbWU+IGluIHRoZSBmb2xsb3dpbmcpLiBJdCBtdXN0IGJlIGNsZWFyCisgICAgICAgICAgdGhhdCA8dmFybmFtZT51cGlkPC92YXJuYW1lPiBhbmQgPHZhcm5hbWU+d3BpZDwvdmFybmFtZT4gYXJlCisgICAgICAgICAgZGlmZmVyZW50IGFuZCBzaGFsbCBub3QgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvdGhlci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8dmFybmFtZT5XcGlkPC92YXJuYW1lPiBhbmQgPHZhcm5hbWU+dGlkPC92YXJuYW1lPiBhcmUKKyAgICAgICAgICBkZWZpbmVkIChXaW5kb3dzKSBzeXN0ZW0gd2lkZS4gVGhleSBtdXN0IG5vdCBiZSBjb25mdXNlZAorICAgICAgICAgIHdpdGggcHJvY2VzcyBvciB0aHJlYWQgaGFuZGxlcyB3aGljaCwgYXMgYW55IGhhbmRsZSwgaXMgYW4KKyAgICAgICAgICBpbmRpcmVjdGlvbiB0byBhIHN5c3RlbSBvYmplY3QgKGluIHRoaXMgY2FzZSBwcm9jZXNzIG9yCisgICAgICAgICAgdGhyZWFkKS4gQSBzYW1lIHByb2Nlc3MgY2FuIGhhdmUgc2V2ZXJhbCBkaWZmZXJlbnQgaGFuZGxlcworICAgICAgICAgIG9uIHRoZSBzYW1lIGtlcm5lbCBvYmplY3QuIFRoZSBoYW5kbGVzIGNhbiBiZSBkZWZpbmVkIGFzCisgICAgICAgICAgbG9jYWwgKHRoZSB2YWx1ZXMgaXMgb25seSB2YWxpZCBpbiBhIHByb2Nlc3MpLCBvciBzeXN0ZW0KKyAgICAgICAgICB3aWRlICh0aGUgc2FtZSBoYW5kbGUgY2FuIGJlIHVzZWQgYnkgYW55CisgICAgICAgICAgPHZhcm5hbWU+Vy1wcm9jZXNzPC92YXJuYW1lPikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkkuMiBXaW5lLCBkZWJ1Z2dpbmcgYW5kIFdpbmVEYmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGFsa2luZyBvZiBkZWJ1Z2dpbmcgaW4gV2luZSwgdGhlcmUgYXJlIGF0IGxlYXN0IHR3bworICAgICAgICAgIGxldmVscyB0byB0aGluayBvZjoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPnRoZSBXaW5kb3dzJyBkZWJ1Z2dpbmcgQVBJLjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPnRoZSBXaW5lIGludGVncmF0ZWQgZGVidWdnZXIsIGR1YmJlZAorICAgICAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPi48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpbmUgaW1wbGVtZW50cyBtb3N0IHRoZSB0aGUgV2luZG93cycgZGVidWdnaW5nIEFQSSAodGhlCisgICAgICAgICAgcGFydCBpbiBLRVJORUwzMiwgbm90IHRoZSBvbmUgaW4KKyAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VITFAuRExMPC9maWxlbmFtZT4pLCBhbmQgYWxsb3dzIGFueSBwcm9ncmFtCisgICAgICAgICAgKGVtdWxhdGVkIG9yIFdpbmVMaWIpIHVzaW5nIHRoYXQgQVBJIHRvIGRlYnVnIGEKKyAgICAgICAgICA8dmFybmFtZT5XLXByb2Nlc3M8L3Zhcm5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+IGlzIGEgV2luZUxpYiBhcHBsaWNhdGlvbiBtYWtpbmcKKyAgICAgICAgICB1c2Ugb2YgdGhpcyBBUEkgdG8gYWxsb3cgZGVidWdnaW5nIGJvdGggYW55IFdpbmUgb3IgV2luZUxpYgorICAgICAgICAgIGFwcGxpY2F0aW9ucyBhcyB3ZWxsIGFzIFdpbmUgaXRzZWxmIChrZXJuZWwgYW5kIGFsbCBETExzKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJkYmctbW9kZXMiPgorICAgICAgPHRpdGxlPklJIFdpbmVEYmcncyBtb2RlcyBvZiBpbnZvY2F0aW9uPC90aXRsZT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SUkuMSBTdGFydGluZyBhIHByb2Nlc3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFueSBhcHBsaWNhdGlvbiAoZWl0aGVyIGEgV2luZG93cycgbmF0aXZlIGV4ZWN1dGFibGUsIG9yIGEKKyAgICAgICAgICBXaW5lTGliIGFwcGxpY2F0aW9uKSBjYW4gYmUgcnVuIHRocm91Z2gKKyAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPi4gQ29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHRyaWNrcworICAgICAgICAgIGFyZSB0aGUgc2FtZSBhcyBmb3Igd2luZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgord2luZWRiZyB0ZWxuZXQuZXhlCit3aW5lZGJnICJobC5leGUgLXdpbmRvd2VkIgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJLjIgQXR0YWNoaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPiBjYW4gYWxzbyBiZSBsYXVuY2hlZCB3aXRob3V0IGFueQorICAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudDogPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4gaXMgc3RhcnRlZAorICAgICAgICAgIHdpdGhvdXQgYW55IGF0dGFjaGVkIHByb2Nlc3MuIFlvdSBjYW4gZ2V0IGEgbGlzdCBvZiBydW5uaW5nCisgICAgICAgICAgPHZhcm5hbWU+Vy1wcm9jZXNzZXM8L3Zhcm5hbWU+IChhbmQgdGhlaXIKKyAgICAgICAgICA8dmFybmFtZT53cGlkPC92YXJuYW1lPidzKSB1c2luZyB0aGUgPGNvbW1hbmQ+d2FsaworICAgICAgICAgICAgcHJvY2VzczwvY29tbWFuZD4gY29tbWFuZCwgYW5kIHRoZW4sIHdpdGggdGhlCisgICAgICAgICAgPGNvbW1hbmQ+YXR0YWNoPC9jb21tYW5kPiBjb21tYW5kLCBwaWNrIHVwIHRoZQorICAgICAgICAgIDx2YXJuYW1lPndwaWQ8L3Zhcm5hbWU+IG9mIHRoZSA8dmFybmFtZT5XLXByb2Nlc3M8L3Zhcm5hbWU+CisgICAgICAgICAgeW91IHdhbnQgdG8gZGVidWcuIFRoaXMgaXMgKGZvciBub3cpIGEgbmVhdCBmZWF0dXJlIGZvciB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgcmVhc29uczogCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT55b3UgY2FuIGRlYnVnIGFuIGFscmVhZHkgc3RhcnRlZCBhcHBsaWNhdGlvbjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJLjMgT24gZXhjZXB0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLCBXaW5kb3dzIHRyYWNrcyB0aGlzIGFzIGFuCisgICAgICAgICAgZXhjZXB0aW9uLiBFeGNlcHRpb25zIGV4aXN0IGZvciBzZWdtZW50YXRpb24gdmlvbGF0aW9uLAorICAgICAgICAgIHN0YWNrIG92ZXJmbG93LCBkaXZpc2lvbiBieSB6ZXJvLi4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCBXaW5lIGNoZWNrcyBpZiB0aGUgPHZhcm5hbWU+Vy1wcm9jZXNzPC92YXJuYW1lPiBpcworICAgICAgICAgIGRlYnVnZ2VkLiBJZiBzbywgdGhlIGV4Y2VwdGlvbiBldmVudCBpcyBzZW50IHRvIHRoZQorICAgICAgICAgIGRlYnVnZ2VyLCB3aGljaCB0YWtlcyBjYXJlIG9mIGl0OiBlbmQgb2YgdGhlIHN0b3J5LiBUaGlzCisgICAgICAgICAgbWVjaGFuaXNtIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIFdpbmRvd3MnIGRlYnVnZ2luZyBBUEkuIAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZSA8dmFybmFtZT5XLXByb2Nlc3M8L3Zhcm5hbWU+IGlzIG5vdCBkZWJ1Z2dlZCwgV2luZQorICAgICAgICAgIHRyaWVzIHRvIGxhdW5jaCBhIGRlYnVnZ2VyLiBUaGlzIGRlYnVnZ2VyIChub3JtYWxseQorICAgICAgICAgIDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+LCBzZWUgSUlJIENvbmZpZ3VyYXRpb24gZm9yIG1vcmUKKyAgICAgICAgICBkZXRhaWxzKSwgYXQgc3RhcnR1cCwgYXR0YWNoZXMgdG8gdGhlCisgICAgICAgICAgPHZhcm5hbWU+Vy1wcm9jZXNzPC92YXJuYW1lPiB3aGljaCBnZW5lcmF0ZWQgdGhlIGV4Y2VwdGlvbgorICAgICAgICAgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHlvdSBhcmUgYWJsZSB0byBsb29rIGF0IHRoZSBjYXVzZXMgb2YKKyAgICAgICAgICB0aGUgZXhjZXB0aW9uLCBhbmQgZWl0aGVyIGZpeCB0aGUgY2F1c2VzIChhbmQgY29udGludWUKKyAgICAgICAgICBmdXJ0aGVyIHRoZSBleGVjdXRpb24pIG9yIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHdlbnQKKyAgICAgICAgICB3cm9uZy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPiBpcyB0aGUgc3RhbmRhcmQgZGVidWdnZXIsIHRoZQorICAgICAgICAgIDxjb21tYW5kPnBhc3M8L2NvbW1hbmQ+IGFuZCA8Y29tbWFuZD5jb250PC9jb21tYW5kPiBjb21tYW5kcworICAgICAgICAgIGFyZSB0aGUgdHdvIHdheXMgdG8gbGV0IHRoZSBwcm9jZXNzIGdvIGZ1cnRoZXIgZm9yIHRoZQorICAgICAgICAgIGhhbmRsaW5nIG9mIHRoZSAgZXhjZXB0aW9uIGV2ZW50LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRvIGJlIG1vcmUgcHJlY2lzZSBvbiB0aGUgd2F5IFdpbmUgKGFuZCBXaW5kb3dzKSBnZW5lcmF0ZXMKKyAgICAgICAgICBleGNlcHRpb24gZXZlbnRzLCB3aGVuIGEgZmF1bHQgb2NjdXJzIChzZWdtZW50YXRpb24KKyAgICAgICAgICB2aW9sYXRpb24sIHN0YWNrIG92ZXJmbG93Li4uKSwgdGhlIGV2ZW50IGlzIGZpcnN0IHNlbnQgdG8KKyAgICAgICAgICB0aGUgZGVidWdnZXIgKHRoaXMgaXMga25vd24gYXMgYSBmaXJzdCBjaGFuY2UgZXhjZXB0aW9uKS4KKyAgICAgICAgICBUaGUgZGVidWdnZXIgY2FuIGdpdmUgdHdvIGFuc3dlcnM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5jb250aW51ZTo8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIHRoZSBkZWJ1Z2dlciBoYWQgdGhlIGFiaWxpdHkgdG8gY29ycmVjdCB3aGF0J3MKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgdGhlIGV4Y2VwdGlvbiwgYW5kIGlzIG5vdyBhYmxlIHRvIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcHJvY2VzcyBleGVjdXRpb24uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPnBhc3M6PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICB0aGUgZGVidWdnZXIgY291bGRuJ3QgY29ycmVjdCB0aGUgY2F1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgZmlyc3QgY2hhbmNlIGV4Y2VwdGlvbi4gV2luZSB3aWxsIG5vdyB0cnkgdG8gd2FsaworICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGV4Y2VwdGlvbiBoYW5kbGVycyB0byBzZWUgaWYgb25lIG9mIHRoZW0KKyAgICAgICAgICAgICAgICBjYW4gaGFuZGxlIHRoZSBleGNlcHRpb24uIElmIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzCisgICAgICAgICAgICAgICAgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgc2VudCBvbmNlIGFnYWluIHRvIHRoZQorICAgICAgICAgICAgICAgIGRlYnVnZ2VyIHRvIGluZGljYXRlIHRoZSBmYWlsdXJlIG9mIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBoYW5kbGluZy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDxub3RlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgc2luY2Ugc29tZSBvZiBXaW5lJ3MgY29kZSB1c2VzIGV4Y2VwdGlvbnMgYW5kCisgICAgICAgICAgICA8ZnVuY3Rpb24+dHJ5L2NhdGNoPC9mdW5jdGlvbj4gYmxvY2tzIHRvIHByb3ZpZGUgc29tZQorICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSwgPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4gY2FuIGJlIGVudGVyZWQKKyAgICAgICAgICAgIGluIHN1Y2ggY2FzZXMgd2l0aCBzZWd2IGV4Y2VwdGlvbnMuIFRoaXMgaGFwcGVucywgZm9yCisgICAgICAgICAgICBleGFtcGxlLCB3aXRoIDxmdW5jdGlvbj5Jc0JhZFJlYWRQdHI8L2Z1bmN0aW9uPiBmdW5jdGlvbi4KKyAgICAgICAgICAgIEluIHRoYXQgY2FzZSwgdGhlIDxjb21tYW5kPnBhc3M8L2NvbW1hbmQ+IGNvbW1hbmQgc2hhbGwgYmUKKyAgICAgICAgICAgIHVzZWQsIHRvIGxldCB0aGUgaGFuZGxpbmcgb2YgdGhlIGV4Y2VwdGlvbiB0byBiZSBkb25lIGJ5CisgICAgICAgICAgICB0aGUgPGZ1bmN0aW9uPmNhdGNoPC9mdW5jdGlvbj4gYmxvY2sgaW4KKyAgICAgICAgICAgIDxmdW5jdGlvbj5Jc0JhZFJlYWRQdHI8L2Z1bmN0aW9uPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJLjQgUXVpdHRpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFVuZm9ydHVuYXRlbHksIFdpbmRvd3MgZG9lc24ndCBwcm92aWRlIGEgZGV0YWNoIGtpbmQgb2YgQVBJLAorICAgICAgICAgIG1lYW5pbmcgdGhhdCBvbmNlIHlvdSBzdGFydGVkIGRlYnVnZ2luZyBhIHByb2Nlc3MsIHlvdSBtdXN0CisgICAgICAgICAgZG8gc28gdW50aWwgdGhlIHByb2Nlc3MgZGllcy4gS2lsbGluZyAob3Igc3RvcHBpbmcvYWJvcnRpbmcpCisgICAgICAgICAgdGhlIGRlYnVnZ2VyIHdpbGwgYWxzbyBraWxsIHRoZSBkZWJ1Z2dlZCBwcm9jZXNzLiBUaGlzIHdpbGwKKyAgICAgICAgICBiZSB0cnVlIGZvciBhbnkgV2luZG93cycgZGVidWdnaW5nIEFQSSBjb21wbGlhbnQgZGVidWdnZXIsCisgICAgICAgICAgc3RhcnRpbmcgd2l0aCA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJkYmctY29uZmlnIj4KKyAgICAgIDx0aXRsZT5JSUkgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJSS4xIFJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBXaW5kb3dzJyBkZWJ1Z2dpbmcgQVBJIHVzZXMgYSByZWdpc3RyeSBlbnRyeSB0byBrbm93CisgICAgICAgICAgd2l0aCBkZWJ1Z2dlciAgdG8gaW52b2tlIHdoZW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbgorICAgICAgICAgIG9jY3VycyAoc2VlIElJLjMgZm9yIHNvbWUgZGV0YWlscykuIFR3byB2YWx1ZXMgaW4ga2V5IAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyJNQUNISU5FXFxTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvblxcQWVEZWJ1ZyIKKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRGV0ZXJtaW5lIHRoZSBiZWhhdmlvcjoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5EZWJ1Z2dlcjo8L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIGNvbW1hbmQgbGluZSB1c2VkIHRvIGxhdW5jaCB0aGUgZGVidWdnZXIKKyAgICAgICAgICAgICAgICAoaXQgdXNlcyB0d28gPGZ1bmN0aW9uPnByaW50ZjwvZnVuY3Rpb24+IGZvcm1hdHMKKyAgICAgICAgICAgICAgICAoPGxpdGVyYWw+JWxkPC9saXRlcmFsPikgdG8gcGFzcyBjb250ZXh0IGRlcGVuZGVudAorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvICB0aGUgZGVidWdnZXIpLiBZb3Ugc2hvdWxkIHB1dCBoZXJlIGEKKyAgICAgICAgICAgICAgICBjb21wbGV0ZSBwYXRoIHRvIHlvdXIgZGVidWdnZXIKKyAgICAgICAgICAgICAgICAoPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4gY2FuIG9mIGNvdXJzZSBiZSB1c2VkLCBidXQKKyAgICAgICAgICAgICAgICBhbnkgb3RoZXIgV2luZG93cycgZGVidWdnaW5nIEFQSSBhd2FyZSBkZWJ1Z2dlciB3aWxsCisgICAgICAgICAgICAgICAgZG8pLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5BdXRvOjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgaWYgdGhpcyB2YWx1ZSBpcyB6ZXJvLCBhIG1lc3NhZ2UgYm94IHdpbGwgYXNrIHRoZQorICAgICAgICAgICAgICAgIHVzZXIgaWYgaGUvc2hlIHdpc2hlcyB0byBsYXVuY2ggdGhlIGRlYnVnZ2VyIHdoZW4gYW4KKyAgICAgICAgICAgICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIG9jY3Vycy4gT3RoZXJ3aXNlLCB0aGUgZGVidWdnZXIKKyAgICAgICAgICAgICAgICBpcyBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgcmVndWxhciBXaW5lIHJlZ2lzdHJ5IGxvb2tzIGxpa2U6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorW01BQ0hJTkVcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uXFxBZURlYnVnXSA5NTc2MzY1MzgKKyJBdXRvIj1kd29yZDowMDAwMDAwMQorIkRlYnVnZ2VyIj0iL3Vzci9sb2NhbC9iaW4vd2luZWRiZyAlbGQgJWxkIgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgIDx0aXRsZT5Ob3RlIDE8L3RpdGxlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBrZXkgaXMgbWFuZGF0b3J5LiBOb3QgZG9pbmcgc28gd2lsbCBub3QKKyAgICAgICAgICAgIGZpcmUgdGhlIGRlYnVnZ2VyIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgPHRpdGxlPk5vdGUgMjwvdGl0bGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8Y29tbWFuZD53aW5laW5zdGFsbDwvY29tbWFuZD4gc2V0cyB1cCB0aGlzIGNvcnJlY3RseS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGR1ZSB0byBzb21lIGxpbWl0YXRpb24gb2YgdGhlIHJlZ2lzdHJ5IGluc3RhbGxlZCwKKyAgICAgICAgICAgIGlmIGEgcHJldmlvdXMgV2luZSBpbnN0YWxsYXRpb24gZXhpc3RzLCBpdCdzIHNhZmVyIHRvCisgICAgICAgICAgICByZW1vdmUgdGhlIHdob2xlCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1tNQUNISU5FXFxTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvblxcQWVEZWJ1Z10KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAga2V5IGJlZm9yZSBydW5uaW5nIGFnYWluIDxjb21tYW5kPndpbmVpbnN0YWxsPC9jb21tYW5kPiB0bworICAgICAgICAgICAgcmVnZW5lcmF0ZSB0aGlzIGtleS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJSS4yIFdpbmVEYmcgY29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4gY2FuIGJlIGNvbmZpZ3VyZWQgdGhydSBhIG51bWJlcgorICAgICAgICAgIG9mIG9wdGlvbnMuIFRob3NlIG9wdGlvbnMgYXJlIHN0b3JlZCBpbiB0aGUgcmVnaXN0cnksIG9uIGEKKyAgICAgICAgICBwZXIgdXNlciBiYXNpcy4gVGhlIGtleSBpcyAoaW4gKm15KiByZWdpc3RyeSkKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitbZXJpY1xcU29mdHdhcmVcXFdpbmVcXFdpbmVEYmddCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRob3NlIG9wdGlvbnMgY2FuIGJlIHJlYWQvd3JpdHRlbiB3aGlsZSBpbnNpZGUKKyAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPiwgYXMgcGFydCBvZiB0aGUgZGVidWdnZXIKKyAgICAgICAgICBleHByZXNzaW9ucy4gVG8gcmVmZXIgdG8gb25lIG9mIHRoaXMgb3B0aW9uLCBpdHMgbmFtZSBtdXN0CisgICAgICAgICAgYmUgIHByZWZpeGVkIGJ5IGEgPGxpdGVyYWw+JDwvbGl0ZXJhbD4gc2lnbi4gRm9yIGV4YW1wbGUsIAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCAkQnJlYWtBbGxUaHJlYWRzU3RhcnR1cCA9IDEKKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgc2V0cyB0aGUgb3B0aW9uIDx2YXJuYW1lPkJyZWFrQWxsVGhyZWFkc1N0YXJ0dXA8L3Zhcm5hbWU+IHRvCisgICAgICAgICAgPGxpdGVyYWw+VFJVRTwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWxsIHRoZSBvcHRpb25zIGFyZSByZWFkIGZyb20gdGhlIHJlZ2lzdHJ5IHdoZW4KKyAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPiBzdGFydHMgKGlmIG5vIGNvcnJlc3BvbmRpbmcgdmFsdWUKKyAgICAgICAgICBpcyBmb3VuZCwgYSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQpLCBhbmQgYXJlIHdyaXR0ZW4gYmFjayB0bworICAgICAgICAgIHRoZSByZWdpc3RyeSB3aGVuIDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+IGV4aXRzIChoZW5jZSwKKyAgICAgICAgICBhbGwgbW9kaWZpY2F0aW9ucyB0byB0aG9zZSBvcHRpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHNhdmVkCisgICAgICAgICAgd2hlbiA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPiB0ZXJtaW5hdGVzKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBIZXJlJ3MgdGhlIGxpc3Qgb2YgYWxsIG9wdGlvbnM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPklJSS4yLjEgQ29udHJvbGluZyB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBlbnRlcmVkPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48dmFybmFtZT5CcmVha0FsbFRocmVhZHNTdGFydHVwPC92YXJuYW1lPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgU2V0IHRvIDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IGlmIGF0IGFsbCB0aHJlYWRzCisgICAgICAgICAgICAgICAgICBzdGFydC11cCB0aGUgZGVidWdnZXIgc3RvcHMgIHNldCB0bworICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+RkFMU0U8L2xpdGVyYWw+IGlmIG9ubHkgYXQgdGhlIGZpcnN0IHRocmVhZAorICAgICAgICAgICAgICAgICAgc3RhcnR1cCBvZiBhIGdpdmVuIHByb2Nlc3MgdGhlIGRlYnVnZ2VyIHN0b3BzLgorICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+RkFMU0U8L2xpdGVyYWw+IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48dmFybmFtZT5CcmVha09uQ3JpdFNlY3RUaW1lT3V0PC92YXJuYW1lPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgU2V0IHRvIDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IGlmIHRoZSBkZWJ1Z2dlciBzdG9wcworICAgICAgICAgICAgICAgICAgd2hlbiBhIGNyaXRpY2FsIHNlY3Rpb24gdGltZXMgb3V0ICg1IG1pbnV0ZXMpOworICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+VFJVRTwvbGl0ZXJhbD4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPkJyZWFrT25BdHRhY2g8L3Zhcm5hbWU+PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBTZXQgdG8gPGxpdGVyYWw+VFJVRTwvbGl0ZXJhbD4gaWYgd2hlbgorICAgICAgICAgICAgICAgICAgPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4gYXR0YWNoZXMgdG8gYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYWZ0ZXIgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgIDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+IHNoYWxsIGJlIGVudGVyZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICBmaXJzdCBhdHRhY2ggZXZlbnQuIFNpbmNlIHRoZSBhdHRhY2ggZXZlbnQgaXMKKyAgICAgICAgICAgICAgICAgIG1lYW5pbmdsZXNzIGluIHRoZSBjb250ZXh0IG9mIGFuIGV4Y2VwdGlvbiBldmVudAorICAgICAgICAgICAgICAgICAgKHRoZSBuZXh0IGV2ZW50ICB3aGljaCBpcyB0aGUgZXhjZXB0aW9uIGV2ZW50IGlzIG9mCisgICAgICAgICAgICAgICAgICBjb3Vyc2UgcmVsZXZhbnQpLCB0aGF0IG9wdGlvbiBpcyBsaWtlbHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPkZBTFNFPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPkJyZWFrT25GaXJzdENoYW5jZTwvdmFybmFtZT48L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiBjYW4gZ2VuZXJhdGUgdHdvIGRlYnVnIGV2ZW50cy4gVGhlCisgICAgICAgICAgICAgICAgICBmaXJzdCBvbmUgaXMgcGFzc2VkIHRvIHRoZSBkZWJ1Z2dlciAoa25vd24gYXMgYQorICAgICAgICAgICAgICAgICAgZmlyc3QgY2hhbmNlKSBqdXN0IGFmdGVyIHRoZSBleGNlcHRpb24uIFRoZSBkZWJ1Z2dlcgorICAgICAgICAgICAgICAgICAgY2FuIHRoZW4gZGVjaWRlcyBlaXRoZXIgdG8gcmVzdW1lIGV4ZWN1dGlvbiAoc2VlCisgICAgICAgICAgICAgICAgICA8Y29tbWFuZD5XaW5lRGJnPC9jb21tYW5kPidzIDxjb21tYW5kPmNvbnQ8L2NvbW1hbmQ+CisgICAgICAgICAgICAgICAgICBjb21tYW5kKSBvciBwYXNzIHRoZSBleGNlcHRpb24gdXAgdG8gdGhlIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgaGFuZGxlciBjaGFpbiBpbiB0aGUgcHJvZ3JhbSAoaWYgaXQgZXhpc3RzKQorICAgICAgICAgICAgICAgICAgKDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+IGltcGxlbWVudHMgdGhpcyB0aHJ1IHRoZQorICAgICAgICAgICAgICAgICAgPGNvbW1hbmQ+cGFzczwvY29tbWFuZD4gY29tbWFuZCkuIElmIG5vbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICBleGNlcHRpb24gaGFuZGxlcnMgdGFrZXMgY2FyZSBvZiB0aGUgZXhjZXB0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiBldmVudCBpcyBzZW50IGFnYWluIHRvIHRoZSBkZWJ1Z2dlciAoa25vd24KKyAgICAgICAgICAgICAgICAgIGFzIGxhc3QgY2hhbmNlIGV4Y2VwdGlvbikuIFlvdSBjYW5ub3QgcGFzcyBvbiBhIGxhc3QKKyAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi4gV2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgIDx2YXJuYW1lPkJyZWFrT25GaXJzdENoYW5jZTwvdmFybmFtZT4gZXhjZXB0aW9uIGlzCisgICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5UUlVFPC9saXRlcmFsPiwgdGhlbiB3aW5lZGJnIGlzIGVudGVyZWQgZm9yCisgICAgICAgICAgICAgICAgICBib3RoIGZpcnN0IGFuZCBsYXN0IGNoYW5jZSBleGVjcHRpb25zICh0bworICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+RkFMU0U8L2xpdGVyYWw+LCBpdCdzIG9ubHkgZW50ZXJlZCBmb3IgbGFzdAorICAgICAgICAgICAgICAgICAgY2hhbmNlIGV4Y2VwdGlvbnMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+SUlJLjIuMiBPdXRwdXQgaGFuZGxpbmc8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPkNvbkNoYW5uZWxNYXNrPC92YXJuYW1lPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgTWFzayBvZiBhY3RpdmUgZGVidWdnZXIgb3V0cHV0IGNoYW5uZWxzIG9uIGNvbnNvbGUgCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48dmFybmFtZT5TdGRDaGFubmVsTWFzazwvdmFybmFtZT48L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIE1hc2sgb2YgYWN0aXZlIGRlYnVnZ2VyIG91dHB1dCBjaGFubmVscyBvbiA8ZmlsZW5hbWU+c3RkZXJyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlVzZVhUZXJtPC92YXJuYW1lPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgU2V0IHRvIDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IGlmIHRoZSBkZWJ1Z2dlciB1c2VzCisgICAgICAgICAgICAgICAgICBpdHMgb3duIDxjb21tYW5kPnh0ZXJtPC9jb21tYW5kPiB3aW5kb3cgZm9yIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgIGlucHV0L291dHB1dC4gIFNldCB0byA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4gaWYKKyAgICAgICAgICAgICAgICAgIHRoZSBkZWJ1Z2dlciB1c2VzIHRoZSBjdXJyZW50IFVuaXggY29uc29sZSBmb3IKKyAgICAgICAgICAgICAgICAgIGlucHV0L291dHB1dAorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSBsYXN0IDMgdmFyaWFibGVzIGFyZSBqb2ludGx5IHVzZWQgaW4gdHdvIGdlbmVyaWMgd2F5czoKKyAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPmRlZmF1bHQ8L3BhcmE+CisgICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0NvbkNoYW5uZWxNYXNrID0gREJHX0NITl9NRVNHICgxKQorU3RkQ2hhbm5lbE1hc2sgPSAwCitVc2VYVGVybSA9IDEKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhbGwgaW5wdXQvb3V0cHV0IGdvZXMgaW50byBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgPGNvbW1hbmQ+eHRlcm08L2NvbW1hbmQ+IHdpbmRvdyAoYnV0IGFsbCBkZWJ1ZworICAgICAgICAgICAgICAgIG1lc3NhZ2VzIDxmdW5jdGlvbj5UUkFDRTwvZnVuY3Rpb24+LAorICAgICAgICAgICAgICAgIDxmdW5jdGlvbj5XQVJOPC9mdW5jdGlvbj4uLi4gc3RpbGwgZ29lcyB0byB0dHkgd2hlcmUKKyAgICAgICAgICAgICAgICB3aW5lIGlzIHJ1biBmcm9tKS4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgdG8gaGF2ZSBhbGwgaW5wdXQvb3V0cHV0IGdvIGludG8gdGhlIHR0eSB3aGVyZSBXaW5lCisgICAgICAgICAgICAgICAgd2FzIHN0YXJ0ZWQgZnJvbSAodG8gYmUgdXNlZCBpbiBhIFgxMS1mcmVlCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQpCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHNjcmVlbj4KK0NvbkNoYW5uZWxNYXNrID0gMAorU3RkQ2hhbm5lbE1hc2sgPSBEQkdfQ0hOX01FU0cgKDEpCitVc2VYVGVybSA9IDEKKyAgICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSB2YXJpYWJsZXMgYWxzbyBhbGxvdywgZm9yIGV4YW1wbGUgZm9yIGRlYnVnZ2luZworICAgICAgICAgICAgcHVycG9zZXMsIHRvIHVzZTogCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxzY3JlZW4+CitDb25DaGFubmVsTWFzayA9IDB4ZmZmCitTdGRDaGFubmVsTWFzayA9IDB4ZmZmCitVc2VYVGVybSA9IDEKKyAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgYWxsb3dzIHRvIHJlZGlyZWN0IGFsbCA8ZnVuY3Rpb24+V2luZURiZzwvZnVuY3Rpb24+CisgICAgICAgICAgICBvdXRwdXQgdG8gYm90aCB0dHkgV2luZSB3YXMgc3RhcnRlZCBmcm9tLCBhbmQKKyAgICAgICAgICAgIDxjb21tYW5kPnh0ZXJtPC9jb21tYW5kPiBkZWJ1Z2dpbmcgd2luZG93LiBJZiBXaW5lIChvcgorICAgICAgICAgICAgPGNvbW1hbmQ+V2luZURiZzwvY29tbWFuZD4pIHdhcyBzdGFydGVkIHdpdGggYSByZWRpcmVjdGlvbgorICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnN0ZG91dDwvZmlsZW5hbWU+IGFuZC9vcgorICAgICAgICAgICAgPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+IHRvIGEgZmlsZSAod2l0aCBmb3IKKyAgICAgICAgICAgIGV4YW1wbGUgJmd0OyYgc2hlbGwgcmVkaXJlY3QgY29tbWFuZCksIHlvdSdsbCBnZXQgaW4gdGhhdAorICAgICAgICAgICAgZmlsZSBib3RoIG91dHB1dHMuIEl0IG1heSBiZSBpbnRlcmVzdGluZyB0byBsb29rIGluIHRoZQorICAgICAgICAgICAgcmVsYXkgdHJhY2UgZm9yIHNwZWNpZmljIHZhbHVlcyB3aGljaCB0aGUgcHJvY2VzcyBzZWd2J2VkCisgICAgICAgICAgICBvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisgICAgICAgIAorICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPklJSS4yLjIgQ29udGV4dCBpbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+VGhyZWFkSWQ8L3Zhcm5hbWU+PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+SUQgb2YgdGhlIDx2YXJuYW1lPlctdGhyZWFkPC92YXJuYW1lPiBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgIGV4YW1pbmVkIGJ5IHRoZSBkZWJ1Z2dlcjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+UHJvY2Vzc0lkPC92YXJuYW1lPjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPklEIG9mIHRoZSA8dmFybmFtZT5XLXRocmVhZDwvdmFybmFtZT4gY3VycmVudGx5CisgICAgICAgICAgICAgICAgICBleGFtaW5lZCBieSB0aGUgZGVidWdnZXI8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPiZsdDtyZWdpc3RlcnM+PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+QWxsIENQVSByZWdpc3RlcnMgYXJlIGFsc28gYXZhaWxhYmxlPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8dmFybmFtZT5UaHJlYWRJZDwvdmFybmFtZT4gYW5kCisgICAgICAgICAgICA8dmFybmFtZT5Qcm9jZXNzSWQ8L3Zhcm5hbWU+IHZhcmlhYmxlcyBjYW4gYmUgaGFuZHkgdG8gc2V0CisgICAgICAgICAgICBjb25kaXRpb25hbCBicmVha3BvaW50cyBvbiBhIGdpdmVuIHRocmVhZCBvciBwcm9jZXNzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0Mz4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iZGJnLWNvbW1hbmRzIj4KKyAgICAgIDx0aXRsZT5JViBXaW5lRGJnIGNvbW1hbmRzPC90aXRsZT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuMSBNaXNjPC90aXRsZT4KKworICAgICAgICA8c2NyZWVuPgorYWJvcnQJCWFib3J0cyB0aGUgZGVidWdnZXIKK3F1aXQJCWV4aXRzIHRoZSBkZWJ1Z2dlcgorCithdHRhY2ggTglhdHRhY2ggdG8gYSBXLXByb2Nlc3MgKE4gaXMgaXRzIElEKS4gSURzIGNhbiBiZQorCQlvYnRhaW5lZCB0aHJ1IHdhbGsgcHJvY2VzcyBjb21tYW5kCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8c2NyZWVuPgoraGVscAkJcHJpbnRzIHNvbWUgaGVscCBvbiB0aGUgY29tbWFuZHMKK2hlbHAgaW5mbwlwcmludHMgc29tZSBoZWxwIG9uIGluZm8gY29tbWFuZHMKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxzY3JlZW4+Cittb2RlIDE2CQlzd2l0Y2ggdG8gMTYgYml0IG1vZGUKK21vZGUgMzIJCXN3aXRjaCB0byAzMiBiaXQgbW9kZQorICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklWLjIgRmxvdyBjb250cm9sPC90aXRsZT4KKworICAgICAgICA8c2NyZWVuPgorY29udAkJY29udGludWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJlYWtwb2ludCBvciBleGNlcHRpb24uCitwYXNzCQlwYXNzIHRoZSBleGNlcHRpb24gZXZlbnQgdXAgdG8gdGhlIGZpbHRlciBjaGFpbi4gCitzdGVwCQljb250aW51ZSBleGVjdXRpb24gdW50aWwgbmV4dCBDIGxpbmUgb2YgY29kZSAoZW50ZXJzCisJCWZ1bmN0aW9uIGNhbGwpCituZXh0IAkJY29udGludWUgZXhlY3V0aW9uIHVudGlsIG5leHQgQyBsaW5lIG9mIGNvZGUgKGRvZXNuJ3QKKwkJZW50ZXIgZnVuY3Rpb24gY2FsbCkgCitzdGVwaQkJZXhlY3V0ZSBuZXh0IGFzc2VtYmx5IGluc3RydWN0aW9uIChlbnRlcnMgZnVuY3Rpb24KKwkJY2FsbCkKK25leHRpCQlleGVjdXRlIG5leHQgYXNzZW1ibHkgaW5zdHJ1Y3Rpb24gKGRvZXNuJ3QgZW50ZXIKKwkJZnVuY3Rpb24gY2FsbCkKK2ZpbmlzaAkJZG8gbmV4dGkgY29tbWFuZHMgdW50aWwgY3VycmVudCBmdW5jdGlvbiBpcyBleGl0ZWQKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIGNvbnQsIHN0ZXAsIG5leHQsIHN0ZXBpLCBuZXh0aSBjYW4gYmUgcG9zdGZpeGVkIGJ5IGEKKyAgICAgICAgICBudW1iZXIgKE4pLCBtZWFuaW5nIHRoYXQgdGhlIGNvbW1hbmQgbXVzdCBiZSBleGVjdXRlZCBOCisgICAgICAgICAgdGltZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklWLjMgQnJlYWtwb2ludHMsIHdhdGNoIHBvaW50czwvdGl0bGU+CisKKyAgICAgICAgPHNjcmVlbj4KK2VuYWJsZSBOCWVuYWJsZXMgKGJyZWFrfHdhdGNoKXBvaW50ICNOCitkaXNhYmxlIE4JZGlzYWJsZXMgKGJyZWFrfHdhdGNoKXBvaW50ICNOCitkZWxldGUgTglkZWxldGVzICAoYnJlYWt8d2F0Y2gpcG9pbnQgI04KK2NvbmQgTgkJcmVtb3ZlcyBhbnkgYSBleGlzdGluZyBjb25kaXRpb24gdG8gKGJyZWFrfHdhdGNoKXBvaW50IE4KK2NvbmQgTiAmbHQ7ZXhwciZndDsJYWRkcyBjb25kaXRpb24gJmx0O2V4cHImZ3Q7IHRvIChicmVha3x3YXRjaClwb2ludCBOLiAmbHQ7ZXhwciZndDsKKwkJd2lsbCBiZSBldmFsdWF0ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIGhpdC4gSWYKKwkJdGhlIHJlc3VsdCBpcyBhIHplcm8gdmFsdWUsIHRoZSBicmVha3BvaW50IGlzbid0CisJCXRyaWdnZXJlZCAKK2JyZWFrICogTglhZGRzIGEgYnJlYWtwb2ludCBhdCBhZGRyZXNzIE4KK2JyZWFrICZsdDtpZCZndDsJYWRkcyBhIGJyZWFrcG9pbnQgYXQgdGhlIGFkZHJlc3Mgb2Ygc3ltYm9sICZsdDtpZCZndDsKK2JyZWFrICZsdDtpZCZndDsgTglhZGRzIGEgYnJlYWtwb2ludCBhdCB0aGUgYWRkcmVzcyBvZiBzeW1ib2wgJmx0O2lkJmd0OyAoTiA/KQorYnJlYWsgTgkJYWRkcyBhIGJyZWFrcG9pbnQgYXQgbGluZSBOIG9mIGN1cnJlbnQgc291cmNlIGZpbGUKK2JyZWFrCQlhZGRzIGEgYnJlYWtwb2ludCBhdCBjdXJyZW50ICRwYyBhZGRyZXNzCit3YXRjaCAqIE4JYWRkcyBhIHdhdGNoIGNvbW1hbmQgKG9uIHdyaXRlKSBhdCBhZGRyZXNzIE4gKG9uIDQgYnl0ZXMpCit3YXRjaCAmbHQ7aWQmZ3Q7CWFkZHMgYSB3YXRjaCBjb21tYW5kIChvbiB3cml0ZSkgYXQgdGhlIGFkZHJlc3Mgb2YKKwkJc3ltYm9sICZsdDtpZCZndDsKK2luZm8gYnJlYWsJbGlzdHMgYWxsIChicmVha3x3YXRjaClwb2ludHMgKHdpdGggc3RhdGUpCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuNCBTdGFjayBtYW5pcHVsYXRpb248L3RpdGxlPgorCisgICAgICAgIDxzY3JlZW4+CitidAkJcHJpbnQgY2FsbGluZyBzdGFjayBvZiBjdXJyZW50IHRocmVhZAordXAJCWdvZXMgdXAgb25lIGZyYW1lIGluIGN1cnJlbnQgdGhyZWFkJ3Mgc3RhY2sKK3VwIE4JCWdvZXMgdXAgTiBmcmFtZXMgaW4gY3VycmVudCB0aHJlYWQncyBzdGFjaworZG4JCWdvZXMgZG93biBvbmUgZnJhbWUgaW4gY3VycmVudCB0aHJlYWQncyBzdGFjaworZG4gTgkJZ29lcyBkb3duIE4gZnJhbWVzIGluIGN1cnJlbnQgdGhyZWFkJ3Mgc3RhY2sKK2ZyYW1lIE4JCXNldCBOIGFzIHRoZSBjdXJyZW50IGZyYW1lCitpbmZvIGxvY2FsCXByaW50cyBpbmZvcm1hdGlvbiBvbiBsb2NhbCB2YXJpYWJsZXMgZm9yIGN1cnJlbnQKKwkJZnVuY3Rpb24gCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuNSBEaXJlY3RvcnkgJiBzb3VyY2UgZmlsZSBtYW5pcHVsYXRpb248L3RpdGxlPgorCisgICAgICAgIDxzY3JlZW4+CitzaG93IGRpcgorZGlyICZsdDtwYXRobmFtZSZndDsKK2Rpcgorc3ltYm9sZmlsZSAmbHQ7cGF0aG5hbWUmZ3Q7CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8c2NyZWVuPgorbGlzdAkJbGlzdHMgMTAgc291cmNlIGxpbmVzIGZyb20gY3VycmVudCBwb3NpdGlvbgorbGlzdCAtIAkJbGlzdHMgMTAgc291cmNlIGxpbmVzIGJlZm9yZSBjdXJyZW50IHBvc2l0aW9uCitsaXN0IE4JCWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBmcm9tIGxpbmUgTiBpbiBjdXJyZW50IGZpbGUKK2xpc3QgJmx0O3BhdGgmZ3Q7Ok4JbGlzdHMgMTAgc291cmNlIGxpbmVzIGZyb20gbGluZSBOIGluIGZpbGUgJmx0O3BhdGgmZ3Q7CitsaXN0ICZsdDtpZCZndDsJbGlzdHMgMTAgc291cmNlIGxpbmVzIG9mIGZ1bmN0aW9uICZsdDtpZCZndDsKK2xpc3QgKiBOCWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBmcm9tIGFkZHJlc3MgTgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IHRoZSBlbmQgdGFyZ2V0ICh0byBjaGFuZ2UgdGhlIDEwIGxpbmVzCisgICAgICAgICAgdmFsdWUpIHVzaW5nIHRoZSAnLCcuIEZvciBleGFtcGxlOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitsaXN0IDEyMywgMjM0IAlsaXN0cyBzb3VyY2UgbGluZXMgZnJvbSBsaW5lIDEyMyB1cCB0byBsaW5lIDIzNCBpbgorCQljdXJyZW50IGZpbGUKK2xpc3QgZm9vLmM6MSw1NglsaXN0cyBzb3VyY2UgbGluZXMgZnJvbSBsaW5lIDEgdXAgdG8gNTYgaW4gZmlsZSBmb28uYworICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklWLjYgRGlzcGxheWluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQSBkaXNwbGF5IGlzIGFuIGV4cHJlc3Npb24gdGhhdCdzIGV2YWx1YXRlZCBhbmQgcHJpbnRlZAorICAgICAgICAgIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgYW55IDxjb21tYW5kPldpbmVEYmc8L2NvbW1hbmQ+CisgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorZGlzcGxheQkJbGlzdHMgdGhlIGFjdGl2ZSBkaXNwbGF5cworaW5mbyBkaXNwbGF5CShzYW1lIGFzIGFib3ZlIGNvbW1hbmQpCitkaXNwbGF5ICZsdDtleHByJmd0OwlhZGRzIGEgZGlzcGxheSBmb3IgZXhwcmVzc2lvbiAmbHQ7ZXhwciZndDsKK2Rpc3BsYXkgL2ZtdCAmbHQ7ZXhwciZndDsJYWRkcyBhIGRpc3BsYXkgZm9yIGV4cHJlc3Npb24gJmx0O2V4cHImZ3Q7LiBQcmludGluZyAKKwkJZXZhbHVhdGVkICZsdDtleHByJmd0OyBpcyBkb25lIHVzaW5nIHRoZSBnaXZlbiBmb3JtYXQgKHNlZQorCQlwcmludCBjb21tYW5kIGZvciBtb3JlIG9uIGZvcm1hdHMpCitkZWwgZGlzcGxheSBOCWRlbGV0ZXMgZGlzcGxheSAjTgordW5kaXNwbGF5IE4JKHNhbWUgYXMgZGVsIGRpc3BsYXkpCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuNyBEaXNhc3NlbWJseTwvdGl0bGU+CisKKyAgICAgICAgPHNjcmVlbj4KK2Rpc2FzCQlkaXNhc3NlbWJsZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24KK2Rpc2FzICZsdDtleHByJmd0OwlkaXNhc3NlbWJsZSBmcm9tIGFkZHJlc3MgJmx0O2V4cHImZ3Q7CitkaXNhcyAmbHQ7ZXhwciZndDssJmx0O2V4cHImZ3Q7ZGlzYXNzZW1ibGVzIGNvZGUgYmV0d2VlbiBhZGRyZXNzZXMgc3BlY2lmaWVkIGJ5CisJCXRoZSB0d28gJmx0O2V4cHImZ3Q7CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuOCBJbmZvcm1hdGlvbiBvbiBXaW5lJ3MgaW50ZXJuYWxzPC90aXRsZT4KKworICAgICAgICA8c2NyZWVuPgoraW5mbyBjbGFzcyAmbHQ7aWQmZ3Q7CXByaW50cyBpbmZvcm1hdGlvbiBvbiBXaW5kb3dzJ3MgY2xhc3MgJmx0O2lkJmd0Oword2FsayBjbGFzcwlsaXN0cyBhbGwgV2luZG93cycgY2xhc3MgcmVnaXN0ZXJlZCBpbiBXaW5lCitpbmZvIHNoYXJlCWxpc3RzIGFsbCB0aGUgZHluYW1pYyBsaWJyYXJpZXMgbG9hZGVkIHRoZSBkZWJ1Z2dlZAorCQlwcm9ncmFtIChpbmNsdWRpbmcgLnNvIGZpbGVzLCBORSBhbmQgUEUgRExMcykKK2luZm8gbW9kdWxlIE4JcHJpbnRzIGluZm9ybWF0aW9uIG9uIG1vZHVsZSBvZiBoYW5kbGUgTgord2FsayBtb2R1bGUJbGlzdHMgYWxsIG1vZHVsZXMgbG9hZGVkIGJ5IGRlYnVnZ2VkIHByb2dyYW0KK2luZm8gcXVldWUgTglwcmludHMgaW5mb3JtYXRpb24gb24gV2luZSdzIHF1ZXVlIE4KK3dhbGsgcXVldWUJbGlzdHMgYWxsIHF1ZXVlcyBhbGxvY2F0ZWQgaW4gV2luZQoraW5mbyByZWdzCXByaW50cyB0aGUgdmFsdWUgb2YgQ1BVIHJlZ2lzdGVyCitpbmZvIHNlZ21lbnQgTglwcmludHMgaW5mb3JtYXRpb24gb24gc2VnbWVudCBOCitpbmZvIHNlZ21lbnQJbGlzdHMgYWxsIGFsbG9jYXRlZCBzZWdtZW50cworaW5mbyBzdGFjawlwcmludHMgdGhlIHZhbHVlcyBvbiB0b3Agb2YgdGhlIHN0YWNrCitpbmZvIG1hcAlsaXN0cyBhbGwgdmlydHVhbCBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBkZWJ1Z2dlZAorCQlwcm9ncmFtIAoraW5mbyB3bmQgTglwcmludHMgaW5mb3JtYXRpb24gb2YgV2luZG93IG9mIGhhbmRsZSBOCit3YWxrIHduZAlsaXN0cyBhbGwgdGhlIHdpbmRvdyBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUKKwkJZGVza3RvcCB3aW5kb3cKK3dhbGsgd25kIE4JbGlzdHMgYWxsIHRoZSB3aW5kb3cgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gdGhlCisJCXdpbmRvdyBvZiBoYW5kbGUgTgord2FsayBwcm9jZXNzCWxpc3RzIGFsbCB3LXByb2Nlc3NlcyBpbiBXaW5lIHNlc3Npb24KK3dhbGsgdGhyZWFkCWxpc3RzIGFsbCB3LXRocmVhZHMgaW4gV2luZSBzZXNzaW9uCit3YWxrIG1vZHJlZgkobm8gbG9uZ2VyIGF2YWlsKQorICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklWLjkgTWVtb3J5IChyZWFkaW5nLCB3cml0aW5nLCB0eXBpbmcpPC90aXRsZT4KKworICAgICAgICA8c2NyZWVuPgoreCAmbHQ7ZXhwciZndDsJZXhhbWluZXMgbWVtb3J5IGF0ICZsdDtleHByJmd0OyBhZGRyZXNzCit4IC9mbXQgJmx0O2V4cHImZ3Q7CWV4YW1pbmVzIG1lbW9yeSBhdCAmbHQ7ZXhwciZndDsgYWRkcmVzcyB1c2luZyBmb3JtYXQgL2ZtdAorcHJpbnQgJmx0O2V4cHImZ3Q7CXByaW50cyB0aGUgdmFsdWUgb2YgJmx0O2V4cHImZ3Q7IChwb3NzaWJseSB1c2luZyBpdHMgdHlwZSkKK3ByaW50IC9mbXQgJmx0O2V4cHImZ3Q7CXByaW50cyB0aGUgdmFsdWUgb2YgJmx0O2V4cHImZ3Q7IChwb3NzaWJseSB1c2luZyBpdHMKKwkJdHlwZSkgCitzZXQgJmx0O2x2YWwmZ3Q7PSZsdDtleHByJmd0Owl3cml0ZXMgdGhlIHZhbHVlIG9mICZsdDtleHByJmd0OyBpbiAmbHQ7bHZhbCZndDsgCit3aGF0aXMgJmx0O2V4cHImZ3Q7CXByaW50cyB0aGUgQyB0eXBlIG9mIGV4cHJlc3Npb24gJmx0O2V4cHImZ3Q7CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZmlsZW5hbWU+L2ZtdDwvZmlsZW5hbWU+IGlzIGVpdGhlciA8ZmlsZW5hbWU+LyZsdDtsZXR0ZXImZ3Q7PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICA8ZmlsZW5hbWU+LyZsdDtjb3VudCZndDsmbHQ7bGV0dGVyJmd0OzwvZmlsZW5hbWU+IGxldHRlciBjYW4gYmUJCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK3MgPSZndDsgYW4gQVNDSUkgc3RyaW5nCit1ID0mZ3Q7IGFuIFVuaWNvZGUgVVRGMTYgc3RyaW5nCitpID0mZ3Q7IGluc3RydWN0aW9ucyAoZGlzYXNzZW1ibGUpCit4ID0mZ3Q7IDMyIGJpdCB1bnNpZ25lZCBoZXhhZGVjaW1hbCBpbnRlZ2VyCitkID0mZ3Q7IDMyIGJpdCBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyCit3ID0mZ3Q7IDE2IGJpdCB1bnNpZ25lZCBoZXhhZGVjaW1hbCBpbnRlZ2VyCitjID0mZ3Q7IGNoYXJhY3RlciAob25seSBwcmludGFibGUgMHgyMC0weDdmIGFyZSBhY3R1YWxseQorICAgICBwcmludGVkKSAKK2IgPSZndDsgOCBiaXQgdW5zaWduZWQgaGV4YWRlY2ltYWwgaW50ZWdlcgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iZGJnLW90aGVycyI+CisgICAgICA8dGl0bGU+ViBPdGhlciBkZWJ1Z2dlcnM8L3RpdGxlPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5WLjEgVXNpbmcgb3RoZXIgVW5peCBkZWJ1Z2dlcnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2Ugb3RoZXIgZGVidWdnZXJzIChsaWtlCisgICAgICAgICAgPGNvbW1hbmQ+Z2RiPC9jb21tYW5kPiksIGJ1dCB5b3UgbXVzdCBiZSBhd2FyZSBvZiBhIGZldworICAgICAgICAgIGl0ZW1zOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFlvdSBuZWVkIHRvIGF0dGFjaCB0aGUgdW5peCBkZWJ1Z2dlciB0byB0aGUgY29ycmVjdCB1bml4CisgICAgICAgICAgcHJvY2VzcyAocmVwcmVzZW50aW5nIHRoZSBjb3JyZWN0IHdpbmRvd3MgdGhyZWFkKSAoeW91IGNhbgorICAgICAgICAgICJndWVzcyIgaXQgZnJvbSBhIDxjb21tYW5kPnBzIGZheDwvY29tbWFuZD4gZm9yIGV4YW1wbGU6CisgICAgICAgICAgV2hlbiBydW5uaW5nIHRoZSBlbXVsYXRvciwgdXN1YWxseSB0aGUgZmlyc3QgdHdvCisgICAgICAgICAgPHZhcm5hbWU+dXBpZHM8L3Zhcm5hbWU+IGFyZSBmb3IgdGhlIFdpbmRvd3MnIGFwcGxpY2F0aW9uCisgICAgICAgICAgcnVubmluZyB0aGUgZGVza3RvcCwgdGhlIGZpcnN0IHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gaXMKKyAgICAgICAgICBnZW5lcmFsbHkgdGhlIHRoaXJkIDx2YXJuYW1lPnVwaWQ8L3Zhcm5hbWU+OyB3aGVuIHJ1bm5pbmcgYQorICAgICAgICAgIFdpbmVMaWIgcHJvZ3JhbSwgdGhlIGZpcnN0IHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gaXMKKyAgICAgICAgICBnZW5lcmFsbHkgdGhlIGZpcnN0IDx2YXJuYW1lPnVwaWQ8L3Zhcm5hbWU+KQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxub3RlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXZlbiBpZiBsYXRlc3QgPGNvbW1hbmQ+Z2RiPC9jb21tYW5kPiBpbXBsZW1lbnRzIHRoZQorICAgICAgICAgICAgbm90aW9uIG9mIHRocmVhZHMsIGl0IHdvbid0IHdvcmsgd2l0aCBXaW5lIGJlY2F1c2UgdGhlCisgICAgICAgICAgICB0aHJlYWQgYWJzdHJhY3Rpb24gdXNlZCBmb3IgaW1wbGVtZW50aW5nIFdpbmRvd3MnIHRocmVhZAorICAgICAgICAgICAgaXMgbm90IDEwMCUgbWFwcGVkIG9udG8gdGhlIGxpbnV4IHBvc2l4IHRocmVhZHMKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyB0aGF0IHlvdSdsbCBoYXZlIHRvIHNwYXduIGEKKyAgICAgICAgICAgIGRpZmZlcmVudCA8Y29tbWFuZD5nZGI8L2NvbW1hbmQ+IHNlc3Npb24gZm9yIGVhY2ggV2luZG93cycKKyAgICAgICAgICAgIHRocmVhZCB5b3Ugd2lzaCB0byBkZWJ1Zy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlYuMiBVc2luZyBvdGhlciBXaW5kb3dzIGRlYnVnZ2VyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgWW91IGNhbiB1c2UgYW55IFdpbmRvd3MnIGRlYnVnZ2luZyBBUEkgY29tcGxpYW50IGRlYnVnZ2VyCisgICAgICAgICAgd2l0aCBXaW5lLiBTb21lIHJlcG9ydHMgaGF2ZSBiZWVuIG1hZGUgb2Ygc3VjY2VzcyB3aXRoCisgICAgICAgICAgVmlzdWFsU3R1ZGlvIGRlYnVnZ2VyIChpbiByZW1vdGUgbW9kZSwgb25seSB0aGUgaHViIHJ1bnMKKyAgICAgICAgICBpbiBXaW5lKS4gR29WZXN0IGZ1bGx5IHJ1bnMgaW4gV2luZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Vi4zIE1haW4gZGlmZmVyZW5jZXMgYmV0d2VlbiB3aW5lZGJnIGFuZCByZWd1bGFyIFVuaXggZGVidWdnZXJzPC90aXRsZT4KKworICAgICAgICA8IS0tIEZJWE1FOiBjb252ZXJ0IHRoaXMgaW50byBhIHRhYmxlIC0tPgorICAgICAgICA8c2NyZWVuPgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICBXaW5lRGJnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBnZGIgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfFdpbmVEYmcgZGVidWdzIGEgV2luZG93cycgcHJvY2Vzczp8Z2RiIGRlYnVncyBhIFdpbmRvd3MnIHRocmVhZDogICAgfAorfCsgdGhlIHZhcmlvdXMgdGhyZWFkcyB3aWxsIGJlICAgICB8KyBhIHNlcGFyYXRlIGdkYiBzZXNzaW9uIGlzICAgICAgfAorfCAgaGFuZGxlZCBieSB0aGUgc2FtZSBXaW5lRGJnICAgICB8ICBuZWVkZWQgZm9yIGVhY2ggdGhyZWFkIG9mICAgICAgfAorfCBzZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXaW5kb3dzJyBwcm9jZXNzICAgICAgICAgICAgICAgfAorfCsgYSBicmVha3BvaW50IHdpbGwgYmUgdHJpZ2dlcmVkICB8KyBhIGJyZWFrcG9pbnQgd2lsbCBiZSB0cmlnZ2VyZWQgfAorfCAgZm9yIGFueSB0aHJlYWQgb2YgdGhlIHctcHJvY2VzcyB8ICBvbmx5IGZvciB0aGUgdy10aHJlYWQgZGVidWdnZWQgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfFdpbmVEYmcgc3VwcG9ydHMgZGVidWcgaW5mb3JtYXRpb258Z2RiIHN1cHBvcnRzIGRlYnVnIGluZm9ybWF0aW9uICAgfAorfGZyb206ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZnJvbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCsgc3RhYnMgKHN0YW5kYXJkIFVuaXggZm9ybWF0KSAgICB8KyBzdGFicyAoc3RhbmRhcmQgVW5peCBmb3JtYXQpICAgfAorfCsgTWljcm9zb2Z0J3MgQywgQ29kZVZpZXcsIC5EQkcgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICA8L3NjcmVlbj4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iZGJnLWxpbWl0cyI+CisgICAgICA8dGl0bGU+VkkgTGltaXRhdGlvbnM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgMTYgYml0IHByb2Nlc3NlcyBhcmUgbm90IHN1cHBvcnRlZCAoYnV0IGNhbGxzIHRvIDE2IGJpdCBjb2RlCisgICAgICAgIGluIDMyIGJpdCAgYXBwbGljYXRpb25zIGFyZSkuCisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJ3aW5lLWRvYy5zZ21sIiAiYm9vayIgInBhcnQiICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcgYi9kb2N1bWVudGF0aW9uL2RlYnVnZ2luZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlOGQyYi4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2RlYnVnZ2luZworKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi1UaGlzIGZpbGUgZGVzY3JpYmVzIHdoZXJlIHRvIHN0YXJ0IGRlYnVnZ2luZyBXaW5lLiBJZiBhdCBhbnkgcG9pbnQKLXlvdSBnZXQgc3R1Y2sgYW5kIHdhbnQgdG8gYXNrIGZvciBoZWxwLCBwbGVhc2UgcmVhZCB0aGUgZmlsZQotZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gd3JpdGUgdXNlZnVsIGJ1ZyAKLXJlcG9ydHMuCi0KLUNyYXNoZXMKLT09PT09PT0KLQotICBUaGVzZSB1c3VhbGx5IHNob3cgdXAgbGlrZSB0aGlzOgotCi18VW5leHBlY3RlZCBXaW5kb3dzIHByb2dyYW0gc2VnZmF1bHQgLSBvcGNvZGUgPSA4YgotfFNlZ21lbnRhdGlvbiBmYXVsdCBpbiBXaW5kb3dzIHByb2dyYW0gMWI3OmM0MS4KLXxMb2FkaW5nIHN5bWJvbHMgZnJvbSBFTEYgZmlsZSAvcm9vdC93aW5lL3dpbmUuLi4KLXwuLi4ubW9yZSBMb2FkaW5nIHN5bWJvbHMgZnJvbSAuLi4KLXxJbiAxNiBiaXQgbW9kZS4KLXxSZWdpc3RlciBkdW1wOgotfCBDUzowMWI3IFNTOjAxNmYgRFM6MDI4NyBFUzowMDAwCi18IElQOjBjNDEgU1A6ODc4YSBCUDo4Nzk2IEZMQUdTOjAyNDYKLXwgQVg6ODExZSBCWDowMDAwIENYOjAwMDAgRFg6MDAwMCBTSTowMDAxIERJOmZmZmYKLXxTdGFjayBkdW1wOgotfDB4MDE2ZjoweDg3OGE6ICAwMDAxIDAxNmYgZmZlZCAwMDAwIDAwMDAgMDI4NyA4OTBiIDFlNWIKLXwweDAxNmY6MHg4NzlhOiAgMDFiNyAwMDAxIDAwMGQgMTA1MCAwOGI3IDAxNmYgMDAwMSAwMDBkCi18MHgwMTZmOjB4ODdhYTogIDAwMGEgMDAwMyAwMDA0IDAwMDAgMDAwNyAwMDA3IDAxOTAgMDAwMAotfDB4MDE2ZjoweDg3YmE6Ci18Ci18MDA1MDogc2VsPTAyODcgYmFzZT00MDIxMWQzMCBsaW1pdD0wYjkzZiAoYnl0ZXMpIDE2LWJpdCBydy0KLXxCYWNrdHJhY2U6Ci18MCAweDAxYjc6MHgwYzQxIChQWFNSVl9GT05HRVRGQUNFTkFNRSsweDdjKQotfDEgMHgwMWI3OjB4MWU1YiAoUFhTUlZfRk9OUFVUQ0FURk9OVCsweDJjZCkKLXwyIDB4MDFhNzoweDA1YWEKLXwzIDB4MDFiNzoweDA3NjggKFBYU1JWX0ZPTklOSVRGT05UUysweDgxKQotfDQgMHgwMTRmOjB4MDNlZCAoUERPWFdJTl9AU1FMQ1VSQ0IkUTZDQlRZUEVVTE44Q0JTQ1RZUEUrMHgxYjEpCi18NSAweDAxM2Y6MHgwMGFjCi18Ci18MHgwMWI3OjB4MGM0MSAoUFhTUlZfRk9OR0VURkFDRU5BTUUrMHg3Yyk6ICBtb3Z3ICAgICAgICAlZXM6MHgzOCglYngpLCVkeAotCi1TdGVwcyB0byBkZWJ1ZyBhIGNyYXNoLiBZb3UgbWF5IHN0b3AgYXQgYW55IHN0ZXAsIGJ1dCBwbGVhc2UgcmVwb3J0IHRoZSBidWcKLWFuZCBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGdhdGhlcmVkIHRvIHRoZSBuZXdzZ3JvdXAgb3IgdGhlCi1yZWxldmFudCBkZXZlbG9wZXIgYXMgZmVhc29uYWJsZS4KLSAgCi0gMS4gR2V0IHRoZSByZWFzb24gZm9yIHRoZSBjcmFzaC4gVGhpcyBpcyB1c3VhbGx5IGFuIGFjY2VzcyB0byBhbiBpbnZhbGlkCi0gICAgc2VsZWN0b3IsIGFuIGFjY2VzcyB0byBhbiBvdXQgb2YgcmFuZ2UgYWRkcmVzcyBpbiBhIHZhbGlkIHNlbGVjdG9yLAotICAgIHBvcHBpbmcgYSBzZWdtZW50cmVnaXN0ZXIgZnJvbSB0aGUgc3RhY2sgb3IgdGhlIGxpa2UuIFdoZW4gcmVwb3J0aW5nIGEKLSAgICBjcmFzaCwgcmVwb3J0IHRoaXMgV0hPTEUgY3Jhc2hkdW1wIGV2ZW4gaWYgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHlvdS4KLQotICAgIChJbiB0aGlzIGNhc2UgaXQgaXMgYWNjZXNzIHRvIGFuIGludmFsaWQgc2VsZWN0b3IsIGZvciAlZXMgaXMgMDAwMCwgYXMKLSAgICBzZWVuIGluIHRoZSByZWdpc3RlciBkdW1wKS4KLSAgICAKLSAyLiBEZXRlcm1pbmUgd2hlcmUgdGhlIHJlYXNvbiBjYW1lIGZyb20uCi0gICAgU2luY2UgdGhpcyBpcyB1c3VhbGx5IGEgcHJpbWFyeS9zZWNvbmRhcnkgcmVhY3Rpb24gdG8gYSBmYWlsZWQgb3IKLSAgICBtaXNiZWhhdmluZyBXaW5lIGZ1bmN0aW9uLCByZXJ1biBXaW5lIHdpdGggIi1kZWJ1Z21zZyArcmVsYXkiICh3aXRob3V0ICIpCi0gICAgYWRkZWQgdG8gdGhlIGNvbW1hbmRsaW5lLiBUaGlzIHdpbGwgZ2V0IHJhdGhlciBtdWNoIG91dHB1dCwgYnV0IHVzdWFsbHkKLSAgICB0aGUgcmVhc29uIGlzIGxvY2F0ZWQgaW4gdGhlIGxhc3QgY2FsbChzKS4gIFRob3NlIGxpbmVzIHVzdWFsbHkgbG9vayBsaWtlCi0gICAgdGhpczoKLQotfENhbGwgS0VSTkVMLjkwOiBMU1RSTEVOKDAyMjc6MDY5MiAidGV4dCIpIHJldD0wMWU3OjJjZTcgZHM9MDIyNwotICAgICAgXl5eXl5eXl5eICBeICAgICAgIF5eXl5eXl5eXiBeXl5eXl4gICAgICBeXl5eXl5eXl4gICAgXl5eXgotICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfERhdGFzZWdtZW50Ci0gICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHxSZXR1cm4gYWRkcmVzcwotICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8dGV4dHVhbCBwYXJhbWV0ZXIKLSAgICAgIHwgICAgICAgICAgfCAgICAgICB8Ci0gICAgICB8ICAgICAgICAgIHwgICAgICAgfEFyZ3VtZW50KHMpLiBUaGlzIG9uZSBpcyBhIHdpbjE2IHNlZ21lbnRlZCBwb2ludGVyLgotICAgICAgfCAgICAgICAgICB8RnVuY3Rpb24gY2FsbGVkLgotICAgICAgfFRoZSBtb2R1bGUsIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgaW4uIEluIHRoaXMgY2FzZSBpdCBpcyBLRVJORUwuCi0JCSAgICAgICAgCi18UmV0ICBLRVJORUwuOTA6IExTVFJMRU4oKSByZXR2YWw9MHgwMDA0IHJldD0wMWU3OjJjZTcgZHM9MDIyNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgotCQkJCSAgfFJldHVybnZhbHVlIGlzIDE2IGJpdCBhbmQgaGFzIHRoZSB2YWx1ZSA0LgotCi0KLSAzLiBJZiB5b3UgaGF2ZSBmb3VuZCBhIG1pc2JlaGF2aW5nIGZ1bmN0aW9uLCB0cnkgdG8gZmluZCBvdXQgd2h5IGl0Ci0gICAgbWlzYmVoYXZlcy4gRmluZCB0aGUgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiBUcnkgdG8gbWFrZSBzZW5zZSBvZgotICAgIHRoZSBhcmd1bWVudHMgcGFzc2VkLiBVc3VhbGx5IHRoZXJlIGlzIGEgJ1RSQUNFKDxjaGFubmVsPiwiKC4uLilcbiIpOycgCi0gICAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFJlcnVuIHdpbmUgd2l0aCAKLSAgICAiLWRlYnVnbXNnICt4eXosK3JlbGF5IiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuCi0KLSA0LiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwgZGVidWdnZXIgY2FuIGJlIAotICAgIGZvdW5kIGluIGRlYnVnZ2VyL1JFQURNRS4KLQotIDUuIElmIHRob3NlIGluZm9ybWF0aW9uIGlzbid0IGNsZWFyIGVub3VnaCBvciBpZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgYWJvdXQKLSAgICB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBmdW5jdGlvbiBpdHNlbGYsIHRyeSBydW5uaW5nIHdpbmUgd2l0aCAiLWRlYnVnbXNnCi0gICAgK2FsbCIsIHdoaWNoIGR1bXBzIEFMTCBpbmNsdWRlZCBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiB3aW5lLgotCi0gNi4gSWYgdGhhdCBpc24ndCBlbm91Z2ggYWRkIG1vcmUgZGVidWcgb3V0cHV0IGZvciB5b3Vyc2VsZiBpbnRvIHRoZQotICAgIGZ1bmN0aW9ucyB5b3UgZmluZCByZWxldmFudC4gIFNlZSBkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3MuCi0gICAgWW91IG1pZ2h0IGFsc28gdHJ5IHRvIHJ1biB0aGUgcHJvZ3JhbSBpbiBnZGIgaW5zdGVhZCBvZiB1c2luZyB0aGUKLSAgICBXSU5FLWRlYnVnZ2VyLiBJZiB5b3UgZG8gdGhhdCwgdXNlICJoYW5kbGUgU0lHU0VHViBub3N0b3Agbm9wcmludCIKLSAgICB0byBkaXNhYmxlIHRoZSBoYW5kbGluZyBvZiBzZWcgZmF1bHRzIGluc2lkZSBnZGIgKG5lZWRlZCBmb3IgV2luMTYpLgotICAgIElmIHlvdSBkb24ndCB1c2UgdGhlICItZGVza3RvcCIgb3IgIi1tYW5hZ2VkIiBvcHRpb24sCi0gICAgc3RhcnQgdGhlIFdJTkUgcHJvY2VzcyB3aXRoICItc3luYyIsIG9yIGNoYW5jZXMgYXJlIGdvb2QgdG8gZ2V0IFggaW50bwotICAgIGFuIHVudXNhYmxlIHN0YXRlLgotICAKLSA3LiBZb3UgY2FuIGFsc28gc2V0IGEgYnJlYWtwb2ludCBmb3IgdGhhdCBmdW5jdGlvbi4gU3RhcnQgd2luZSB3aXRoIHRoZQotICAgICItZGVidWciIG9wdGlvbiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIEFmdGVyIGxvYWRpbmcgdGhlIGV4ZWN1dGFibGUKLSAgICB3aW5lIHdpbGwgZW50ZXIgdGhlIGludGVybmFsIGRlYnVnZ2VyLiBVc2UgImJyZWFrIEtFUk5FTF9MU1RSTEVOIgotICAgIChyZXBsYWNlIGJ5IGZ1bmN0aW9uIHlvdSB3YW50IHRvIGRlYnVnLCBDQVNFIElTIFJFTEVWQU5ULikgdG8gc2V0IGEKLSAgICBicmVha3BvaW50LiAgVGhlbiB1c2UgImNvbnRpbnVlIiB0byBzdGFydCBub3JtYWwgcHJvZ3JhbS1leGVjdXRpb24uIFdpbmUKLSAgICB3aWxsIHN0b3AgaWYgaXQgcmVhY2hlcyB0aGUgYnJlYWtwb2ludC4gSWYgdGhlIHByb2dyYW0gaXNuJ3QgeWV0IGF0IHRoZQotICAgIGNyYXNoaW5nIGNhbGwgb2YgdGhhdCBmdW5jdGlvbiwgdXNlICJjb250aW51ZSIgYWdhaW4gdW50aWwgeW91IGFyZSBhYm91dAotICAgIHRvIGVudGVyIHRoYXQgZnVuY3Rpb24uIFlvdSBtYXkgbm93IHByb2NlZWQgd2l0aCBzaW5nbGUtc3RlcHBpbmcgdGhlCi0gICAgZnVuY3Rpb24gdW50aWwgeW91IHJlYWNoIHRoZSBwb2ludCBvZiBjcmFzaC4gVXNlIHRoZSBvdGhlciBkZWJ1Z2dlcgotICAgIGNvbW1hbmRzIHRvIHByaW50IHJlZ2lzdGVycyBhbmQgdGhlIGxpa2UuCi0KLQotUHJvZ3JhbSBoYW5ncywgbm90aGluZyBoYXBwZW5zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBTd2l0Y2ggdG8gVU5JWCBzaGVsbCwgZ2V0IHRoZSBwcm9jZXNzLUlEIHVzaW5nICJwcyAtYXxncmVwIHdpbmUiLCBhbmQgZG8gYQotICAia2lsbCAtSFVQIDxwaWQ+IiAod2l0aG91dCAiIGFuZCA8PikuIFdpbmUgd2lsbCB0aGVuIGVudGVyIGl0cyBpbnRlcm5hbAotICBkZWJ1Z2dlciBhbmQgeW91IGNhbiBwcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4gQWxzbywgeW91IGNhbiB1c2UgLWRlYnVnCi0gIHN3aXRjaCBhbmQgdGhlbiB5b3UgY2FuIGdldCBpbnRvIGludGVybmFsIGRlYnVnZ2VyIGJ5IHByZXNzaW5nIEN0cmwtQyBpbiAKLSAgdGhlIHRlcm1pbmFsIHdoZXJlIHlvdSBydW4gV2luZS4KLQotUHJvZ3JhbSByZXBvcnRzIGFuIGVycm9yIHdpdGggYSBNZXNzYWdlYm94Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBTb21ldGltZXMgcHJvZ3JhbXMgYXJlIHJlcG9ydGluZyBmYWlsdXJlIHVzaW5nIGEgbW9yZSBvciBsZXNzIG5vbmRlc2NyaXB0Ci0gIG1lc3NhZ2Vib3hlcy4gV2UgY2FuIGRlYnVnIHRoaXMgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIENyYXNoZXMsIGJ1dCB0aGVyZQotICBpcyBvbmUgcHJvYmxlbS4uLiBGb3Igc2V0dGluZyB1cCBhIG1lc3NhZ2UgYm94IHRoZSBwcm9ncmFtIGFsc28gY2FsbHMgV2luZQotICBwcm9kdWNpbmcgaHVnZSBjaHVua3Mgb2YgZGVidWcgY29kZS4KLQotICBTaW5jZSB0aGUgZmFpbHVyZSBoYXBwZW5zIHVzdWFsbHkgZGlyZWN0bHkgYmVmb3JlIHNldHRpbmcgdXAgdGhlIE1lc3NhZ2Vib3gKLSAgeW91IGNhbiBzdGFydCB3aW5lIHdpdGggIi1kZWJ1ZyIgYWRkZWQgdG8gdGhlIGNvbW1hbmRsaW5lLCBzZXQgYSBicmVha3BvaW50Ci0gIGF0ICJNZXNzYWdlQm94QSIgKGNhbGxlZCBieSB3aW4xNiBhbmQgd2luMzIgcHJvZ3JhbXMpIGFuZCBwcm9jZWVkIHdpdGgKLSAgImNvbnRpbnVlIi4gV2l0aCAiLWRlYnVnbXNnICthbGwiIFdpbmUgd2lsbCBub3cgc3RvcCBkaXJlY3RseSBiZWZvcmUgCi0gIHNldHRpbmcgdXAgdGhlIE1lc3NhZ2Vib3guICBQcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4KLQotICBZb3UgY2FuIGFsc28gcnVuIHdpbmUgdXNpbmcgIndpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtLmV4ZSAyPiYxfGxlc3MgLWkiCi0gIGFuZCBpbiBsZXNzIHNlYXJjaCBmb3IgbWVzc2FnZWJveC4KLQotRGlzYXNzZW1ibGluZyBwcm9ncmFtczoKLT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFlvdSBtYXkgYWxzbyB0cnkgdG8gZGlzYXNzZW1ibGUgdGhlIG9mZmVuZGluZyBwcm9ncmFtIHRvIGNoZWNrIGZvciAKLSAgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGFuZC9vciB1c2Ugb2YgdGhlbS4KLQotICBUaGUgYmVzdCwgZnJlZWx5IGF2YWlsYWJsZSwgZGlzYXNzZW1ibGVyIGZvciBXaW4xNiBwcm9ncmFtcyBpcwotICBXaW5kb3dzIENvZGViYWNrLCBhcmNoaXZlbmFtZSB3Y2J4eHguemlwLCB3aGljaCB1c3VhbGx5IGNhbiBiZSBmb3VuZAotICBpbiB0aGUgQ2ljYS1NaXJyb3Igc3ViZGlyZWN0b3J5IG9uIHRoZSBXSU5FIGZ0cHNpdGVzLiAoU2VlIEFOTk9VTkNFKS4KLQotICBEaXNhc3NlbWJsaW5nIHdpbjMyIHByb2dyYW1zIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBXaW5kb3dzIERpc2Fzc2VtYmxlciAzMiwKLSAgYXJjaGl2ZW5hbWUgc29tZXRoaW5nIGxpa2UgdzMyZHNtODcuemlwIChvciBzaW1pbGFyKSBvbiBmdHAud2luc2l0ZS5jb20KLSAgYW5kIG1pcnJvcnMuICBUaGUgc2hhcmV3YXJlIHZlcnNpb24gZG9lcyBub3QgYWxsb3cgc2F2aW5nIG9mIGRpc2Fzc2VtYmx5Ci0gIGxpc3RpbmdzLgotICBZb3UgY2FuIGFsc28gdXNlIHRoZSBuZXdlciAoYW5kIGluIHRoZSBmdWxsIHZlcnNpb24gYmV0dGVyKSBJbnRlcmFjdGl2ZQotICBEaXNhc3NlbWJsZXIgKElEQSkgZnJvbSB0aGUgZnRwIHNpdGVzIG1lbnRpb25lZCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KLQotICBVbmRlcnN0YW5kaW5nIGRpc2Fzc2VtYmxlZCBjb2RlIGlzIG1vc3RseSBhIHF1ZXN0aW9uIG9mIGV4ZXJjaXNlLgotCi0gIE1vc3QgY29kZSBvdXQgdGhlcmUgdXNlcyBzdGFuZGFyZCBDIGZ1bmN0aW9uIGVudHJpZXMgKGZvciBpdCBpcyB1c3VhbGx5IAotICB3cml0dGVuIGluIEMpLiBXaW4xNiBmdW5jdGlvbiBlbnRyaWVzIHVzdWFsbHkgbG9vayBsaWtlIHRoYXQ6Ci18ICAJcHVzaCBicAotfAltb3YgYnAsIHNwCi18CS4uLiBmdW5jdGlvbiBjb2RlIC4uCi18CXJldGYgWFhYWCAJPC0tLS0tLS0tLSBYWFhYIGlzIG51bWJlciBvZiBieXRlcyBvZiBhcmd1bWVudHMKLQotICBUaGlzIGlzIGEgRkFSIGZ1bmN0aW9uIHdpdGggbm8gbG9jYWwgc3RvcmFnZS4gVGhlIGFyZ3VtZW50cyB1c3VhbGx5IHN0YXJ0Ci0gIGF0IFticCs2XSB3aXRoIGluY3JlYXNpbmcgb2Zmc2V0cy4gTm90ZSwgdGhhdCBbYnArNl0gYmVsb25ncyB0byB0aGUgUklHSFRNT1NUIAotICBhcmd1bWVudCwgZm9yIGV4cG9ydGVkIHdpbjE2IGZ1bmN0aW9ucyB1c2UgdGhlIFBBU0NBTCBjYWxsaW5nIGNvbnZlbnRpb24uCi0gIFNvLCBpZiB3ZSB1c2Ugc3RyY21wKGEsYikgd2l0aCBhIGFuZCBiIGJvdGggMzIgYml0IHZhcmlhYmxlcyBiIHdvdWxkIGJlIGF0Ci0gIFticCs2XSBhbmQgYSBhdCBbYnArMTBdLgotICBNb3N0IGZ1bmN0aW9ucyBtYWtlIGFsc28gdXNlIG9mIGxvY2FsIHN0b3JhZ2UgaW4gdGhlIHN0YWNrZnJhbWU6Ci18CWVudGVyIDAwODYsIDAwCi18CS4uLiBmdW5jdGlvbiBjb2RlIC4uLgotfAlsZWF2ZQotfAlyZXRmIFhYWFgKLSAgVGhpcyBkb2VzIG1vc3RseSB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IGFsc28gYWRkcyAweDg2IGJ5dGVzIG9mCi0gIHN0YWNrc3RvcmFnZSwgd2hpY2ggaXMgYWNjZXNzZWQgdXNpbmcgW2JwLXh4XS4KLSAgQmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiwgYXJndW1lbnRzIGFyZSBwdXNoZWQgb24gdGhlIHN0YWNrIHVzaW5nIHNvbWV0aGluZwotICBsaWtlIHRoaXM6Ci18CXB1c2ggd29yZCBwdHIgW2JwLTAyXQk8LSB3aWxsIGJlIGF0IFticCs4XQotfAlwdXNoIGRpCQkJPC0gd2lsbCBiZSBhdCBbYnArNl0KLXwJY2FsbCBLRVJORUwuTFNUUkxFTgotICBIZXJlIGZpcnN0IHRoZSBzZWxlY3RvciBhbmQgdGhlbiB0aGUgb2Zmc2V0IHRvIHRoZSBwYXNzZWQgc3RyaW5nIGFyZSBwdXNoZWQuCi0KLVNhbXBsZSBkZWJ1Z2dpbmcgc2Vzc2lvbjoKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICBMZXQncyBkZWJ1ZyB0aGUgaW5mYW1vdXMgV29yZCBTSEFSRS5FWEUgbWVzc2FnZWJveDogCi0KLXxtYXJjdXNAamV0ICQgd2luZSB3aW53b3JkLmV4ZQotfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18ICAgICAgICAgICAgfCAhICBZb3UgbXVzdCBsZWF2ZSBXaW5kb3dzIGFuZCBsb2FkIFNIQVJFLkVYRXwKLXwgICAgICAgICAgICB8ICAgIGJlZm9yZSBzdGFydGluZyBXb3JkLiAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotfG1hcmN1c0BqZXQgJCB3aW5lIHdpbndvcmQuZXhlIC1kZWJ1Z21zZyArcmVsYXkgLWRlYnVnCi18Q2FsbFRvMzIod25kcHJvYz0weDQwMDY1YmMwLGh3bmQ9MDAwMDAxYWMsbXNnPTAwMDAwMDgxLHdwPTAwMDAwMDAwLGxwPTAwMDAwMDAwKQotfFdpbjE2IHRhc2sgJ3dpbndvcmQnOiBCcmVha3BvaW50IDEgYXQgMHgwMWQ3OjB4MDAxYQotfENhbGxUbzE2KGZ1bmM9MDEyNzowMDcwLGRzPTA5MjcpCi18Q2FsbCBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldD0wMGI3OjE0NTYgZHM9MDkyNwotfFJldCAgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXR2YWw9MHg4NjcyIHJldD0wMGI3OjE0NTYgZHM9MDkyNwotfENhbGxUbzE2KGZ1bmM9MDFkNzowMDFhLGRzPTA5MjcpCi18ICAgICBBWD0wMDAwIEJYPTNjYjQgQ1g9MWY0MCBEWD0wMDAwIFNJPTAwMDAgREk9MDkyNyBCUD0wMDAwIEVTPTExZjcKLXxMb2FkaW5nIHN5bWJvbHM6IC9ob21lL21hcmN1cy93aW5lL3dpbmUuLi4KLXxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMSBhdCAweDAxZDc6MHgwMDFhCi18SW4gMTYgYml0IG1vZGUuCi18V2luZS1kYmc+YnJlYWsgTWVzc2FnZUJveEEgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIFNldCBCcmVha3BvaW50Ci18QnJlYWtwb2ludCAyIGF0IDB4NDAxODkxMDAgKE1lc3NhZ2VCb3hBIFttc2dib3guYzoxOTBdKQotfFdpbmUtZGJnPmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIENvbnRpbnVlCi18Q2FsbCBLRVJORUwuOTE6IElOSVRUQVNLKCkgcmV0PTAxNTc6MDAyMiBkcz0wOGE3Ci18ICAgICBBWD0wMDAwIEJYPTNjYjQgQ1g9MWY0MCBEWD0wMDAwIFNJPTAwMDAgREk9MDhhNyBFUz0xMWQ3IEVGTD0wMDAwMDI4NgotfENhbGxUbzE2KGZ1bmM9MDkwZjowODVjLGRzPTBkY2YsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDgwMCwweDAwMDAsMHgwMDAwLDB4MGRjZikKLXwuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LS0tLS0gTXVjaCBkZWJ1Z291dHB1dAotfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMCkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERyaXZlIDAgKEE6KQotfFJldCAgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKCkgcmV0dmFsPTB4MDAwMiByZXQ9MDYwZjowOTdiIGRzPTA5MjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX1JFTU9WRUFCTEUKLQkJCQkJCShJdCBpcyBhIGZsb3BweSBkaXNrZHJpdmUuKQotCi18Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAxKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMSAoQjopCi18UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAwIHJldD0wNjBmOjA5N2IgZHM9MDkyNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiAgRFJJVkVfQ0FOTk9UREVURVJNSU5FCi0JCQkJCQkoSSBkb24ndCBoYXZlIGRyaXZlIEI6IGFzc2lnbmVkKQotCi18Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAyKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eIERyaXZlIDIgKEM6KQotfFJldCAgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKCkgcmV0dmFsPTB4MDAwMyByZXQ9MDYwZjowOTdiIGRzPTA5MjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRFJJVkVfRklYRUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpZmllZCBhcyBhIGhhcmRkaXNrKQotCi18Q2FsbCBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgweDAwYzMsMHgwOTI3ODM2NCJkb2MiLDB4MDAwMCwwOTI3OjgyNDgpIHJldD0wNjBmOjA5YjEgZHM9MDkyNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICAgICAgICAgICBeXl5eXiAgICAgICAgXl5eXl5eXl5eCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8YnVmZmVyIGZvciBmbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dGVtcG9yYXJ5IG5hbWUgfmRvY1hYWFgudG1wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Rm9yY2UgdXNlIG9mIERyaXZlIEM6LgotCi18V2FybmluZzogR2V0VGVtcEZpbGVOYW1lIHJldHVybnMgJ0M6fmRvYzkyODEudG1wJywgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJlIHdyaXRlYWJsZS4KLXxQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgaWYgdGhpcyBnZW5lcmF0ZXMgYSBmYWlsdXJlLgotCi1XaG9vcHMsIGl0IGV2ZW4gZGV0ZWN0cyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyEKLQotfFJldCAgS0VSTkVMLjk3OiBHRVRURU1QRklMRU5BTUUoKSByZXR2YWw9MHg5MjgxIHJldD0wNjBmOjA5YjEgZHM9MDkyNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIFRlbXBvcmFyeSBzdG9yYWdlIElECi0KLXxDYWxsIEtFUk5FTC43NDogT1BFTkZJTEUoMHgwOTI3ODI0OCJDOn5kb2M5MjgxLnRtcCIsMDkyNzo4MmRhLDB4MTAxMikgcmV0PTA2MGY6MDlkOCBkcz0wOTI3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eIF5eXl5eXl5eXiBeXl5eXl5eCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZmlsZW5hbWUgICAgICAgIHxPRlNUUlVDVCB8b3BlbiBtb2RlOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRl9DUkVBVEV8T0ZfU0hBUkVfRVhDTFVTSVZFfE9GX1JFQURXUklURQotCi1UaGlzIGZhaWxzLCBzaW5jZSBteSBDOiBkcml2ZSBpcyBpbiB0aGlzIGNhc2UgbW91bnRlZCByZWFkb25seS4KLQotfFJldCAgS0VSTkVMLjc0OiBPUEVORklMRSgpIHJldHZhbD0weGZmZmYgcmV0PTA2MGY6MDlkOCBkcz0wOTI3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBIRklMRV9FUlJPUjE2LCB5ZXMsIGl0IGZhaWxlZC4KLQotfENhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDA5Mjc4Mzc2IlNpZSBt/HNzZW4gV2luZG93cyB2ZXJsYXNzZW4gdW5kIFNIQVJFLkVYRSBsYWRlbiBiZXZvciBTaWUgV29yZCBzdGFydGVuLiIsMHgwMDAwMDAwMCwweDEwMzApIHJldD0wNjBmOjA4NGYgZHM9MDkyNwotICAgICAgICAgICAKLUFuZCBNZXNzYWdlQm94J2VkLgotCi18U3RvcHBlZCBvbiBicmVha3BvaW50IDIgYXQgMHg0MDE4OTEwMCAoTWVzc2FnZUJveEEgW21zZ2JveC5jOjE5MF0pCi18MTkwICAgICB7CQk8LSB0aGUgc291cmNlbGluZQotSW4gMzIgYml0IG1vZGUuCi1XaW5lLWRiZz4KLQotCVRoZSBjb2RlIHNlZW1zIHRvIGZpbmQgYSB3cml0ZWFibGUgaGFyZGRpc2sgYW5kIHRyaWVzIHRvIGNyZWF0ZSBhIGZpbGUKLQl0aGVyZS4gVG8gd29yayBhcm91bmQgdGhpcyBidWcsIHlvdSBjYW4gZGVmaW5lIEM6IGFzIGEgbmV0d29ya2RyaXZlLAotCXdoaWNoIGlzIGlnbm9yZWQgYnkgdGhlIGNvZGUgYWJvdmUuCi0KLVdyaXR0ZW4gYnkgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+LAotYWRkaXRpb25zIHdlbGNvbWUuCi0tLS0tLS0tCi0KLUhlcmUgYXJlIHNvbWUgdXNlZnVsIGRlYnVnZ2luZyB0aXBzLCBhZGRlZCBieSBBbmRyZWFzIE1vaHI6Ci0KLQotYSkgSWYgeW91IGhhdmUgYSBwcm9ncmFtIGNyYXNoaW5nIGF0IHN1Y2ggYW4gZWFybHkgbG9hZGVyIHBoYXNlIHRoYXQgeW91IGNhbid0Ci11c2UgdGhlIFdpbmUgZGVidWdnZXIgbm9ybWFsbHksIGJ1dCBXaW5lIGFscmVhZHkgZXhlY3V0ZXMgdGhlIHByb2dyYW0ncwotc3RhcnQgY29kZSwgdGhlbiB5b3UgbWF5IHVzZSBhIHNwZWNpYWwgdHJpY2s6Ci1Zb3Ugc2hvdWxkIGRvIGEKLXdpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtCi10byBnZXQgYSBsaXN0aW5nIG9mIHRoZSBmdW5jdGlvbnMgdGhlIHByb2dyYW0gY2FsbHMgaW4gaXRzIHN0YXJ0IGZ1bmN0aW9uLgotTm93IHlvdSBkbyBhCi13aW5lIC1kZWJ1ZyB3aW5maWxlLmV4ZQotVGhpcyB3YXksIHlvdSBnZXQgaW50byBXaW5lLWRiZy4gTm93IHlvdSBjYW4gc2V0IGEgYnJlYWtwb2ludCBvbiBhbnkKLWZ1bmN0aW9uIHRoZSBwcm9ncmFtIGNhbGxzIGluIHRoZSBzdGFydCBmdW5jdGlvbiBhbmQganVzdCB0eXBlICJjIiB0byBieXBhc3MKLXRoZSBldmVudHVhbCBjYWxscyBvZiBXaW5maWxlIHRvIHRoaXMgZnVuY3Rpb24gdW50aWwgeW91IGFyZSBmaW5hbGx5IGF0IHRoZQotcGxhY2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgY3Jhc2hpbmcgc3RhcnQgZnVuY3Rpb24uCi1Ob3cgeW91IGNhbiBwcm9jZWVkIHdpdGggeW91ciBkZWJ1Z2dpbmcgYXMgdXN1YWwuCi0KLQotYikgSWYgeW91IHRyeSB0byBydW4gYSBwcm9ncmFtIGFuZCBpdCBxdWl0cyBhZnRlciBzaG93aW5nIGFuIGVycm9yIG1lc3NhZ2Vib3gsCi10aGUgcHJvYmxlbSBjYW4gdXN1YWxseSBiZSBpZGVudGlmaWVkIGluIHRoZSByZXR1cm4gdmFsdWUgb2Ygb25lIG9mIHRoZQotZnVuY3Rpb25zIGV4ZWN1dGVkIGJlZm9yZSBNZXNzYWdlQm94KCkuCi1UaGF0J3Mgd2h5IHlvdSBzaG91bGQgcmUtcnVuIHRoZSBwcm9ncmFtIHdpdGggZS5nLgotd2luZSAtZGVidWdtc2cgK3JlbGF5IDxwcm9ncmFtIG5hbWU+ICY+cmVsbXNnCi1UaGVuIGRvIGEgIm1vcmUgcmVsbXNnIiBhbmQgc2VhcmNoIGZvciB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgY2FsbCB0byB0aGUgc3RyaW5nICJNRVNTQUdFQk9YIi4KLVRoaXMgaXMgYSBsaW5lIGxpa2UKLUNhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDAxZmYxMjQ2ICJSdW50aW1lIGVycm9yIDIxOSBhdCAwMDA0OjEwNTYuIiwweDAwMDAwMDAwLDB4MTAxMCkgcmV0PTAxZjc6MjE2MCBkcz0wMWZmCi0KLUluIG15IGV4YW1wbGUgdGhlIGxpbmVzIGJlZm9yZSB0aGUgY2FsbCB0byBNZXNzYWdlQm94KCkgbG9vayBsaWtlIHRoYXQ6Ci0KLUNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzNDcpIHJldD0wMWNmOjEwMzMgZHM9MDFmZgotQ2FsbFRvMTYoZnVuYz0wMzNmOjAwNzIsZHM9MDFmZiwweDAwMDApCi1SZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwMzMgZHM9MDFmZgotQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDM2ZikgcmV0PTAxY2Y6MTA0MyBkcz0wMWZmCi1DYWxsVG8xNihmdW5jPTAzNjc6MDA3Mixkcz0wMWZmLDB4MDAwMCkKLVJldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTA0MyBkcz0wMWZmCi1DYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzFmKSByZXQ9MDFjZjoxMDVjIGRzPTAxZmYKLUNhbGxUbzE2KGZ1bmM9MDMxNzowMDcyLGRzPTAxZmYsMHgwMDAwKQotUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDVjIGRzPTAxZmYKLUNhbGwgVVNFUi4xNzE6IFdJTkhFTFAoMHgwMmFjLDB4MDFmZjA1YjQgIkNPTUVULkhMUCIsMHgwMDAyLDB4MDAwMDAwMDApIHJldD0wMWNmOjEwNzAgZHM9MDFmZgotQ2FsbFRvMTYoZnVuYz0wMTE3OjAwODAsZHM9MDFmZikKLUNhbGwgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXQ9MDBhNzowYTJkIGRzPTAwMmIKLVJldCAgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXR2YWw9MHgwMDAwIHJldD0wMGE3OjBhMmQgZHM9MDAyYgotUmV0ICBVU0VSLjE3MTogV0lOSEVMUCgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTA3MCBkcz0wMWZmCi1DYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMWJlKSByZXQ9MDFkZjozZTI5IGRzPTAxZmYKLVJldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDAgcmV0PTAxZGY6M2UyOSBkcz0wMWZmCi1DYWxsIEtFUk5FTC41MjogRlJFRVBST0NJTlNUQU5DRSgweDAyY2YwMGJhKSByZXQ9MDFmNzoxNDYwIGRzPTAxZmYKLVJldCAgS0VSTkVMLjUyOiBGUkVFUFJPQ0lOU1RBTkNFKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFmNzoxNDYwIGRzPTAxZmYKLUNhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDAxZmYxMjQ2ICJSdW50aW1lIGVycm9yIDIxOSBhdCAwMDA0OjEwNTYuIiwweDAwMDAwMDAwLDB4MTAxMCkgcmV0PTAxZjc6MjE2MCBkcz0wMWZmCi0KLUkgdGhpbmsgdGhhdCB0aGUgY2FsbCB0byBNZXNzYWdlQm94KCkgaW4gdGhpcyBleGFtcGxlIGlzIF9ub3RfIGNhdXNlZAotYnkgYSB3cm9uZyByZXN1bHQgdmFsdWUgb2Ygc29tZSBwcmV2aW91c2x5IGV4ZWN1dGVkIGZ1bmN0aW9uIChpdCdzCi1oYXBwZW5pbmcgcXVpdGUgb2Z0ZW4gbGlrZSB0aGF0KSwgYnV0IGluc3RlYWQgdGhlIG1lc3NhZ2Vib3ggY29tcGxhaW5zCi1hYm91dCBhIHJ1bnRpbWUgZXJyb3IgYXQgMHgwMDA0OjB4MTA1Ni4KLQotQXMgdGhlIHNlZ21lbnQgdmFsdWUgb2YgdGhlIGFkZHJlc3MgaXMgb25seSAiNCIsIEkgdGhpbmsgdGhhdCB0aGF0IGlzCi1vbmx5IGFuIGludGVybmFsIHByb2dyYW0gdmFsdWUuIEJ1dCB0aGUgb2Zmc2V0IGFkZHJlc3MgcmV2ZWFscyBzb21ldGhpbmcKLXF1aXRlIGludGVyZXN0aW5nOgotCi1PZmZzZXQgMTA1NiBpcyBfdmVyeV8gY2xvc2UgdG8gdGhlIHJldHVybiBhZGRyZXNzIG9mIEZSRUVMSUJSQVJZKCk6Ci0KLUNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzMWYpIHJldD0wMWNmOjEwNWMgZHM9MDFmZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgotUHJvdmlkZWQgdGhhdCBzZWdtZW50IDB4MDAwNCBpcyBpbmRlZWQKLXNlZ21lbnQgMHgxY2YsIHdlIG5vdyB3ZSBjYW4gdXNlIElEQSAoYXZhaWxhYmxlIGF0Ci1mdHA6Ly9mdHAudW5pLWtvZWxuLmRlL3BjL21zZG9zL3Byb2dyYW1taW5nL2Fzc2VtYmxlci9pZGEzNWJ4LnppcCkKLXRvIGRpc2Fzc2VtYmxlIHRoZSBwYXJ0IHRoYXQgY2F1c2VkIHRoZSBlcnJvci4gV2UganVzdCBoYXZlIHRvIGZpbmQKLXRoZSBhZGRyZXNzIG9mIHRoZSBjYWxsIHRvIEZyZWVMaWJyYXJ5KCkuIFNvbWUgbGluZXMgYmVmb3JlIHRoYXQgdGhlCi1ydW50aW1lIGVycm9yIG9jY3VycmVkLiAgQnV0IGJlIGNhcmVmdWwgISBJbiBzb21lIGNhc2VzIHlvdSBkb24ndCBoYXZlCi10byBkaXNhc3NlbWJsZSB0aGUgbWFpbiBwcm9ncmFtLCBidXQgaW5zdGVhZCBzb21lIERMTCBjYWxsZWQgYnkgaXQgaW4KLW9yZGVyIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGxhY2Ugd2hlcmUgdGhlIHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQuIFRoYXQKLWNhbiBiZSBkZXRlcm1pbmVkIGJ5IGZpbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGUgc2VnbWVudCB2YWx1ZSAoaW4gdGhpcwotY2FzZSAweDFjZikuCi0KLWMpIElmIHlvdSBoYXZlIGNyZWF0ZWQgYSByZWxheSBmaWxlIG9mIHNvbWUgY3Jhc2hpbmcgcHJvZ3JhbSBhbmQgd2FudCB0byBzZXQgYQotYnJlYWtwb2ludCBhdCBhIGNlcnRhaW4gbG9jYXRpb24gd2hpY2ggaXMgbm90IHlldCBhdmFpbGFibGUgYXMgdGhlCi1wcm9ncmFtIGxvYWRzIHRoZSBicmVha3BvaW50J3Mgc2VnbWVudCBkdXJpbmcgZXhlY3V0aW9uLAoteW91IG1heSBzZXQgYSBicmVha3BvaW50IHRvIEdldFZlcnNpb24xNi8zMiBhcyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZAotdmVyeSBvZnRlbi4KLVRoZW4gZG8gYSAiYyIgdW50aWwgeW91IGFyZSBhYmxlIHRvIHNldCB0aGlzIGJyZWFrcG9pbnQgd2l0aG91dCBlcnJvciBtZXNzYWdlLgotCi1kKSBTb21lIHVzZWZ1bCBwcm9ncmFtczoKLUlEQTogZnRwOi8vZnRwLnVuaS1rb2Vsbi5kZS9wYy9tc2Rvcy9wcm9ncmFtbWluZy9hc3NlbWJsZXIvaWRhMzVieC56aXAKLSpWZXJ5KiBnb29kIERPUyBkaXNhc3NlbWJsZXIgISBJdCdzIGJhZGx5IG5lZWRlZCBmb3IgZGVidWdnaW5nIFdpbmUgc29tZXRpbWVzLgotCi1YUkFZOiBmdHA6Ly9mdHAudGgtZGFybXN0YWR0LmRlL3B1Yi9tYWNoaW5lcy9tcy1kb3MvU2ltVGVsL21zZG9zL2FzbXV0aWwveHJheTE1LnppcAotVHJhY2VzIERPUyBjYWxscyAoSW50IDIxaCwgRFBNSSwgLi4uKS4gVXNlIGl0IHdpdGggV2luZG93cyB0byBjb3JyZWN0Ci1maWxlIG1hbmFnZW1lbnQgcHJvYmxlbXMgZXRjLgotCi1wZWR1bXA6IGh0dHA6Ly9vYWsub2FrbGFuZC5lZHUvcHViL3NpbXRlbG5ldC93aW45NS9wcm9nL3BlZHVtcC56aXAKLUR1bXBzIHRoZSBpbXBvcnRzIGFuZCBleHBvcnRzIG9mIGEgUEUgKFBvcnRhYmxlIEV4ZWN1dGFibGUpIERMTC4KLQotCi1Tb21lIGJhc2ljIGRlYnVnZ2VyIHVzYWdlczoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1BZnRlciBzdGFydGluZyB5b3UgcHJvZ3JhbSB3aXRoCi0gIHdpbmUgLWRlYnVnIG15cHJvZy5leGUKLXRoZSBwcm9ncmFtIGxvYWRzIGFuZCB5b3UgZ2V0IGEgcHJvbXB0IGF0IHRoZSBwcm9ncmFtIHN0YXJ0aW5nIHBvaW50LgotVGhlbiB5b3UgY2FuIHNldCBicmVha3BvaW50czoKLSAgYiBSb3V0aW5lTmFtZSAgICAgIChieSBvdXRpbmUgbmFtZSkgT1IKLSAgYiAqMHg4MTI1NzUgICAgICAgIChieSBhZGRyZXNzKQotVGhlbiB5b3UgaGl0ICdjJyAoY29udGludWUpIHRvIHJ1biB0aGUgcHJvZ3JhbS4gSXQgc3RvcHMgYXQKLXRoZSBicmVha3BvaW50LiBZb3UgY2FuIHR5cGUKLSAgc3RlcCAgICAgICAgICAgICAgICh0byBzdGVwIG9uZSBsaW5lKSBPUgotICBzdGVwaSAgICAgICAgICAgICAgKHRvIHN0ZXAgb25lIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gYXQgYSB0aW1lOwotICAgICAgICAgICAgICAgICAgICAgIGhlcmUsIGl0IGhlbHBzIHRvIGtub3cgdGhlIGJhc2ljIDM4NgotICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uIHNldCkKLSAgaW5mbyByZWcgICAgICAgICAgICh0byBzZWUgcmVnaXN0ZXJzKQotICBpbmZvIHN0YWNrICAgICAgICAgKHRvIHNlZSBoZXggdmFsdWVzIGluIHRoZSBzdGFjaykKLSAgaW5mbyBsb2NhbCAgICAgICAgICh0byBzZWUgbG9jYWwgdmFyaWFibGVzKQotICBsaXN0IDxsaW5lIG51bWJlcj4gKHRvIGxpc3Qgc291cmNlIGNvZGUpCi0gIHggPHZhcmlhYmxlIG5hbWU+ICAodG8gZXhhbWluZSBhIHZhcmlhYmxlOyBvbmx5IHdvcmtzIGlmIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb24pCi0gIHggMHg0MjY5OTc4ICAgICAgICAodG8gZXhhbWluZSBhIG1lbW9yeSBsb2NhdGlvbikKLSAgPyAgICAgICAgICAgICAgICAgIChoZWxwKQotICBxICAgICAgICAgICAgICAgICAgKHF1aXQpCi1CeSBoaXR0aW5nIEVudGVyLCB5b3UgcmVwZWF0IHRoZSBsYXN0IGNvbW1hbmQuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2RlYnVnZ2luZy5zZ21sIGIvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQxNjEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcuc2dtbApAQCAtMCwwICsxLDE1NTYgQEAKKyAgPGNoYXB0ZXIgaWQ9ImRlYnVnZ2luZyI+CisgICAgPHRpdGxlPkRlYnVnZ2luZyBXaW5lPC90aXRsZT4KKworICAgIDxzZWN0MSBpZD0iZGVidWctbXNnIj4KKyAgICAgIDx0aXRsZT5EZWJ1ZyBNZXNzYWdlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IERpbWl0cmllIE8uIFBhdW4gPGVtYWlsPmRpbWlAY3MudG9yb250by5lZHU8L2VtYWlsPiwgMjggTWFyIDE5OTgKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUKKyAgICAgICAgICBzdGFibGUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgaW4tbWVtb3J5IG1lc3NhZ2UKKyAgICAgICAgICBjb25zdHJ1Y3Rpb24gZnVuY3Rpb25zLiBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZgorICAgICAgICAgIHdvcmsgdG8gYmUgZG9uZSB0byBwb2xpc2ggdGhpbmdzIHVwLiBUbyBtYWtlIG15IGxpZmUKKyAgICAgICAgICBlYXNpZXIsIHBsZWFzZSBmb2xsb3cgdGhlIGd1aWRlbGluZXMgZGVzY3JpYmVkIGluIHRoaXMKKyAgICAgICAgICBkb2N1bWVudC4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbm90ZT4KKworICAgICAgPGltcG9ydGFudD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUmVhZCB0aGlzIGRvY3VtZW50IGJlZm9yZSB3cml0aW5nIG5ldyBjb2RlLiBETyBOT1QgVVNFCisgICAgICAgICAgPGZ1bmN0aW9uPmZwcmludGY8L2Z1bmN0aW9uPiAgKG9yCisgICAgICAgICAgPGZ1bmN0aW9uPnByaW50ZjwvZnVuY3Rpb24+KSB0byBvdXRwdXQgdGhpbmdzLiBBbHNvLCBpbnN0ZWFkCisgICAgICAgICAgb2Ygd3JpdGluZyAgRklYTUVzIGluIHRoZSBzb3VyY2UsIG91dHB1dCBhIEZJWE1FIG1lc3NhZ2UgaWYKKyAgICAgICAgICB5b3UgY2FuLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCwgdGhlcmUgaXMgYSAiU3R5bGUgR3VpZGUiIGZvcgorICAgICAgICAgIGRlYnVnZ2luZyBtZXNzYWdlcy4gUGxlYXNlIHJlYWQgaXQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvaW1wb3J0YW50PgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgY2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlcmUgYXJlIDQgdHlwZXMgKG9yIGNsYXNzZXMpIG9mIGRlYnVnZ2luZyBtZXNzYWdlczoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD5GSVhNRTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1lc3NhZ2VzIGluIHRoaXMgY2xhc3MgcmVsYXRlIHRvIGJlaGF2aW9yIG9mIFdpbmUgdGhhdAorICAgICAgICAgICAgICAgIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gc3RhbmRhcmQgV2luZG93cyBiZWhhdmlvciBhbmQKKyAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBmaXhlZC4gCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+RXhhbXBsZXM6IHN0dWJzLCBzZW1pLWltcGxlbWVudGVkIGZlYXR1cmVzLCBldGMuPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+RVJSPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWVzc2FnZXMgaW4gdGhpcyBjbGFzcyByZWxhdGUgdG8gc2VyaW91cyBlcnJvcnMgaW4KKyAgICAgICAgICAgICAgICBXaW5lLiBUaGlzIHNvcnQgb2YgbWVzc2FnZXMgYXJlIGNsb3NlIHRvIGFzc2VydHMgLS0KKyAgICAgICAgICAgICAgICB0aGF0IGlzLCB5b3Ugc2hvdWxkIG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgY29kZSBkZXRlY3RzIGEgY29uZGl0aW9uIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiBJbgorICAgICAgICAgICAgICAgIG90aGVyIHdvcmRzLCBpbXBvcnRhbnQgdGhpbmdzIHRoYXQgYXJlIG5vdCB3YXJuaW5ncworICAgICAgICAgICAgICAgIChzZWUgYmVsb3cpLCBhcmUgZXJyb3JzLiAKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGFtcGxlczogdW5leHBlY3RlZCBjaGFuZ2UgaW4gaW50ZXJuYWwgc3RhdGUsIGV0Yy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+V0FSTjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGFyZSB3YXJuaW5nIG1lc3NhZ2VzLiBZb3Ugc2hvdWxkIHJlcG9ydCBhCisgICAgICAgICAgICAgICAgd2FybmluZyB3aGVuIHNvbWV0aGluZyB1bndhbnRlZCBoYXBwZW4gYnV0IHRoZQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJlaGF2ZXMgcHJvcGVybHkuIFRoYXQgaXMsIG91dHB1dCBhIHdhcm5pbmcKKyAgICAgICAgICAgICAgICB3aGVuIHlvdSBlbmNvdW50ZXIgc29tZXRoaW5nIHVuZXhwZWN0ZWQgKGV4OiBjb3VsZCBub3QKKyAgICAgICAgICAgICAgICBvcGVuIGEgZmlsZSkgYnV0IHRoZSBmdW5jdGlvbiBkZWFscyBjb3JyZWN0bHkgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBzaXR1YXRpb24gKHRoYXQgaXMsIGFjY29yZGluZyB0byB0aGUgZG9jcykuIElmIHlvdSBkbworICAgICAgICAgICAgICAgIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIGl0LCBvdXRwdXQgYSBmaXhtZS4gCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRXhhbXBsZXM6IGZhaWwgdG8gYWNjZXNzIGEgcmVzb3VyY2UgcmVxdWlyZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYXBwLCBldGMuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlRSQUNFPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgYXJlIGRldGFpbGVkIGRlYnVnZ2luZyBtZXNzYWdlcyB0aGF0IGFyZSBtYWlubHkKKyAgICAgICAgICAgICAgICB1c2VmdWwgIHRvIGRlYnVnIGEgY29tcG9uZW50LiBUaGVzZSBhcmUgdXN1YWxseSB0dXJuZWQKKyAgICAgICAgICAgICAgICBvZmYuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRXhhbXBsZXM6IGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGRvZXMgbm90IGZhbGwgaW4gb25lIG9mCisgICAgICAgICAgICAgICAgdGhlIGFib3ZlIG1lbnRpb25lZCBjYXRlZ29yaWVzIGFuZCB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgICAgICAgICAgIG5lZWQgdG8ga25vdyBhYm91dCBpdC4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHVzZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHR1cm4gb24gb3Igb2ZmIG1lc3NhZ2VzIG9mIGEKKyAgICAgICAgICBwYXJ0aWN1bGFyIHR5cGUuIFlvdSBjYW4gZXhwZWN0IHRoZSBmb2xsb3dpbmcgcGF0dGVybnMgb2YKKyAgICAgICAgICB1c2FnZSAoYnV0IG5vdGUgdGhhdCAgYW55IGNvbWJpbmF0aW9uIGlzIHBvc3NpYmxlKToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICB3aGVuIHlvdSBkZWJ1ZyBhIGNvbXBvbmVudCwgYWxsIHR5cGVzCisgICAgICAgICAgICAgICg8bGl0ZXJhbD5UUkFDRTwvbGl0ZXJhbD4sIDxsaXRlcmFsPldBUk48L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8bGl0ZXJhbD5FUlI8L2xpdGVyYWw+LCA8bGl0ZXJhbD5GSVhNRTwvbGl0ZXJhbD4pIHdpbGwKKyAgICAgICAgICAgICAgYmUgZW5hYmxlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBkdXJpbmcgdGhlIHByZS1hbHBoYSAobWF5YmUgYWxwaGEpIHN0YWdlIG9mIFdpbmUsIG1vc3QKKyAgICAgICAgICAgICAgbGlrZWx5IHRoZSA8bGl0ZXJhbD5UUkFDRTwvbGl0ZXJhbD4gY2xhc3Mgd2lsbCBiZQorICAgICAgICAgICAgICBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgYWxsIG90aGVycworICAgICAgICAgICAgICAoPGxpdGVyYWw+V0FSTjwvbGl0ZXJhbD4sIDxsaXRlcmFsPkVSUjwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgIDxsaXRlcmFsPkZJWE1FPC9saXRlcmFsPikgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgd2hlbiBXaW5lIHdpbGwgYmVjb21lIHN0YWJsZSwgbW9zdCBsaWtlbHkgdGhlCisgICAgICAgICAgICAgIDxsaXRlcmFsPlRSQUNFPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+V0FSTjwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgY2xhc3NlcyB3aWxsIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhbGwKKyAgICAgICAgICAgICAgPGxpdGVyYWw+RVJSPC9saXRlcmFsPnMgYW5kIDxsaXRlcmFsPkZJWE1FPC9saXRlcmFsPnMKKyAgICAgICAgICAgICAgd2lsbCBiZSBlbmFibGVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIGluIHNvbWUgaW5zdGFsbGF0aW9ucyB0aGF0IHdhbnQgdGhlIHNtYWxsZXN0IGZvb3RwcmludAorICAgICAgICAgICAgICBhbmQgd2hlcmUgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGlzIG9mIG5vIGludGVyZXN0LCAgYWxsCisgICAgICAgICAgICAgIGNsYXNzZXMgbWF5IGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE9mIGNvdXJzZSwgdGhlIHVzZXIgd2lsbCBoYXZlIHRoZSBydW50aW1lIGFiaWxpdHkgdG8KKyAgICAgICAgICBvdmVycmlkZSB0aGVzZSBkZWZhdWx0cy4gSG93ZXZlciwgdGhpcyBhYmlsaXR5IG1heSBiZSB0dXJuZWQKKyAgICAgICAgICBvZmYgYW5kIGNlcnRhaW4gY2xhc3NlcyBvZiBtZXNzYWdlcyBtYXkgYmUgY29tcGxldGVseQorICAgICAgICAgIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSB0byByZWR1Y2UgdGhlICBzaXplIG9mIFdpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkRlYnVnZ2luZyBjaGFubmVsczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWxzbywgd2UgZGl2aWRlIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgb24gYSBjb21wb25lbnQgYmFzaXMuCisgICAgICAgICAgRWFjaCBjb21wb25lbnQgaXMgYXNzaWduZWQgYSBkZWJ1Z2dpbmcgY2hhbm5lbC4gVGhlCisgICAgICAgICAgaWRlbnRpZmllciBvZiB0aGUgY2hhbm5lbCBtdXN0IGJlIGEgdmFsaWQgQyBpZGVudGlmaWVyIGJ1dAorICAgICAgICAgIG5vdGUgdGhhdCBpdCBtYXkgYWxzbyBiZSBhIHJlc2VydmVkIHdvcmQgbGlrZQorICAgICAgICAgIDx0eXBlPmludDwvdHlwZT4gb3IgPHR5cGU+c3RhdGljPC90eXBlPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFeGFtcGxlcyBvZiBkZWJ1Z2dpbmcgY2hhbm5lbHM6CisgICAgICAgICAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgICAgICAgICAgIDxtZW1iZXI+PGxpdGVyYWw+cmVnPC9saXRlcmFsPjwvbWVtYmVyPgorICAgICAgICAgICAgPG1lbWJlcj48bGl0ZXJhbD51cGRvd248L2xpdGVyYWw+PC9tZW1iZXI+CisgICAgICAgICAgICA8bWVtYmVyPjxsaXRlcmFsPnN0cmluZzwvbGl0ZXJhbD48L21lbWJlcj4KKyAgICAgICAgICA8L3NpbXBsZWxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2Ugd2lsbCByZWZlciB0byBhIGdlbmVyaWMgY2hhbm5lbCBhcyA8bGl0ZXJhbD54eHg8L2xpdGVyYWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxub3RlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZm9yIHRob3NlIHdobyBrbm93IHRoZSBvbGQgaW50ZXJmYWNlLCB0aGUgY2hhbm5lbC90eXBlIGlzCisgICAgICAgICAgICB3aGF0IGZvbGxvd2VkIHRoZSBfIGluIHRoZQorICAgICAgICAgICAgPGZ1bmN0aW9uPmRwcmludGZfeHh4PC9mdW5jdGlvbj4gc3RhdGVtZW50cy4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICB0byBvdXRwdXQgYSBtZXNzYWdlIG9uIHRoZSBkZWJ1Z2dpbmcgY2hhbm5lbAorICAgICAgICAgICAgPGxpdGVyYWw+cmVnPC9saXRlcmFsPiBpbiB0aGUgb2xkIGludGVyZmFjZSB5b3Ugd291bGQgaGFkCisgICAgICAgICAgICB0byB3cml0ZToKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZHByaW50Zl9yZWcoc3RkZGViLCAiQ291bGQgbm90IGFjY2VzcyBrZXkhXG4iKTsKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIG5ldyBpbnRlcmZhY2UsIHdlIGRyb3AgdGhlCisgICAgICAgICAgICA8bGl0ZXJhbD5zdGRkZWI8L2xpdGVyYWw+IGFzIGl0IGlzIGltcGxpY2l0LiBIb3dldmVyLCB3ZQorICAgICAgICAgICAgYWRkIGFuIG9ydGhvZ29uYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gdG8gdGhlIG1lc3NhZ2U6IGl0cworICAgICAgICAgICAgY2xhc3MuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgd2lsbCBhbGxvdyB1cyB0bworICAgICAgICAgICAgc2VsZWN0aXZlbHkgdHVybiBvbiBvciBvZmYgY2VydGFpbiBtZXNzYWdlcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgIHR5cGUgb2YgaW5mb3JtYXRpb24gdGhleSByZXBvcnQuIEZvciB0aGlzIHJlYXNvbiBpdCBpcworICAgICAgICAgICAgZXNzZW50aWFsIHRvIGNob29zZSB0aGUgcmlnaHQgY2xhc3MgZm9yIHRoZSBtZXNzYWdlLgorICAgICAgICAgICAgQW55aG93LCBzdXBwb3NlIHdlIGZpZ3VyZWQgdGhhdCB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlbG9uZworICAgICAgICAgICAgaW4gdGhlIDxsaXRlcmFsPldBUk48L2xpdGVyYWw+IGNsYXNzLCBzbyBpbiB0aGUgbmV3CisgICAgICAgICAgICBpbnRlcmZhY2UsIHlvdSB3cml0ZToKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorV0FSTihyZWcsICJDb3VsZCBub3QgYWNjZXNzIGtleSFcbiIpOworICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkhvdyB0byB1c2UgaXQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvLCB0byBvdXRwdXQgYSBtZXNzYWdlIChjbGFzcyA8bGl0ZXJhbD5ZWVk8L2xpdGVyYWw+KSBvbgorICAgICAgICAgIGNoYW5uZWwgPGxpdGVyYWw+eHh4PC9saXRlcmFsPiwgZG86CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgImRlYnVnLmgiCisKKy4uLi4KKworWVlZKHh4eCwgIiZsdDttZXNzYWdlJmd0OyIsIC4uLik7CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvbWUgZXhhbXBsZXMgZnJvbSB0aGUgY29kZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisjaW5jbHVkZSAiZGVidWcuaCIKKworLi4uCisKKyAgVFJBQ0UoY3J0ZGxsLCAiQ1JURExMX3NldGJ1ZihmaWxlICVwIGJ1ZiAlcCkiLCBmaWxlLCBidWYpOworCisgIFdBUk4oYXNwaSwgIkVycm9yIG9wZW5pbmcgZGV2aWNlIGVycm5vPSVkIiwgc2F2ZV9lcnJvcik7CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGRlY2xhcmUgYSBuZXcgZGVidWdnaW5nIGNoYW5uZWwsIHVzZSBpdCBpbgorICAgICAgICAgIHlvdXIgY29kZSBhbmQgdGhlbiBkbzoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorJXRvb2xzL21ha2VfZGVidWcKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiBXaW5lLiBOb3RlIHRoYXQgdGhpcyB3aWxsIHJlc3VsdCBpbgorICAgICAgICAgIGFsbW9zdCBjb21wbGV0ZSByZWNvbXBpbGF0aW9uIG9mIFdpbmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBsZWFzZSBwYXkgYXR0ZW50aW9uIHRvIHdoaWNoIGNsYXNzIHlvdSBhc3NpZ24gdGhlCisgICAgICAgICAgICAgICAgbWVzc2FnZS4gVGhlcmUgYXJlIG9ubHkgNCBjbGFzc2VzLCBzbyBpdCBpcyBub3QgaGFyZC4KKyAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGl0IGlzIGltcG9ydGFudCB0byBnZXQgaXQgcmlnaHQgaXMgdGhhdCB0b28KKyAgICAgICAgICAgICAgICBtdWNoIGluZm9ybWF0aW9uIGlzIG5vIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaWYKKyAgICAgICAgICAgICAgICB5b3UgcHV0IHRoaW5ncyBpbnRvIHRoZSA8bGl0ZXJhbD5XQVJOPC9saXRlcmFsPiBjbGFzcworICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIHJlYWxseSBiZSBpbiB0aGUgPGxpdGVyYWw+VFJBQ0U8L2xpdGVyYWw+CisgICAgICAgICAgICAgICAgY2xhc3MsIHRoZSAgb3V0cHV0IHdpbGwgYmUgdG9vIGJpZyBhbmQgdGhpcyB3aWxsIGZvcmNlCisgICAgICAgICAgICAgICAgdGhlIHVzZXIgdG8gIHR1cm4gd2FybmluZ3Mgb2ZmLiBCdXQgdGhpcyB3YXkgaGUgd2lsbAorICAgICAgICAgICAgICAgIGZhaWwgdG8gc2VlIHRoZSBpbXBvcnRhbnQgb25lcy4gQWxzbywgaWYgeW91IHB1dAorICAgICAgICAgICAgICAgIHdhcm5pbmdzIGludG8gdGhlIDxsaXRlcmFsPlRSQUNFPC9saXRlcmFsPiBjbGFzcyBsZXRzCisgICAgICAgICAgICAgICAgc2F5LCBoZSB3aWxsIG1vc3QgbGlrZWx5IG1pc3MgdGhvc2UgYmVjYXVzZSB1c3VhbGx5CisgICAgICAgICAgICAgICAgdGhlIDxsaXRlcmFsPlRSQUNFPC9saXRlcmFsPiBjbGFzcyBpcyB0dXJuZWQgb2ZmLiBBCisgICAgICAgICAgICAgICAgc2ltaWxhciBhcmd1bWVudCBjYW4gYmUgbWFkZSBpZiB5b3UgbWl4IGFueSBvdGhlciB0d28KKyAgICAgICAgICAgICAgICBjbGFzc2VzLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgbGluZXMgc2hvdWxkIGVuZCB3aXRoIGEgbmV3bGluZS4gSWYgeW91IGNhbiBOT1QKKyAgICAgICAgICAgICAgICBvdXRwdXQgZXZlcnl0aGluZyB0aGF0IHlvdSB3YW50IGluIHRoZSBsaW5lIHdpdGggb25seQorICAgICAgICAgICAgICAgIG9uZSBzdGF0ZW1lbnQsIHRoZW4geW91IG5lZWQgdG8gYnVpbGQgdGhlIHN0cmluZyBpbgorICAgICAgICAgICAgICAgIG1lbW9yeS4gUGxlYXNlIHJlYWQgdGhlIHNlY3Rpb24gYmVsb3cgIkluLW1lbW9yeQorICAgICAgICAgICAgICAgIG1lc3NhZ2VzIiBvbiB0aGUgcHJlZmVycmVkIHdheSB0byBkbyBpdC4gUExFQVNFIFVTRQorICAgICAgICAgICAgICAgIFRIQVQgSU5URVJGQUNFIFRPIEJVSUxEIE1FU1NBR0VTIElOIE1FTU9SWS4gVGhlIHJlYXNvbgorICAgICAgICAgICAgICAgIGlzIHRoYXQgd2UgYXJlIG5vdCBzdXJlIHRoYXQgd2UgbGlrZSBpdCBhbmQgaGF2aW5nCisgICAgICAgICAgICAgICAgZXZlcnl0aGluZyBpbiBvbmUgZm9ybWF0IHdpbGwgZmFjaWxpdGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAoYXV0b21hdGljKSB0cmFuc2xhdGlvbiB0byBhIGJldHRlciBpbnRlcmZhY2UuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+QXJlIHdlIGRlYnVnZ2luZz88L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRvIHRlc3Qgd2hldGhlciB0aGUgZGVidWdnaW5nIG91dHB1dCBvZiBjbGFzcworICAgICAgICAgIDxsaXRlcmFsPnl5eTwvbGl0ZXJhbD4gb24gY2hhbm5lbCA8bGl0ZXJhbD54eHg8L2xpdGVyYWw+IGlzCisgICAgICAgICAgZW5hYmxlZCwgdXNlOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitUUkFDRV9PTiAgdG8gdGVzdCBpZiBUUkFDRSBpcyBlbmFibGVkCitXQVJOX09OICAgdG8gdGVzdCBpZiBXQVJOIGlzIGVuYWJsZWQKK0ZJWE1FX09OICB0byB0ZXN0IGlmIEZJWE1FIGlzIGVuYWJsZWQKK0VSUl9PTiAgICB0byB0ZXN0IGlmIEVSUiBpcyBlbmFibGVkCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFeGFtcGxlczoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpZihUUkFDRV9PTihhdG9tKSl7CisgIC4uLmJsYWguLi4KK30KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgbm9ybWFsbHkgbmVlZCB0byB0ZXN0IG9ubHkgaWYKKyAgICAgICAgICAgIDxsaXRlcmFsPlRSQUNFX09OPC9saXRlcmFsPi4gQXQgcHJlc2VudCwgbm9uZSBvZiB0aGUgb3RoZXIKKyAgICAgICAgICAgIDMgdGVzdHMgKGV4Y2VwdCBmb3IgPGxpdGVyYWw+RVJSX09OPC9saXRlcmFsPiB3aGljaCBpcworICAgICAgICAgICAgdXNlZCBvbmx5IG9uY2UhKSBhcmUgdXNlZCBpbiBXaW5lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SW4tbWVtb3J5IG1lc3NhZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgTkVFRCB0byBidWlsZCB0aGUgbWVzc2FnZSBmcm9tIG11bHRpcGxlIGNhbGxzLCB5b3UKKyAgICAgICAgICBuZWVkIHRvICBidWlsZCBpdCBpbiBtZW1vcnkuIFRvIGRvIHRoYXQsIHlvdSBzaG91bGQgdXNlIHRoZQorICAgICAgICAgIGZvbGxvd2luZyBpbnRlcmZhY2U6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIGRlY2xhcmUgYSBzdHJpbmcgKHdoZXJlIHlvdSBhcmUgYWxsb3dlZCB0byBkZWNsYXJlIEMKKyAgICAgICAgICAgICAgdmFyaWFibGVzKSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZGJnX2RlY2xfc3RyKG5hbWUsIGxlbik7CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgIHN0cmluZyAoeW91IHNob3VsZCB1c2UgdGhlIGNoYW5uZWwgbmFtZSBvbiB3aGljaCB5b3UKKyAgICAgICAgICAgICAgYXJlIGdvaW5nIHRvIG91dHB1dCBpdCkKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBwcmludCBpbiBpdCB3aXRoOgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZHNwcmludGYobmFtZSwgIiZsdDttZXNzYWdlJmd0OyIsIC4uLik7CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICB3aGljaCBpcyBqdXN0IGxpa2UgYSA8ZnVuY3Rpb24+c3ByaW50ZjwvZnVuY3Rpb24+CisgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1dCBpbnN0ZWFkIG9mIGEgQyBzdHJpbmcgYXMgZmlyc3QgcGFyYW1ldGVyIGl0CisgICAgICAgICAgICAgIHRha2VzIHRoZSBuYW1lIHlvdSB1c2VkIHRvIGRlY2xhcmUgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgb2J0YWluIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIHdpdGg6IDxmdW5jdGlvbj5kYmdfc3RyKG5hbWUpPC9mdW5jdGlvbj4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICByZXNldCB0aGUgc3RyaW5nIChpZiB5b3Ugd2FudCB0byByZXVzZSBpdCB3aXRoKToKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZGJnX3Jlc2V0X3N0cihuYW1lKTsKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEV4YW1wbGUgKG1vZGlmaWVkIGZyb20gdGhlIGNvZGUpOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgc29tZV9mdW5jKHRhYnMpCit7CisgIElOVDMyIGk7CisgIExQSU5UMTYgcCA9IChMUElOVDE2KXRhYnM7CisgIGRiZ19kZWNsX3N0cihsaXN0Ym94LCAyNTYpOyAgICAgICAgICAgICAgICAgICAvKiBkZWNsYXJlIHRoZSBzdHJpbmcgKi8KKworICBmb3IgKGkgPSAwOyBpICZsdDsgZGVzY3ItJmd0O25iX3RhYnM7IGkrKykgeworICAgIGRlc2NyLSZndDt0YWJzW2ldID0gKnArKyZsdDsmbHQ7MTsgCisgICAgaWYoVFJBQ0lORyhsaXN0Ym94KSkgICAgICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgaW4gaXQgb25seSBpZgorICAgICAgZHNwcmludGYobGlzdGJveCwgIiVoZCAiLCBkZXNjci0mZ3Q7dGFic1tpXSk7IC8qIHdlIGFyZSBnb25uYSBvdXRwdXQgaXQgKi8KKyAgfQorICBUUkFDRShsaXN0Ym94LCAiTGlzdGJveCAlMDR4OiBzZXR0YWJzdG9wcyAlcyIsIAorCXduZC0mZ3Q7aHduZFNlbGYsIGRiZ19zdHIobGlzdGJveCkpOyAgICAgICAgLyogb3V0cHV0IHRoZSB3aG9sZSB0aGluZyAqLworfQorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgbmVlZCB0byB1c2UgaXQgdHdvIHRpbWVzIGluIHRoZSBzYW1lIHNjb3BlIGRvIGxpa2UKKyAgICAgICAgICB0aGlzOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgc29tZV9mdW5jKHRhYnMpCit7CisgIElOVDMyIGk7CisgIExQSU5UMTYgcCA9IChMUElOVDE2KXRhYnM7CisgIGRiZ19kZWNsX3N0cihsaXN0Ym94LCAyNTYpOyAgICAgICAgICAgICAgICAgICAvKiBkZWNsYXJlIHRoZSBzdHJpbmcgICAgICAqLworCisgIGZvciAoaSA9IDA7IGkgJmx0OyBkZXNjci0mZ3Q7bmJfdGFiczsgaSsrKSB7CisgICAgZGVzY3ItJmd0O3RhYnNbaV0gPSAqcCsrJmx0OyZsdDsxOyAgCisgICAgaWYoVFJBQ0lORyhsaXN0Ym94KSkgICAgICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgaW4gaXQgb25seSBpZgorICAgICAgZHNwcmludGYobGlzdGJveCwgIiVoZCAiLCBkZXNjci0mZ3Q7dGFic1tpXSk7IC8qIHdlIGFyZSBnb25uYSBvdXRwdXQgaXQgKi8KKyAgfQorICBUUkFDRShsaXN0Ym94LCAiTGlzdGJveCAlMDR4OiBzZXR0YWJzdG9wcyAlc1xuIiwgCisJd25kLSZndDtod25kU2VsZiwgZGJnX3N0cihsaXN0Ym94KSk7ICAgICAgICAvKiBvdXRwdXQgdGhlIHdob2xlIHRoaW5nICovCisKKyAgZGJnX3Jlc2V0X3N0cihsaXN0Ym94KTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAhISFyZXNldCB0aGUgc3RyaW5nISEhICovCisgIGZvciAoaSA9IDA7IGkgJmx0OyBkZXNjci0mZ3Q7ZXh0cmFpbmZvX25yOyBpKyspIHsKKyAgICBkZXNjci0mZ3Q7ZXh0cmFpbmZvID0gKnArMTsgCisgICAgaWYoVFJBQ0lORyhsaXN0Ym94KSkgICAgICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgaW4gaXQgb25seSBpZgorICAgICAgZHNwcmludGYobGlzdGJveCwiJTNkICIsZGVzY3ItJmd0O2V4dHJhaW5mbyk7IC8qIHdlIGFyZSBnb25uYSBvdXRwdXQgaXQgKi8KKyAgfQorCisgIFRSQUNFKGxpc3Rib3gsICJMaXN0Ym94ICUwNHg6IGV4dHJhaW5mbyAlc1xuIiwgCisJd25kLSZndDtod25kU2VsZiwgZGJnX3N0cihsaXN0Ym94KSk7ICAgICAgICAvKiBvdXRwdXQgdGhlIHdob2xlIHRoaW5nICovCisKK30KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgICA8aW1wb3J0YW50PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgSSBhbHJlYWR5IHN0YXRlZCwgSSBkbyBub3QgdGhpbmsgdGhpcyB3aWxsIGJlIHRoZQorICAgICAgICAgICAgdWx0aW1hdGUgaW50ZXJmYWNlIGZvciBidWlsZGluZyBpbi1tZW1vcnkgZGVidWdnaW5nCisgICAgICAgICAgICBtZXNzYWdlcy4gSW4gZmFjdCwgSSBkbyBoYXZlIGJldHRlciBpZGVhcyB3aGljaCBJIGhvcGUgdG8KKyAgICAgICAgICAgIGhhdmUgdGltZSB0byBpbXBsZW1lbnQgZm9yIHRoZSBuZXh0IHJlbGVhc2UuIEZvciB0aGlzCisgICAgICAgICAgICByZWFzb24sIHBsZWFzZSB0cnkgbm90IHRvIHVzZSBpdC4gSG93ZXZlciwgaWYgeW91IG5lZWQgdG8KKyAgICAgICAgICAgIG91dHB1dCBhIGxpbmUgaW4gbW9yZSB0aGFuIG9uZQorICAgICAgICAgICAgPGZ1bmN0aW9uPmRwcmludGZfeHh4PC9mdW5jdGlvbj4gY2FsbHMsIHRoZW4gVVNFIFRISVMKKyAgICAgICAgICAgIElOVEVSRkFDRS4gRE8gTk9UIHVzZSBvdGhlciBtZXRob2RzLiBUaGlzIHdheSwgSSB3aWxsCisgICAgICAgICAgICBlYXNpbHkgdHJhbnNsYXRlIGV2ZXJ5dGhpbmcgdG8gdGhlIG5ldyBpbnRlcmZhY2UgKHdoZW4gaXQKKyAgICAgICAgICAgIHdpbGwgYmVjb21lIGF2YWlsYWJsZSkuIFNvLCBpZiB5b3UgbmVlZCB0byB1c2UgaXQsIHRoZW4KKyAgICAgICAgICAgIGZvbGxvdyB0aGUgZm9sbG93aW5nIGd1aWRlbGluZXM6CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPndyYXAgY2FsbHMgdG8gPGZ1bmN0aW9uPmRzcHJpbnRmPC9mdW5jdGlvbj4gd2l0aCBhCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoraWYoWVlZKHh4eCkpCisgIGRzcHJpbnRmKHh4eCwuLi4pOworICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIGlmIHRoZSBjYWxsIHRvCisgICAgICAgICAgICAgICAgPGZ1bmN0aW9uPmRzcHJpbnRmPC9mdW5jdGlvbj4gaXMgbWFkZSBmcm9tIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gIHdoaWNoIHlvdSBrbm93IGlzIGNhbGxlZCBvbmx5IGlmCisgICAgICAgICAgICAgICAgPGZ1bmN0aW9uPllZWSh4eHgpPC9mdW5jdGlvbj4gaXMgdHJ1ZSwgZm9yIGV4YW1wbGUgaWYKKyAgICAgICAgICAgICAgICB5b3UgY2FsbCBpdCBvbmx5IGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitpZihZWVkoeHh4KSkKKyAgcHJpbnRfc29tZV9kZWJ1Z19pbmZvKCk7CisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIHRoZW4geW91IG5lZWQgbm90IChhbmQgc2hvdWxkIG5vdCkgd3JhcCBjYWxscyB0bworICAgICAgICAgICAgICAgIDxmdW5jdGlvbj5kc3ByaW50ZjwvZnVuY3Rpb24+IHdpdGggdGhlIGJlZm9yZQorICAgICAgICAgICAgICAgIG1lbnRpb25lZCA8ZnVuY3Rpb24+aWY8L2Z1bmN0aW9uPi4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgbmFtZSB0aGUgc3RyaW5nIEVYQUNUTFkgbGlrZSB0aGUgZGVidWdnaW5nIGNoYW5uZWwgb24KKyAgICAgICAgICAgICAgICB3aGljaCBpcyBnb2luZyB0byBiZSBvdXRwdXQuIFBsZWFzZSBzZWUgdGhlIGFib3ZlCisgICAgICAgICAgICAgICAgZXhhbXBsZS4gCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvaW1wb3J0YW50PgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+UmVzb3VyY2UgaWRlbnRpZmllcnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFJlc291cmNlIGlkZW50aWZpZXJzIGNhbiBiZSBlaXRoZXIgc3RyaW5ncyBvciBudW1iZXJzLiBUbworICAgICAgICAgIG1ha2UgbGlmZSBhIGJpdCBlYXNpZXIgZm9yIG91dHB1dHRpbmcgdGhlc2UgYmVhc3RzIChhbmQgdG8KKyAgICAgICAgICBoZWxwIHlvdSBhdm9pZCB0aGUgbmVlZCB0byBidWlsZCB0aGUgbWVzc2FnZSBpbiBtZW1vcnkpLCBJCisgICAgICAgICAgaW50cm9kdWNlZCBhIG5ldyBmdW5jdGlvbiBjYWxsZWQgPGZ1bmN0aW9uPmRlYnVncmVzPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gPGZpbGVuYW1lPmRlYnVnc3RyLmg8L2ZpbGVuYW1lPgorICAgICAgICAgIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorTFBTVFIgZGVidWdyZXMoY29uc3Qgdm9pZCAqaWQpOworICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJdCB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIHJlc291cmNlIGlkIGFuZCByZXR1cm5zIGEgbmljZWx5CisgICAgICAgICAgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgaWRlbnRpZmllci4gSWYgdGhlIGhpZ2ggd29yZCBvZiB0aGUKKyAgICAgICAgICBwb2ludGVyIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LCB0aGVuIGl0IGFzc3VtZXMgdGhhdCB0aGUKKyAgICAgICAgICBpZGVudGlmaWVyIGlzIGEgbnVtYmVyIGFuZCB0aHVzIHJldHVybnMgYSBzdHJpbmcgb2YgdGhlCisgICAgICAgICAgZm9ybToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisjeHh4eAorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB3aGVyZSA8bGl0ZXJhbD54eHh4PC9saXRlcmFsPiBhcmUgNCBoZXgtZGlnaXRzIHJlcHJlc2VudGluZworICAgICAgICAgIHRoZSBsb3cgd29yZCBvZiA8cGFyYW1ldGVyPmlkPC9wYXJhbWV0ZXI+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZSBoaWdoIHdvcmQgb2YgdGhlIHBvaW50ZXIgaXMgbm90IDxsaXRlcmFsPjA8L2xpdGVyYWw+LAorICAgICAgICAgIHRoZW4gaXQgYXNzdW1lcyB0aGF0IHRoZSBpZGVudGlmaWVyIGlzIGEgc3RyaW5nIGFuZCB0aHVzCisgICAgICAgICAgcmV0dXJucyBhIHN0cmluZyBvZiB0aGUgZm9ybToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisnJmx0O2lkZW50aWZpZXImZ3Q7JworICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaHVzLCB0byB1c2UgaXQsIGRvIHNvbWV0aGluZyBvbiB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisuLi4KKworICAgWVlZKHh4eCwgInJlc291cmNlIGlzICVzIiwgZGVidWdyZXMobXlyZXNvdXJjZSkpOworICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+VGhlIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZzwvcGFyYW1ldGVyPiBjb21tYW5kIGxpbmUgb3B0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTbywgdGhlIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZzwvcGFyYW1ldGVyPiBjb21tYW5kIGxpbmUKKyAgICAgICAgICBvcHRpb24gaGFzIGJlZW4gY2hhbmdlZCBhcyBmb2xsb3dzOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIHRoZSBuZXcgc3ludGF4IGlzOiA8cGFyYW1ldGVyPi0tZGVidWdtc2cKKyAgICAgICAgICAgICAgICBbeXl5XSN4eHhbLFt5eXkxXSN4eHgxXSo8L3BhcmFtZXRlcj4gd2hlcmUKKyAgICAgICAgICAgICAgPGxpdGVyYWw+IzwvbGl0ZXJhbD4gaXMgZWl0aGVyIDxsaXRlcmFsPis8L2xpdGVyYWw+IG9yCisgICAgICAgICAgICAgIDxsaXRlcmFsPi08L2xpdGVyYWw+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgd2hlbiB0aGUgb3B0aW9uYWwgY2xhc3MgYXJndW1lbnQgKDxsaXRlcmFsPnl5eTwvbGl0ZXJhbD4pCisgICAgICAgICAgICAgIGlzIG5vdCBwcmVzZW50LCB0aGVuIHRoZSBzdGF0ZW1lbnQgd2lsbAorICAgICAgICAgICAgICBlbmFibGUoPGxpdGVyYWw+KzwvbGl0ZXJhbD4pL2Rpc2FibGUoPGxpdGVyYWw+LTwvbGl0ZXJhbD4pCisgICAgICAgICAgICAgIGFsbCBtZXNzYWdlcyBmb3IgdGhlIGdpdmVuIGNoYW5uZWwgKDxsaXRlcmFsPnh4eDwvbGl0ZXJhbD4pCisgICAgICAgICAgICAgIG9uIGFsbCBjbGFzc2VzLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKy0tZGVidWdtc2cgK3JlZywtZmlsZQorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBlbmFibGVzIGFsbCBtZXNzYWdlcyBvbiB0aGUgPGxpdGVyYWw+cmVnPC9saXRlcmFsPgorICAgICAgICAgICAgICBjaGFubmVsIGFuZCBkaXNhYmxlcyBhbGwgbWVzc2FnZXMgb24gdGhlCisgICAgICAgICAgICAgIDxsaXRlcmFsPmZpbGU8L2xpdGVyYWw+IGNoYW5uZWwuIFRoaXMgaXMgc2FtZSBhcyB0aGUgb2xkCisgICAgICAgICAgICAgIHNlbWFudGljcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICB3aGVuIHRoZSBvcHRpb25hbCBjbGFzcyBhcmd1bWVudCAoPGxpdGVyYWw+eXl5PC9saXRlcmFsPikKKyAgICAgICAgICAgICAgaXMgcHJlc2VudCwgIHRoZW4gdGhlIHN0YXRlbWVudCB3aWxsIGVuYWJsZQorICAgICAgICAgICAgICAoPGxpdGVyYWw+KzwvbGl0ZXJhbD4pL2Rpc2FibGUoPGxpdGVyYWw+LTwvbGl0ZXJhbD4pCisgICAgICAgICAgICAgIG1lc3NhZ2VzIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbCAoPGxpdGVyYWw+eHh4PC9saXRlcmFsPikKKyAgICAgICAgICAgICAgb25seSBvbiB0aGUgZ2l2ZW4gY2xhc3MuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorLS1kZWJ1Z21zZyB0cmFjZStyZWcsd2Fybi1maWxlCisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIGVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgb24gdGhlIDxsaXRlcmFsPnJlZzwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgY2hhbm5lbCBhbmQgZGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyBvbiB0aGUKKyAgICAgICAgICAgICAgPGxpdGVyYWw+ZmlsZTwvbGl0ZXJhbD4gY2hhbm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBhbHNvLCB0aGUgcHNldWRvLWNoYW5uZWwgYWxsIGlzIGFsc28gc3VwcG9ydGVkIGFuZCBpdAorICAgICAgICAgICAgICBoYXMgdGhlICBpbnR1aXRpdmUgc2VtYW50aWNzOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHNjcmVlbj4KKyAgICAtLWRlYnVnbXNnICthbGwgICAgICAtLSBlbmFibGVzIGFsbCBkZWJ1ZyBtZXNzYWdlcworICAgIC0tZGVidWdtc2cgLWFsbCAgICAgIC0tIGRpc2FibGVzIGFsbCBkZWJ1ZyBtZXNzYWdlcyAgIAorICAgIC0tZGVidWdtc2cgeXl5K2FsbCAgIC0tIGVuYWJsZXMgZGVidWcgbWVzc2FnZXMgZm9yIGNsYXNzIHl5eSBvbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzLgorICAgIC0tZGVidWdtc2cgeXl5LWFsbCAgIC0tIGRpc2FibGVzIGRlYnVnIG1lc3NhZ2VzIGZvciBjbGFzcyB5eXkgb24gYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVscy4KKyAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxzY3JlZW4+CisgICAgLS1kZWJ1Z21zZyB3YXJuLWFsbCAgLS0gZGlzYWJsZXMgYWxsIHdhcm5pbmcgbWVzc2FnZXMuCisgICAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbHNvLCBub3RlIHRoYXQgYXQgdGhlIG1vbWVudDoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPnRoZSA8bGl0ZXJhbD5GSVhNRTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPkVSUjwvbGl0ZXJhbD4KKyAgICAgICAgICAgICAgY2xhc3NlcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0PC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+dGhlIDxsaXRlcmFsPlRSQUNFPC9saXRlcmFsPiBhbmQKKyAgICAgICAgICAgICAgPGxpdGVyYWw+V0FSTjwvbGl0ZXJhbD4gY2xhc3NlcyBhcmUgZGlzYWJsZWQgYnkKKyAgICAgICAgICAgICAgZGVmYXVsdDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkNvbXBpbGluZyBPdXQgRGVidWdnaW5nIE1lc3NhZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBjb21waWxlIG91dCB0aGUgZGVidWdnaW5nIG1lc3NhZ2VzLCBwcm92aWRlCisgICAgICAgICAgPGNvbW1hbmQ+Y29uZmlndXJlPC9jb21tYW5kPiB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorICAgIC0tZGlzYWJsZS1kZWJ1ZyAgICAgIC0tIHR1cm5zIG9mZiBUUkFDRSwgV0FSTiwgYW5kIEZJWE1FIChhbmQgRFVNUCkuCisgICAgLS1kaXNhYmxlLXRyYWNlICAgICAgLS0gdHVybnMgb2ZmIFRSQUNFIG9ubHkuCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGFuIGV4ZWN1dGFibGUgdGhhdCwgd2hlbiBzdHJpcHBlZCwgaXMKKyAgICAgICAgICBhYm91dCAxNSUtMjAlIHNtYWxsZXIuICBOb3RlLCBob3dldmVyLCB0aGF0IHlvdSB3aWxsIG5vdCBiZQorICAgICAgICAgIGFibGUgdG8gZWZmZWN0aXZlbHkgZGVidWcgV2luZSB3aXRob3V0IHRoZXNlIG1lc3NhZ2VzLiAgCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiBleHRlbnNpdmVseSB0ZXN0ZWQtLWl0IG1heSBzdWJ0bHkKKyAgICAgICAgICBicmVhayBzb21lIHRoaW5ncy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+QSBGZXcgTm90ZXMgb24gU3R5bGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgbmV3IHNjaGVtZSBtYWtlcyBjZXJ0YWluIHRoaW5ncyBtb3JlIGNvbnNpc3RlbnQgYnV0CisgICAgICAgICAgdGhlcmUgaXMgc3RpbGwgcm9vbSBmb3IgaW1wcm92ZW1lbnQgYnkgdXNpbmcgYSBjb21tb24gc3R5bGUKKyAgICAgICAgICBvZiBkZWJ1ZyBtZXNzYWdlcy4gQmVmb3JlIEkgY29udGludWUsIGxldCBtZSBub3RlIHRoYXQgdGhlCisgICAgICAgICAgb3V0cHV0IGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cit5eXk6eHh4OmZmZiAmbHQ7bWVzc2FnZSZndDsKKword2hlcmU6IAorICB5eXkgPSB0aGUgY2xhc3MgKGZpeG1lLCBlcnIsIHdhcm4sIHRyYWNlKQorICB4eHggPSB0aGUgY2hhbm5lbCAoYXRvbSwgd2luLCBmb250LCBldGMpCisgIGZmZiA9IHRoZSBmdW5jdGlvbiBuYW1lCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB0aGVzZSBmaWVsZHMgYXJlIG91dHB1dCBhdXRvbWF0aWNhbGx5LiBBbGwgeW91IGhhdmUgdG8KKyAgICAgICAgICBwcm92aWRlIGlzIHRoZSAmbHQ7bWVzc2FnZSZndDsgcGFydC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTbyBoZXJlIGFyZSBzb21lIGlkZWFzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5kbyBOT1QgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb246IGl0IGlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHk8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgaWYgeW91IHdhbnQgdG8gb3V0cHV0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBmdW5jdGlvbiwgZG8KKyAgICAgICAgICAgICAgaXQgYXMgdGhlIGZpcnN0IHRoaW5nIGFuZCBpbmNsdWRlIHRoZW0gaW4gcGFyZW50aGVzZXMsCisgICAgICAgICAgICAgIGxpa2UgdGhpczogCisgICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1lZWSh4eHgsICIoJWQsJXAsZXRjKS4uLlxuIiwgcGFyMSwgcGFyMiwgLi4uKTsKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBmb3Igc3R1YnMsIHlvdSBzaG91bGQgb3V0cHV0IGEgPGxpdGVyYWw+RklYTUU8L2xpdGVyYWw+CisgICAgICAgICAgICAgIG1lc3NhZ2UuIEkgc3VnZ2VzdCB0aGlzIHN0eWxlOgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICBGSVhNRSh4eHgsICIoJXgsJWQuLi4pOiBzdHViXG4iLCBwYXIxLCBwYXIyLCAuLi4pOworICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICBUaGF0IGlzLCB5b3Ugb3V0cHV0IHRoZSBwYXJhbWV0ZXJzLCB0aGVuIGEgOiBhbmQgdGhlbiBhIHN0cmluZworICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSB3b3JkICJzdHViIi4gSSd2ZSBzZWVuICJlbXB0eSBzdHViIiwgYW5kIG90aGVycywgYnV0IEkKKyAgICAgICAgICAgICAgdGhpbmsgdGhhdCBqdXN0ICJzdHViIiBzdWZmaWNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBvdXRwdXQgMSBhbmQgT05MWSAxIGxpbmUgcGVyIG1lc3NhZ2UuIFRoYXQgaXMsIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICAgc3RyaW5nIHNob3VsZCBjb250YWluIG9ubHkgMSA8bGl0ZXJhbD5cbjwvbGl0ZXJhbD4gYW5kIGl0CisgICAgICAgICAgICAgIHNob3VsZCBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gKHRoZXJlIGFyZQorICAgICAgICAgICAgICBtYW55IHJlYXNvbnMgIGZvciB0aGlzIHJlcXVpcmVtZW50LCBvbmUgb2YgdGhlbSBpcyB0aGF0CisgICAgICAgICAgICAgIGVhY2ggZGVidWcgbWFjcm8gYWRkcyB0aGluZ3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSkKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBuYW1lIGEgdmFsdWUsIHVzZSA8bGl0ZXJhbD49PC9saXRlcmFsPiBhbmQKKyAgICAgICAgICAgICAgTk9UIDxsaXRlcmFsPjo8L2xpdGVyYWw+LiBUaGF0IGlzLCBpbnN0ZWFkIG9mIHNheWluZzoKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorRklYTUUoeHh4LCAiKGZkOiAlZCwgZmlsZTogJXMpOiBzdHViXG4iLCBmZCwgbmFtZSk7CisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgIHNheToKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorRklYTUUoeHh4LCAiKGZkPSVkLCBmaWxlPSVzKTogc3R1YlxuIiwgZmQsIG5hbWUpOworICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICB1c2UgPGxpdGVyYWw+OjwvbGl0ZXJhbD4gdG8gc2VwYXJhdGUgY2F0ZWdvcmllcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICB0cnkgdG8gYXZvaWQgdGhlIHN0eWxlOgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitGSVhNRSh4eHgsICIoZmQ9JWQsIGZpbGU9JXMpOiBzdHViXG4iLCBmZCwgbmFtZSk7CisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgIGJ1dCB1c2U6CisgICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0ZJWE1FKHh4eCwgIihmZD0lZCwgZmlsZT0lcyk6IHN0dWJcbiIsIGZkLCBuYW1lKTsKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgICAgVGhlIHJlYXNvbiBpcyB0aGF0IGlmIHlvdSB3YW50IHRvIDxjb21tYW5kPmdyZXA8L2NvbW1hbmQ+CisgICAgICAgICAgICAgIGZvciB0aGluZ3MsIHlvdSB3b3VsZCBzZWFyY2ggZm9yIDxsaXRlcmFsPkZJWE1FPC9saXRlcmFsPgorICAgICAgICAgICAgICBidXQgaW4gdGhlIGZpcnN0IGNhc2UgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICBhdmFpbGFibGUsIHdoZXJlIGluIHRoZSBzZWNvbmQgb25lLCB0aGVyZSBpcyAoZS5nLiB0aGUgd29yZAorICAgICAgICAgICAgICBzdHViKQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIGlmIHlvdSBvdXRwdXQgYSBzdHJpbmcgcyB0aGF0IG1pZ2h0IGNvbnRhaW4gY29udHJvbAorICAgICAgICAgICAgICBjaGFyYWN0ZXJzLCBvciBpZiA8cGFyYW1ldGVyPnM8L3BhcmFtZXRlcj4gbWF5IGJlCisgICAgICAgICAgICAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCB1c2UKKyAgICAgICAgICAgICAgPGZ1bmN0aW9uPmRlYnVnc3RyX2E8L2Z1bmN0aW9uPiAoZm9yIEFTQ0lJIHN0cmluZ3MsIG9yCisgICAgICAgICAgICAgIDxmdW5jdGlvbj5kZWJ1Z3N0cl93PC9mdW5jdGlvbj4gZm9yIFVuaWNvZGUgc3RyaW5ncykgdG8KKyAgICAgICAgICAgICAgY29udmVydCA8cGFyYW1ldGVyPnM8L3BhcmFtZXRlcj4gdG8gYSBDIHN0cmluZywgbGlrZSAgdGhpczoKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorSEFORExFMzIgV0lOQVBJIFlvdXJGdW5jKExQQ1NUUiBzKQoreworICAgIEZJWE1FKHh4eCwgIiglcyk6IHN0dWJcbiIsIGRlYnVnc3RyX2EocykpOyAKK30KKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSByZXNvdXJjZSBpZGVudGlmaWVyLCB1c2UgZGVidWdyZXMgdG8KKyAgICAgICAgICAgICAgY29udmVydCBpdCB0byBhIHN0cmluZyBmaXJzdCwgbGlrZSB0aGlzOgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitIQU5ETEUzMiBXSU5BUEkgWW91ckZ1bmMoTFBDU1RSIHJlcykKK3sKKyAgICBGSVhNRSh4eHgsICIocmVzPSVzKTogc3R1YlxuIiwgZGVidWdyZXMocykpOworfQorICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICBpZiB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBpcyBhIDx0eXBlPlNFR1BUUjwvdHlwZT4sIHVzZQorICAgICAgICAgICAgICA8ZnVuY3Rpb24+UFRSX1NFR19UT19MSU48L2Z1bmN0aW9uPiB0byBnZXQgYQorICAgICAgICAgICAgICBsaW5lciBwb2ludGVyIGZpcnN0OgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitIUlNSQzE2IFdJTkFQSSBGaW5kUmVzb3VyY2UxNiggSE1PRFVMRTE2IGhNb2R1bGUsIFNFR1BUUiBuYW1lLCBTRUdQVFIgdHlwZSApCit7CitbLi4uXQorICAgIFRSQUNFKHJlc291cmNlLCAibW9kdWxlPSUwNHggbmFtZT0lcyB0eXBlPSVzXG4iLCAKKwkJIGhNb2R1bGUsIGRlYnVncmVzKFBUUl9TRUdfVE9fTElOKG5hbWUpKSwgCisJCSBkZWJ1Z3JlcyhQVFJfU0VHX1RPX0xJTih0eXBlKSkgKTsKK1suLi5dCit9CisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgZm9yIG1lc3NhZ2VzIGludGVuZGVkIGZvciB0aGUgdXNlciAoc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQKKyAgICAgICAgICAgICAgcmVwb3J0IGVycm9ycyBpbiA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4pLCB1c2UgdGhlCisgICAgICAgICAgICAgIDxsaXRlcmFsPk1TRzwvbGl0ZXJhbD4gbWFjcm8uIFVzZSBpdCBsaWtlIGEKKyAgICAgICAgICAgICAgPGZ1bmN0aW9uPnByaW50ZjwvZnVuY3Rpb24+OgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitNU0coICJEZWZpbml0aW9uIG9mIGRyaXZlICVkIGlzIGluY29ycmVjdCFcbiIsIGRyaXZlICk7IAorICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICBIb3dldmVyLCBub3RlIHRoYXQgdGhlcmUgYXJlIDxlbXBoYXNpcz52ZXJ5PC9lbXBoYXNpcz4gZmV3CisgICAgICAgICAgICAgIHZhbGlkIHVzZXMgb2YgdGhpcyBtYWNyby4gTW9zdCBtZXNzYWdlcyBhcmUgZGVidWdnaW5nCisgICAgICAgICAgICAgIG1lc3NhZ2VzLCBzbyBjaGFuY2VzIGFyZSB5b3Ugd2lsbCBub3QgbmVlZCB0byB1c2UgdGhpcworICAgICAgICAgICAgICBtYWNyby4gR3JlcCB0aGUgc291cmNlIHRvIGdldCBhbiBpZGVhIHdoZXJlIGl0IGlzCisgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHRvIHVzZSBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBGb3Igc3RydWN0dXJlIGR1bXBzLCB1c2UgdGhlIDxmdW5jdGlvbj5EVU1QPC9mdW5jdGlvbj4KKyAgICAgICAgICAgICAgbWFjcm8uIFVzZSBpdCBsaWtlIGEgPGZ1bmN0aW9uPnByaW50ZjwvZnVuY3Rpb24+LCBqdXN0IGxpa2UKKyAgICAgICAgICAgICAgdGhlIDxsaXRlcmFsPk1TRzwvbGl0ZXJhbD4gbWFjcm8uIFNpbWlsYXJseSwgdGhlcmUgYXJlIG9ubHkKKyAgICAgICAgICAgICAgYSBmZXcgdmFsaWQgdXNlcyBvZiB0aGlzIG1hY3JvLiBHcmVwIHRoZSBzb3VyY2UgdG8gc2VlIHdoZW4KKyAgICAgICAgICAgICAgdG8gdXNlIGl0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJ3aW5lLWRlYnVnZ2VyIj4KKyAgICAgIDx0aXRsZT5Vc2luZyB0aGUgV2luZSBEZWJ1Z2dlcjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IE1hcmN1cyBNZWlzc25lciA8ZW1haWw+bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPC9lbWFpbD4sCisgICAgICAgIGFkZGl0aW9ucyB3ZWxjb21lLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2RlYnVnZ2luZzwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZS4gSWYgYXQgYW55CisgICAgICAgIHBvaW50IHlvdSBnZXQgc3R1Y2sgYW5kIHdhbnQgdG8gYXNrIGZvciBoZWxwLCBwbGVhc2UgcmVhZCB0aGUKKyAgICAgICAgZmlsZSA8ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzPC9maWxlbmFtZT4gZm9yCisgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSB1c2VmdWwgYnVnIHJlcG9ydHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkNyYXNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZXNlIHVzdWFsbHkgc2hvdyB1cCBsaWtlIHRoaXM6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK3xVbmV4cGVjdGVkIFdpbmRvd3MgcHJvZ3JhbSBzZWdmYXVsdCAtIG9wY29kZSA9IDhiCit8U2VnbWVudGF0aW9uIGZhdWx0IGluIFdpbmRvd3MgcHJvZ3JhbSAxYjc6YzQxLgorfExvYWRpbmcgc3ltYm9scyBmcm9tIEVMRiBmaWxlIC9yb290L3dpbmUvd2luZS4uLgorfC4uLi5tb3JlIExvYWRpbmcgc3ltYm9scyBmcm9tIC4uLgorfEluIDE2IGJpdCBtb2RlLgorfFJlZ2lzdGVyIGR1bXA6Cit8IENTOjAxYjcgU1M6MDE2ZiBEUzowMjg3IEVTOjAwMDAKK3wgSVA6MGM0MSBTUDo4NzhhIEJQOjg3OTYgRkxBR1M6MDI0NgorfCBBWDo4MTFlIEJYOjAwMDAgQ1g6MDAwMCBEWDowMDAwIFNJOjAwMDEgREk6ZmZmZgorfFN0YWNrIGR1bXA6Cit8MHgwMTZmOjB4ODc4YTogIDAwMDEgMDE2ZiBmZmVkIDAwMDAgMDAwMCAwMjg3IDg5MGIgMWU1YgorfDB4MDE2ZjoweDg3OWE6ICAwMWI3IDAwMDEgMDAwZCAxMDUwIDA4YjcgMDE2ZiAwMDAxIDAwMGQKK3wweDAxNmY6MHg4N2FhOiAgMDAwYSAwMDAzIDAwMDQgMDAwMCAwMDA3IDAwMDcgMDE5MCAwMDAwCit8MHgwMTZmOjB4ODdiYToKK3wKK3wwMDUwOiBzZWw9MDI4NyBiYXNlPTQwMjExZDMwIGxpbWl0PTBiOTNmIChieXRlcykgMTYtYml0IHJ3LQorfEJhY2t0cmFjZToKK3wwIDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpCit8MSAweDAxYjc6MHgxZTViIChQWFNSVl9GT05QVVRDQVRGT05UKzB4MmNkKQorfDIgMHgwMWE3OjB4MDVhYQorfDMgMHgwMWI3OjB4MDc2OCAoUFhTUlZfRk9OSU5JVEZPTlRTKzB4ODEpCit8NCAweDAxNGY6MHgwM2VkIChQRE9YV0lOX0BTUUxDVVJDQiRRNkNCVFlQRVVMTjhDQlNDVFlQRSsweDFiMSkKK3w1IDB4MDEzZjoweDAwYWMKK3wKK3wweDAxYjc6MHgwYzQxIChQWFNSVl9GT05HRVRGQUNFTkFNRSsweDdjKTogIG1vdncgICAgICAgICVlczoweDM4KCVieCksJWR4CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTdGVwcyB0byBkZWJ1ZyBhIGNyYXNoLiBZb3UgbWF5IHN0b3AgYXQgYW55IHN0ZXAsIGJ1dCBwbGVhc2UKKyAgICAgICAgICByZXBvcnQgdGhlIGJ1ZyBhbmQgcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbgorICAgICAgICAgIGdhdGhlcmVkIHRvIHRoZSBuZXdzZ3JvdXAgb3IgdGhlIHJlbGV2YW50IGRldmVsb3BlciBhcworICAgICAgICAgIGZlYXNpYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBHZXQgdGhlIHJlYXNvbiBmb3IgdGhlIGNyYXNoLiBUaGlzIGlzIHVzdWFsbHkgYW4gYWNjZXNzIHRvCisgICAgICAgICAgICAgIGFuIGludmFsaWQgc2VsZWN0b3IsIGFuIGFjY2VzcyB0byBhbiBvdXQgb2YgcmFuZ2UgYWRkcmVzcworICAgICAgICAgICAgICBpbiBhIHZhbGlkIHNlbGVjdG9yLCBwb3BwaW5nIGEgc2VnbWVudHJlZ2lzdGVyIGZyb20gdGhlCisgICAgICAgICAgICAgIHN0YWNrIG9yIHRoZSBsaWtlLiBXaGVuIHJlcG9ydGluZyBhIGNyYXNoLCByZXBvcnQgdGhpcworICAgICAgICAgICAgICA8ZW1waGFzaXM+d2hvbGU8L2VtcGhhc2lzPiBjcmFzaGR1bXAgZXZlbiBpZiBpdCBkb2Vzbid0CisgICAgICAgICAgICAgIG1ha2Ugc2Vuc2UgdG8geW91LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIChJbiB0aGlzIGNhc2UgaXQgaXMgYWNjZXNzIHRvIGFuIGludmFsaWQgc2VsZWN0b3IsIGZvcgorICAgICAgICAgICAgICA8c3lzdGVtaXRlbT4lZXM8L3N5c3RlbWl0ZW0+IGlzIDxsaXRlcmFsPjAwMDA8L2xpdGVyYWw+LCBhcworICAgICAgICAgICAgICBzZWVuIGluIHRoZSByZWdpc3RlciBkdW1wKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBEZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBjcmFzaC4gU2luY2UgdGhpcyBpcyB1c3VhbGx5CisgICAgICAgICAgICAgIGEgcHJpbWFyeS9zZWNvbmRhcnkgcmVhY3Rpb24gdG8gYSBmYWlsZWQgb3IgbWlzYmVoYXZpbmcKKyAgICAgICAgICAgICAgV2luZSBmdW5jdGlvbiwgcmVydW4gV2luZSB3aXRoIDxwYXJhbWV0ZXI+LWRlYnVnbXNnCisgICAgICAgICAgICAgICAgK3JlbGF5PC9wYXJhbWV0ZXI+IGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4gVGhpcyB3aWxsCisgICAgICAgICAgICAgIGdlbmVyYXRlIHF1aXRlIGEgbG90IG9mIG91dHB1dCwgYnV0IHVzdWFsbHkgdGhlIHJlYXNvbiBpcworICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZSBsYXN0IGNhbGwocykuICBUaG9zZSBsaW5lcyB1c3VhbGx5IGxvb2sgbGlrZQorICAgICAgICAgICAgICB0aGlzOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHNjcmVlbj4KK3xDYWxsIEtFUk5FTC45MDogTFNUUkxFTigwMjI3OjA2OTIgInRleHQiKSByZXQ9MDFlNzoyY2U3IGRzPTAyMjcKKyAgICAgIF5eXl5eXl5eXiAgXiAgICAgICBeXl5eXl5eXl4gXl5eXl5eICAgICAgXl5eXl5eXl5eICAgIF5eXl4KKyAgICAgIHwgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHxEYXRhc2VnbWVudAorICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8UmV0dXJuIGFkZHJlc3MKKyAgICAgIHwgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgfHRleHR1YWwgcGFyYW1ldGVyCisgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICAgICAgfCAgICAgICAgICB8ICAgICAgIHxBcmd1bWVudChzKS4gVGhpcyBvbmUgaXMgYSB3aW4xNiBzZWdtZW50ZWQgcG9pbnRlci4KKyAgICAgIHwgICAgICAgICAgfEZ1bmN0aW9uIGNhbGxlZC4KKyAgICAgIHxUaGUgbW9kdWxlLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGluLiBJbiB0aGlzIGNhc2UgaXQgaXMgS0VSTkVMLgorCQkgICAgICAgIAorfFJldCAgS0VSTkVMLjkwOiBMU1RSTEVOKCkgcmV0dmFsPTB4MDAwNCByZXQ9MDFlNzoyY2U3IGRzPTAyMjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KKwkJCQkgIHxSZXR1cm52YWx1ZSBpcyAxNiBiaXQgYW5kIGhhcyB0aGUgdmFsdWUgNC4KKyAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGZvdW5kIGEgbWlzYmVoYXZpbmcgZnVuY3Rpb24sIHRyeSB0byBmaW5kIG91dAorICAgICAgICAgICAgICB3aHkgaXQgbWlzYmVoYXZlcy4gRmluZCB0aGUgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICBUcnkgdG8gbWFrZSBzZW5zZSBvZiB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVXN1YWxseSB0aGVyZSBpcworICAgICAgICAgICAgICBhIDxmdW5jdGlvbj5UUkFDRSgmbHQ7Y2hhbm5lbCZndDssIiguLi4pXG4iKTs8L2Z1bmN0aW9uPiBhdAorICAgICAgICAgICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gUmVydW4gd2luZSB3aXRoCisgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LWRlYnVnbXNnICt4eXosK3JlbGF5PC9wYXJhbWV0ZXI+IGFkZGVkIHRvIHRoZQorICAgICAgICAgICAgICBjb21tYW5kbGluZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgICAgZGVidWdnZXIgY2FuIGJlICBmb3VuZCBpbgorICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVidWdnZXIvUkVBRE1FPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSWYgdGhpcyBpbmZvcm1hdGlvbiBpc24ndCBjbGVhciBlbm91Z2ggb3IgaWYgeW91IHdhbnQgdG8KKyAgICAgICAgICAgICAga25vdyBtb3JlIGFib3V0IHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiwKKyAgICAgICAgICAgICAgdHJ5IHJ1bm5pbmcgd2luZSB3aXRoIDxwYXJhbWV0ZXI+LWRlYnVnbXNnCisgICAgICAgICAgICAgICAgK2FsbDwvcGFyYW1ldGVyPiwgd2hpY2ggZHVtcHMgQUxMIGluY2x1ZGVkIGRlYnVnCisgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHdpbmUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSWYgZXZlbiB0aGF0IGlzbid0IGVub3VnaCwgYWRkIG1vcmUgZGVidWcgb3V0cHV0IGZvcgorICAgICAgICAgICAgICB5b3Vyc2VsZiBpbnRvIHRoZSBmdW5jdGlvbnMgeW91IGZpbmQgcmVsZXZhbnQuICBTZWUKKyAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vZGVidWctbXNnczwvZmlsZW5hbWU+LiBZb3UgbWlnaHQKKyAgICAgICAgICAgICAgYWxzbyB0cnkgdG8gcnVuIHRoZSBwcm9ncmFtIGluIDxjb21tYW5kPmdkYjwvY29tbWFuZD4KKyAgICAgICAgICAgICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgV0lORS1kZWJ1Z2dlci4gSWYgeW91IGRvIHRoYXQsIHVzZQorICAgICAgICAgICAgICA8cGFyYW1ldGVyPmhhbmRsZSBTSUdTRUdWIG5vc3RvcCBub3ByaW50PC9wYXJhbWV0ZXI+IHRvCisgICAgICAgICAgICAgIGRpc2FibGUgdGhlIGhhbmRsaW5nIG9mIHNlZyBmYXVsdHMgaW5zaWRlCisgICAgICAgICAgICAgIDxjb21tYW5kPmdkYjwvY29tbWFuZD4gKG5lZWRlZCBmb3IgV2luMTYpLiBJZiB5b3UgZG9uJ3QgdXNlCisgICAgICAgICAgICAgIHRoZSA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBvcgorICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tbWFuYWdlZDwvcGFyYW1ldGVyPiBvcHRpb24sIHN0YXJ0IHRoZSBXSU5FCisgICAgICAgICAgICAgIHByb2Nlc3Mgd2l0aCA8cGFyYW1ldGVyPi0tc3luYzwvcGFyYW1ldGVyPiwgb3IgY2hhbmNlcyBhcmUKKyAgICAgICAgICAgICAgZ29vZCB0byBnZXQgWCBpbnRvIGFuIHVudXNhYmxlIHN0YXRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgYSBicmVha3BvaW50IGZvciB0aGF0IGZ1bmN0aW9uLiBTdGFydCB3aW5lCisgICAgICAgICAgICAgIHdpdGggdGhlIDxwYXJhbWV0ZXI+LS1kZWJ1ZzwvcGFyYW1ldGVyPiBvcHRpb24gYWRkZWQgdG8gdGhlCisgICAgICAgICAgICAgIGNvbW1hbmRsaW5lLiBBZnRlciBsb2FkaW5nIHRoZSBleGVjdXRhYmxlIHdpbmUgd2lsbCBlbnRlcgorICAgICAgICAgICAgICB0aGUgaW50ZXJuYWwgZGVidWdnZXIuIFVzZSA8cGFyYW1ldGVyPmJyZWFrCisgICAgICAgICAgICAgICAgS0VSTkVMX0xTVFJMRU48L3BhcmFtZXRlcj4gKHJlcGxhY2UgYnkgZnVuY3Rpb24geW91IHdhbnQKKyAgICAgICAgICAgICAgdG8gZGVidWcsIENBU0UgSVMgUkVMRVZBTlQpIHRvIHNldCBhIGJyZWFrcG9pbnQuICBUaGVuIHVzZQorICAgICAgICAgICAgICA8Y29tbWFuZD5jb250aW51ZTwvY29tbWFuZD4gdG8gc3RhcnQgbm9ybWFsCisgICAgICAgICAgICAgIHByb2dyYW0tZXhlY3V0aW9uLiBXaW5lIHdpbGwgc3RvcCBpZiBpdCByZWFjaGVzIHRoZQorICAgICAgICAgICAgICBicmVha3BvaW50LiBJZiB0aGUgcHJvZ3JhbSBpc24ndCB5ZXQgYXQgdGhlIGNyYXNoaW5nIGNhbGwKKyAgICAgICAgICAgICAgb2YgdGhhdCBmdW5jdGlvbiwgdXNlIDxjb21tYW5kPmNvbnRpbnVlPC9jb21tYW5kPiBhZ2FpbgorICAgICAgICAgICAgICB1bnRpbCB5b3UgYXJlIGFib3V0IHRvIGVudGVyIHRoYXQgZnVuY3Rpb24uIFlvdSBtYXkgbm93CisgICAgICAgICAgICAgIHByb2NlZWQgd2l0aCBzaW5nbGUtc3RlcHBpbmcgdGhlIGZ1bmN0aW9uIHVudGlsIHlvdSByZWFjaAorICAgICAgICAgICAgICB0aGUgcG9pbnQgb2YgY3Jhc2guIFVzZSB0aGUgb3RoZXIgZGVidWdnZXIgY29tbWFuZHMgdG8KKyAgICAgICAgICAgICAgcHJpbnQgcmVnaXN0ZXJzIGFuZCB0aGUgbGlrZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+UHJvZ3JhbSBoYW5ncywgbm90aGluZyBoYXBwZW5zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTd2l0Y2ggdG8gVU5JWCBzaGVsbCwgZ2V0IHRoZSBwcm9jZXNzLUlEIHVzaW5nIDxjb21tYW5kPnBzIC1hIHwKKyAgICAgICAgICAgIGdyZXAgd2luZTwvY29tbWFuZD4sIGFuZCBkbyBhIDxjb21tYW5kPmtpbGwgLUhVUAorICAgICAgICAgICAgJmx0O3BpZCZndDs8L2NvbW1hbmQ+ICh3aXRob3V0IHRoZSAmbHQ7IGFuZCAmZ3Q7KS4gV2luZSB3aWxsCisgICAgICAgICAgdGhlbiBlbnRlciBpdHMgaW50ZXJuYWwgZGVidWdnZXIgYW5kIHlvdSBjYW4gcHJvY2VlZCBhcworICAgICAgICAgIGV4cGxhaW5lZCBhYm92ZS4gQWxzbywgeW91IGNhbiB1c2UKKyAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVidWc8L3BhcmFtZXRlcj4gc3dpdGNoIGFuZCB0aGVuIHlvdSBjYW4gZ2V0IGludG8KKyAgICAgICAgICBpbnRlcm5hbCBkZWJ1Z2dlciBieSBwcmVzc2luZyAKKyAgICAgICAgICA8a2V5Y29tYm8+PGtleWNhcD5DdHJsPC9rZXljYXA+PGtleWNhcD5DPC9rZXljYXA+PC9rZXljb21ibz4gaW4KKyAgICAgICAgICB0aGUgdGVybWluYWwgd2hlcmUgeW91IHJ1biBXaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Qcm9ncmFtIHJlcG9ydHMgYW4gZXJyb3Igd2l0aCBhIE1lc3NhZ2Vib3g8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvbWV0aW1lcyBwcm9ncmFtcyBhcmUgcmVwb3J0aW5nIGZhaWx1cmUgdXNpbmcgbW9yZSBvcgorICAgICAgICAgIGxlc3Mgbm9uZGVzY3JpcHQgbWVzc2FnZWJveGVzLiBXZSBjYW4gZGVidWcgdGhpcyB1c2luZyB0aGUKKyAgICAgICAgICBzYW1lIG1ldGhvZCBhcyBDcmFzaGVzLCBidXQgdGhlcmUgaXMgb25lIHByb2JsZW0uLi4gRm9yCisgICAgICAgICAgc2V0dGluZyB1cCBhIG1lc3NhZ2UgYm94IHRoZSBwcm9ncmFtIGFsc28gY2FsbHMgV2luZQorICAgICAgICAgIHByb2R1Y2luZyBodWdlIGNodW5rcyBvZiBkZWJ1ZyBjb2RlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNpbmNlIHRoZSBmYWlsdXJlIGhhcHBlbnMgdXN1YWxseSBkaXJlY3RseSBiZWZvcmUgc2V0dGluZyB1cAorICAgICAgICAgIHRoZSBNZXNzYWdlYm94IHlvdSBjYW4gc3RhcnQgd2luZSB3aXRoCisgICAgICAgICAgPHBhcmFtZXRlcj4tLWRlYnVnPC9wYXJhbWV0ZXI+IGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZSwgc2V0IGEKKyAgICAgICAgICBicmVha3BvaW50IGF0IDxmdW5jdGlvbj5NZXNzYWdlQm94QTwvZnVuY3Rpb24+IChjYWxsZWQgYnkgd2luMTYKKyAgICAgICAgICBhbmQgd2luMzIgcHJvZ3JhbXMpIGFuZCBwcm9jZWVkIHdpdGgKKyAgICAgICAgICA8Y29tbWFuZD5jb250aW51ZTwvY29tbWFuZD4uIFdpdGggPHBhcmFtZXRlcj4tLWRlYnVnbXNnCisgICAgICAgICAgICArYWxsPC9wYXJhbWV0ZXI+IFdpbmUgd2lsbCBub3cgc3RvcCBkaXJlY3RseSBiZWZvcmUgc2V0dGluZworICAgICAgICAgIHVwIHRoZSBNZXNzYWdlYm94LiBQcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3UgY2FuIGFsc28gcnVuIHdpbmUgdXNpbmcgPGNvbW1hbmQ+d2luZSAtZGVidWdtc2cgK3JlbGF5CisgICAgICAgICAgICBwcm9ncmFtLmV4ZSAyJmd0OyYxIHwgbGVzcyAtaTwvY29tbWFuZD4gYW5kIGluCisgICAgICAgICAgPGNvbW1hbmQ+bGVzczwvY29tbWFuZD4gc2VhcmNoIGZvciA8cXVvdGU+TWVzc2FnZUJveDwvcXVvdGU+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5EaXNhc3NlbWJsaW5nIHByb2dyYW1zOjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgWW91IG1heSBhbHNvIHRyeSB0byBkaXNhc3NlbWJsZSB0aGUgb2ZmZW5kaW5nIHByb2dyYW0gdG8KKyAgICAgICAgICBjaGVjayBmb3IgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGFuZC9vciB1c2Ugb2YgdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgYmVzdCwgZnJlZWx5IGF2YWlsYWJsZSwgZGlzYXNzZW1ibGVyIGZvciBXaW4xNiBwcm9ncmFtcyBpcworICAgICAgICAgIDxhcHBsaWNhdGlvbj5XaW5kb3dzIENvZGViYWNrPC9hcHBsaWNhdGlvbj4sIGFyY2hpdmVuYW1lCisgICAgICAgICAgPGZpbGVuYW1lPndjYnh4eC56aXA8L2ZpbGVuYW1lPiwgd2hpY2ggdXN1YWxseSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICAgICB0aGUgPGZpbGVuYW1lPkNpY2EtTWlycm9yPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9uIHRoZSBXSU5FCisgICAgICAgICAgZnRwc2l0ZXMuIChTZWUgPGZpbGVuYW1lPkFOTk9VTkNFPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIERpc2Fzc2VtYmxpbmcgd2luMzIgcHJvZ3JhbXMgaXMgcG9zc2libGUgdXNpbmcKKyAgICAgICAgICA8YXBwbGljYXRpb24+V2luZG93cyBEaXNhc3NlbWJsZXIgMzI8L2FwcGxpY2F0aW9uPiwgYXJjaGl2ZW5hbWUKKyAgICAgICAgICBzb21ldGhpbmcgbGlrZSA8ZmlsZW5hbWU+dzMyZHNtODcuemlwPC9maWxlbmFtZT4gKG9yIHNpbWlsYXIpCisgICAgICAgICAgb24gPHN5c3RlbWl0ZW0gY2xhc3M9InN5c3RlbW5hbWUiPmZ0cC53aW5zaXRlLmNvbTwvc3lzdGVtaXRlbT4KKyAgICAgICAgICBhbmQgbWlycm9ycy4gIFRoZSBzaGFyZXdhcmUgdmVyc2lvbiBkb2VzIG5vdCBhbGxvdyBzYXZpbmcgb2YKKyAgICAgICAgICBkaXNhc3NlbWJseSBsaXN0aW5ncy4gWW91IGNhbiBhbHNvIHVzZSB0aGUgbmV3ZXIgKGFuZCBpbiB0aGUKKyAgICAgICAgICBmdWxsIHZlcnNpb24gYmV0dGVyKSA8YXBwbGljYXRpb24+SW50ZXJhY3RpdmUKKyAgICAgICAgICAgIERpc2Fzc2VtYmxlcjwvYXBwbGljYXRpb24+IChJREEpIGZyb20gdGhlIGZ0cCBzaXRlcyBtZW50aW9uZWQKKyAgICAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gVW5kZXJzdGFuZGluZyBkaXNhc3NlbWJsZWQgY29kZSBpcworICAgICAgICAgIG1vc3RseSBhIHF1ZXN0aW9uIG9mIGV4ZXJjaXNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vc3QgY29kZSBvdXQgdGhlcmUgdXNlcyBzdGFuZGFyZCBDIGZ1bmN0aW9uIGVudHJpZXMgKGZvciBpdAorICAgICAgICAgIGlzIHVzdWFsbHkgIHdyaXR0ZW4gaW4gQykuIFdpbjE2IGZ1bmN0aW9uIGVudHJpZXMgdXN1YWxseQorICAgICAgICAgIGxvb2sgbGlrZSB0aGF0OgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3B1c2ggYnAKK21vdiBicCwgc3AKKy4uLiBmdW5jdGlvbiBjb2RlIC4uCityZXRmIFhYWFggCSZsdDstLS0tLS0tLS0gWFhYWCBpcyBudW1iZXIgb2YgYnl0ZXMgb2YgYXJndW1lbnRzCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgYSA8ZnVuY3Rpb24+RkFSPC9mdW5jdGlvbj4gZnVuY3Rpb24gd2l0aCBubyBsb2NhbAorICAgICAgICAgIHN0b3JhZ2UuIFRoZSBhcmd1bWVudHMgdXN1YWxseSBzdGFydCBhdAorICAgICAgICAgIDxsaXRlcmFsPlticCs2XTwvbGl0ZXJhbD4gd2l0aCBpbmNyZWFzaW5nIG9mZnNldHMuIE5vdGUsIHRoYXQKKyAgICAgICAgICA8bGl0ZXJhbD5bYnArNl08L2xpdGVyYWw+IGJlbG9uZ3MgdG8gdGhlCisgICAgICAgICAgPGVtcGhhc2lzPnJpZ2h0bW9zdDwvZW1waGFzaXM+IGFyZ3VtZW50LCBmb3IgZXhwb3J0ZWQgd2luMTYKKyAgICAgICAgICBmdW5jdGlvbnMgdXNlIHRoZSBQQVNDQUwgY2FsbGluZyBjb252ZW50aW9uLiBTbywgaWYgd2UgdXNlCisgICAgICAgICAgPGZ1bmN0aW9uPnN0cmNtcChhLGIpPC9mdW5jdGlvbj4gd2l0aCA8cGFyYW1ldGVyPmE8L3BhcmFtZXRlcj4KKyAgICAgICAgICBhbmQgPHBhcmFtZXRlcj5iPC9wYXJhbWV0ZXI+IGJvdGggMzIgYml0IHZhcmlhYmxlcworICAgICAgICAgIDxwYXJhbWV0ZXI+YjwvcGFyYW1ldGVyPiB3b3VsZCBiZSBhdCA8bGl0ZXJhbD5bYnArNl08L2xpdGVyYWw+CisgICAgICAgICAgYW5kIDxwYXJhbWV0ZXI+YTwvcGFyYW1ldGVyPiBhdCA8bGl0ZXJhbD5bYnArMTBdPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNb3N0IGZ1bmN0aW9ucyBtYWtlIGFsc28gdXNlIG9mIGxvY2FsIHN0b3JhZ2UgaW4gdGhlIHN0YWNrZnJhbWU6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZW50ZXIgMDA4NiwgMDAKKy4uLiBmdW5jdGlvbiBjb2RlIC4uLgorbGVhdmUKK3JldGYgWFhYWAorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGRvZXMgbW9zdGx5IHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgYWxzbyBhZGRzCisgICAgICAgICAgPGxpdGVyYWw+MHg4NjwvbGl0ZXJhbD4gYnl0ZXMgb2Ygc3RhY2tzdG9yYWdlLCB3aGljaCBpcworICAgICAgICAgIGFjY2Vzc2VkIHVzaW5nIDxsaXRlcmFsPlticC14eF08L2xpdGVyYWw+LiBCZWZvcmUgY2FsbGluZyBhCisgICAgICAgICAgZnVuY3Rpb24sIGFyZ3VtZW50cyBhcmUgcHVzaGVkIG9uIHRoZSBzdGFjayB1c2luZyBzb21ldGhpbmcKKyAgICAgICAgICBsaWtlIHRoaXM6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorcHVzaCB3b3JkIHB0ciBbYnAtMDJdCSZsdDstIHdpbGwgYmUgYXQgW2JwKzhdCitwdXNoIGRpCQkJJmx0Oy0gd2lsbCBiZSBhdCBbYnArNl0KK2NhbGwgS0VSTkVMLkxTVFJMRU4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSBmaXJzdCB0aGUgc2VsZWN0b3IgYW5kIHRoZW4gdGhlIG9mZnNldCB0byB0aGUgcGFzc2VkCisgICAgICAgICAgc3RyaW5nIGFyZSBwdXNoZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlNhbXBsZSBkZWJ1Z2dpbmcgc2Vzc2lvbjo8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIExldCdzIGRlYnVnIHRoZSBpbmZhbW91cyBXb3JkIDxmaWxlbmFtZT5TSEFSRS5FWEU8L2ZpbGVuYW1lPgorICAgICAgICAgIG1lc3NhZ2Vib3g6IAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cit8bWFyY3VzQGpldCAkIHdpbmUgd2lud29yZC5leGUKK3wgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgIHwgISAgWW91IG11c3QgbGVhdmUgV2luZG93cyBhbmQgbG9hZCBTSEFSRS5FWEV8Cit8ICAgICAgICAgICAgfCAgICBiZWZvcmUgc3RhcnRpbmcgV29yZC4gICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHNjcmVlbj4KK3xtYXJjdXNAamV0ICQgd2luZSB3aW53b3JkLmV4ZSAtZGVidWdtc2cgK3JlbGF5IC1kZWJ1ZworfENhbGxUbzMyKHduZHByb2M9MHg0MDA2NWJjMCxod25kPTAwMDAwMWFjLG1zZz0wMDAwMDA4MSx3cD0wMDAwMDAwMCxscD0wMDAwMDAwMCkKK3xXaW4xNiB0YXNrICd3aW53b3JkJzogQnJlYWtwb2ludCAxIGF0IDB4MDFkNzoweDAwMWEKK3xDYWxsVG8xNihmdW5jPTAxMjc6MDA3MCxkcz0wOTI3KQorfENhbGwgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKK3xSZXQgIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0dmFsPTB4ODY3MiByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKK3xDYWxsVG8xNihmdW5jPTAxZDc6MDAxYSxkcz0wOTI3KQorfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA5MjcgQlA9MDAwMCBFUz0xMWY3Cit8TG9hZGluZyBzeW1ib2xzOiAvaG9tZS9tYXJjdXMvd2luZS93aW5lLi4uCit8U3RvcHBlZCBvbiBicmVha3BvaW50IDEgYXQgMHgwMWQ3OjB4MDAxYQorfEluIDE2IGJpdCBtb2RlLgorfFdpbmUtZGJnJmd0O2JyZWFrIE1lc3NhZ2VCb3hBICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7LS0tLSBTZXQgQnJlYWtwb2ludAorfEJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94QSBbbXNnYm94LmM6MTkwXSkKK3xXaW5lLWRiZyZndDtjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7LS0tLSBDb250aW51ZQorfENhbGwgS0VSTkVMLjkxOiBJTklUVEFTSygpIHJldD0wMTU3OjAwMjIgZHM9MDhhNworfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA4YTcgRVM9MTFkNyBFRkw9MDAwMDAyODYKK3xDYWxsVG8xNihmdW5jPTA5MGY6MDg1Yyxkcz0wZGNmLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDAwMCwweDA4MDAsMHgwMDAwLDB4MDAwMCwweDBkY2YpCit8Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0Oy0tLS0tIE11Y2ggZGVidWdvdXRwdXQKK3xDYWxsIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgweDAwMDApIHJldD0wNjBmOjA5N2IgZHM9MDkyNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBEcml2ZSAwIChBOikKK3xSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDIgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICBEUklWRV9SRU1PVkVBQkxFCisJCQkJCQkoSXQgaXMgYSBmbG9wcHkgZGlza2RyaXZlLikKKworfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMSkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERyaXZlIDEgKEI6KQorfFJldCAgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDYwZjowOTdiIGRzPTA5MjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX0NBTk5PVERFVEVSTUlORQorCQkJCQkJKEkgZG9uJ3QgaGF2ZSBkcml2ZSBCOiBhc3NpZ25lZCkKKworfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMikgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXiBEcml2ZSAyIChDOikKK3xSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDMgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERSSVZFX0ZJWEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGVjaWZpZWQgYXMgYSBoYXJkZGlzaykKKworfENhbGwgS0VSTkVMLjk3OiBHRVRURU1QRklMRU5BTUUoMHgwMGMzLDB4MDkyNzgzNjQiZG9jIiwweDAwMDAsMDkyNzo4MjQ4KSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiAgICAgICAgICAgXl5eXl4gICAgICAgIF5eXl5eXl5eXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfGJ1ZmZlciBmb3IgZm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHRlbXBvcmFyeSBuYW1lIH5kb2NYWFhYLnRtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfEZvcmNlIHVzZSBvZiBEcml2ZSBDOi4KKworfFdhcm5pbmc6IEdldFRlbXBGaWxlTmFtZSByZXR1cm5zICdDOn5kb2M5MjgxLnRtcCcsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB3cml0ZWFibGUuCit8UGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIGlmIHRoaXMgZ2VuZXJhdGVzIGEgZmFpbHVyZS4KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdob29wcywgaXQgZXZlbiBkZXRlY3RzIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nIQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cit8UmV0ICBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgpIHJldHZhbD0weDkyODEgcmV0PTA2MGY6MDliMSBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gVGVtcG9yYXJ5IHN0b3JhZ2UgSUQKKworfENhbGwgS0VSTkVMLjc0OiBPUEVORklMRSgweDA5Mjc4MjQ4IkM6fmRvYzkyODEudG1wIiwwOTI3OjgyZGEsMHgxMDEyKSByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl4gXl5eXl5eXl5eIF5eXl5eXl4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxmaWxlbmFtZSAgICAgICAgfE9GU1RSVUNUIHxvcGVuIG1vZGU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GX0NSRUFURXxPRl9TSEFSRV9FWENMVVNJVkV8T0ZfUkVBRFdSSVRFCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGZhaWxzLCBzaW5jZSBteSA8bWVkaWFsYWJlbD5DOjwvbWVkaWFsYWJlbD4gZHJpdmUgaXMgaW4KKyAgICAgICAgICB0aGlzIGNhc2UgbW91bnRlZCByZWFkb25seS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorfFJldCAgS0VSTkVMLjc0OiBPUEVORklMRSgpIHJldHZhbD0weGZmZmYgcmV0PTA2MGY6MDlkOCBkcz0wOTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBIRklMRV9FUlJPUjE2LCB5ZXMsIGl0IGZhaWxlZC4KKworfENhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDA5Mjc4Mzc2IlNpZSBtdXNzZW4gV2luZG93cyB2ZXJsYXNzZW4gdW5kIFNIQVJFLkVYRSBsYWRlbiBiZXZvciBTaWUgV29yZCBzdGFydGVuLiIsMHgwMDAwMDAwMCwweDEwMzApIHJldD0wNjBmOjA4NGYgZHM9MDkyNworICAgICAgICA8L3NjcmVlbj4gICAgICAgICAgIAorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbmQgTWVzc2FnZUJveCdlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorfFN0b3BwZWQgb24gYnJlYWtwb2ludCAyIGF0IDB4NDAxODkxMDAgKE1lc3NhZ2VCb3hBIFttc2dib3guYzoxOTBdKQorfDE5MCAgICAgewkJJmx0Oy0gdGhlIHNvdXJjZWxpbmUKK0luIDMyIGJpdCBtb2RlLgorV2luZS1kYmcmZ3Q7CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY29kZSBzZWVtcyB0byBmaW5kIGEgd3JpdGVhYmxlIGhhcmRkaXNrIGFuZCB0cmllcyB0byBjcmVhdGUKKyAgICAgICAgICBhIGZpbGUgdGhlcmUuIFRvIHdvcmsgYXJvdW5kIHRoaXMgYnVnLCB5b3UgY2FuIGRlZmluZQorICAgICAgICAgIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPiBhcyBhIG5ldHdvcmtkcml2ZSwgd2hpY2ggaXMgaWdub3JlZAorICAgICAgICAgIGJ5IHRoZSBjb2RlIGFib3ZlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgVGlwczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSBhcmUgc29tZSB1c2VmdWwgZGVidWdnaW5nIHRpcHMsIGFkZGVkIGJ5IEFuZHJlYXMgTW9ocjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgcHJvZ3JhbSBjcmFzaGluZyBhdCBzdWNoIGFuIGVhcmx5IGxvYWRlciBwaGFzZSB0aGF0IHlvdSBjYW4ndAorICAgICAgICAgICAgICB1c2UgdGhlIFdpbmUgZGVidWdnZXIgbm9ybWFsbHksIGJ1dCBXaW5lIGFscmVhZHkgZXhlY3V0ZXMgdGhlIHByb2dyYW0ncworICAgICAgICAgICAgICBzdGFydCBjb2RlLCB0aGVuIHlvdSBtYXkgdXNlIGEgc3BlY2lhbCB0cmljay4gWW91IHNob3VsZCBkbyBhCisgICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3dpbmUgLS1kZWJ1Z21zZyArcmVsYXkgcHJvZ3JhbQorICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICB0byBnZXQgYSBsaXN0aW5nIG9mIHRoZSBmdW5jdGlvbnMgdGhlIHByb2dyYW0gY2FsbHMgaW4gaXRzIHN0YXJ0IGZ1bmN0aW9uLgorICAgICAgICAgICAgICBOb3cgeW91IGRvIGEKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgord2luZSAtLWRlYnVnIHdpbmZpbGUuZXhlCisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhpcyB3YXksIHlvdSBnZXQgaW50byA8Y29tbWFuZD5XaW5lLWRiZzwvY29tbWFuZD4uIE5vdyB5b3UKKyAgICAgICAgICAgICAgY2FuIHNldCBhIGJyZWFrcG9pbnQgb24gYW55IGZ1bmN0aW9uIHRoZSBwcm9ncmFtIGNhbGxzIGluCisgICAgICAgICAgICAgIHRoZSBzdGFydCBmdW5jdGlvbiBhbmQganVzdCB0eXBlIDx1c2VyaW5wdXQ+YzwvdXNlcmlucHV0PgorICAgICAgICAgICAgICB0byBieXBhc3MgdGhlIGV2ZW50dWFsIGNhbGxzIG9mIFdpbmZpbGUgdG8gdGhpcyBmdW5jdGlvbgorICAgICAgICAgICAgICB1bnRpbCB5b3UgYXJlIGZpbmFsbHkgYXQgdGhlIHBsYWNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gZ2V0cworICAgICAgICAgICAgICBjYWxsZWQgYnkgdGhlIGNyYXNoaW5nIHN0YXJ0IGZ1bmN0aW9uLiBOb3cgeW91IGNhbiBwcm9jZWVkCisgICAgICAgICAgICAgIHdpdGggeW91ciBkZWJ1Z2dpbmcgYXMgdXN1YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSWYgeW91IHRyeSB0byBydW4gYSBwcm9ncmFtIGFuZCBpdCBxdWl0cyBhZnRlciBzaG93aW5nIGFuIGVycm9yIG1lc3NhZ2Vib3gsCisgICAgICAgICAgICAgIHRoZSBwcm9ibGVtIGNhbiB1c3VhbGx5IGJlIGlkZW50aWZpZWQgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgIGZ1bmN0aW9ucyBleGVjdXRlZCBiZWZvcmUgPGZ1bmN0aW9uPk1lc3NhZ2VCb3goKTwvZnVuY3Rpb24+LgorICAgICAgICAgICAgICBUaGF0J3Mgd2h5IHlvdSBzaG91bGQgcmUtcnVuIHRoZSBwcm9ncmFtIHdpdGggZS5nLgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cit3aW5lIC0tZGVidWdtc2cgK3JlbGF5ICZsdDtwcm9ncmFtIG5hbWUmZ3Q7ICYmZ3Q7cmVsbXNnCisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgIFRoZW4gZG8gYSA8Y29tbWFuZD5tb3JlIHJlbG1zZzwvY29tbWFuZD4gYW5kIHNlYXJjaCBmb3IgdGhlCisgICAgICAgICAgICAgIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNhbGwgdG8gdGhlIHN0cmluZyAiTUVTU0FHRUJPWCIuIFRoaXMgaXMgYSBsaW5lIGxpa2UKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgICAgSW4gbXkgZXhhbXBsZSB0aGUgbGluZXMgYmVmb3JlIHRoZSBjYWxsIHRvCisgICAgICAgICAgICAgIDxmdW5jdGlvbj5NZXNzYWdlQm94KCk8L2Z1bmN0aW9uPiBsb29rIGxpa2UgdGhhdDoKKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDM0NykgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCitDYWxsVG8xNihmdW5jPTAzM2Y6MDA3Mixkcz0wMWZmLDB4MDAwMCkKK1JldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCitDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzZmKSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKK0NhbGxUbzE2KGZ1bmM9MDM2NzowMDcyLGRzPTAxZmYsMHgwMDAwKQorUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKK0NhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzMWYpIHJldD0wMWNmOjEwNWMgZHM9MDFmZgorQ2FsbFRvMTYoZnVuYz0wMzE3OjAwNzIsZHM9MDFmZiwweDAwMDApCitSZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwNWMgZHM9MDFmZgorQ2FsbCBVU0VSLjE3MTogV0lOSEVMUCgweDAyYWMsMHgwMWZmMDViNCAiQ09NRVQuSExQIiwweDAwMDIsMHgwMDAwMDAwMCkgcmV0PTAxY2Y6MTA3MCBkcz0wMWZmCitDYWxsVG8xNihmdW5jPTAxMTc6MDA4MCxkcz0wMWZmKQorQ2FsbCBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldD0wMGE3OjBhMmQgZHM9MDAyYgorUmV0ICBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldHZhbD0weDAwMDAgcmV0PTAwYTc6MGEyZCBkcz0wMDJiCitSZXQgIFVTRVIuMTcxOiBXSU5IRUxQKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDcwIGRzPTAxZmYKK0NhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAxYmUpIHJldD0wMWRmOjNlMjkgZHM9MDFmZgorUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDFkZjozZTI5IGRzPTAxZmYKK0NhbGwgS0VSTkVMLjUyOiBGUkVFUFJPQ0lOU1RBTkNFKDB4MDJjZjAwYmEpIHJldD0wMWY3OjE0NjAgZHM9MDFmZgorUmV0ICBLRVJORUwuNTI6IEZSRUVQUk9DSU5TVEFOQ0UoKSByZXR2YWw9MHgwMDAxIHJldD0wMWY3OjE0NjAgZHM9MDFmZgorQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBJIHRoaW5rIHRoYXQgdGhlIGNhbGwgdG8gPGZ1bmN0aW9uPk1lc3NhZ2VCb3goKTwvZnVuY3Rpb24+CisgICAgICAgICAgICAgIGluIHRoaXMgZXhhbXBsZSBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gY2F1c2VkIGJ5IGEKKyAgICAgICAgICAgICAgd3JvbmcgcmVzdWx0IHZhbHVlIG9mIHNvbWUgcHJldmlvdXNseSBleGVjdXRlZCBmdW5jdGlvbgorICAgICAgICAgICAgICAoaXQncyBoYXBwZW5pbmcgcXVpdGUgb2Z0ZW4gbGlrZSB0aGF0KSwgYnV0IGluc3RlYWQgdGhlCisgICAgICAgICAgICAgIG1lc3NhZ2Vib3ggY29tcGxhaW5zIGFib3V0IGEgcnVudGltZSBlcnJvciBhdAorICAgICAgICAgICAgICA8bGl0ZXJhbD4weDAwMDQ6MHgxMDU2PC9saXRlcmFsPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBBcyB0aGUgc2VnbWVudCB2YWx1ZSBvZiB0aGUgYWRkcmVzcyBpcyBvbmx5CisgICAgICAgICAgICAgIDxsaXRlcmFsPjQ8L2xpdGVyYWw+LCBJIHRoaW5rIHRoYXQgdGhhdCBpcyBvbmx5IGFuIGludGVybmFsCisgICAgICAgICAgICAgIHByb2dyYW0gdmFsdWUuIEJ1dCB0aGUgb2Zmc2V0IGFkZHJlc3MgcmV2ZWFscyBzb21ldGhpbmcKKyAgICAgICAgICAgICAgcXVpdGUgaW50ZXJlc3Rpbmc6IE9mZnNldCA8bGl0ZXJhbD4xMDU2PC9saXRlcmFsPiBpcworICAgICAgICAgICAgICA8ZW1waGFzaXM+dmVyeTwvZW1waGFzaXM+IGNsb3NlIHRvIHRoZSByZXR1cm4gYWRkcmVzcyBvZgorICAgICAgICAgICAgICA8ZnVuY3Rpb24+RlJFRUxJQlJBUlkoKTwvZnVuY3Rpb24+OgorICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzFmKSByZXQ9MDFjZjoxMDVjIGRzPTAxZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4KKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBQcm92aWRlZCB0aGF0IHNlZ21lbnQgPGxpdGVyYWw+MHgwMDA0PC9saXRlcmFsPiBpcyBpbmRlZWQgc2VnbWVudAorICAgICAgICAgICAgICA8bGl0ZXJhbD4weDFjZjwvbGl0ZXJhbD4sIHdlIG5vdyB3ZSBjYW4gdXNlIElEQSAgICAgICAgICAgICAgICAgKGF2YWlsYWJsZSBhdAorICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJmdHA6Ly9mdHAudW5pLWtvZWxuLmRlL3BjL21zZG9zL3Byb2dyYW1taW5nL2Fzc2VtYmxlci9pZGEzNWJ4LnppcCI+CisgICAgICAgICAgICAgICAgZnRwOi8vZnRwLnVuaS1rb2Vsbi5kZS9wYy9tc2Rvcy9wcm9ncmFtbWluZy9hc3NlbWJsZXIvaWRhMzVieC56aXA8L3VsaW5rPikgdG8KKyAgICAgICAgICAgICAgZGlzYXNzZW1ibGUgdGhlIHBhcnQgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiBXZSBqdXN0IGhhdmUgdG8gZmluZCB0aGUgYWRkcmVzcyBvZgorICAgICAgICAgICAgICB0aGUgY2FsbCB0byA8ZnVuY3Rpb24+RnJlZUxpYnJhcnkoKTwvZnVuY3Rpb24+LiBTb21lIGxpbmVzIGJlZm9yZSB0aGF0IHRoZQorICAgICAgICAgICAgICBydW50aW1lIGVycm9yIG9jY3VycmVkLiBCdXQgYmUgY2FyZWZ1bCEgSW4gc29tZSBjYXNlcyB5b3UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAgICAgICBkaXNhc3NlbWJsZSB0aGUgbWFpbiBwcm9ncmFtLCBidXQgaW5zdGVhZCBzb21lIERMTCBjYWxsZWQgYnkgaXQgaW4gb3JkZXIgdG8gZmluZAorICAgICAgICAgICAgICB0aGUgY29ycmVjdCBwbGFjZSB3aGVyZSB0aGUgcnVudGltZSBlcnJvciBvY2N1cnJlZC4gVGhhdCBjYW4gYmUgZGV0ZXJtaW5lZCBieQorICAgICAgICAgICAgICBmaW5kaW5nIHRoZSBvcmlnaW4gb2YgdGhlIHNlZ21lbnQgdmFsdWUgKGluIHRoaXMgY2FzZSA8bGl0ZXJhbD4weDFjZjwvbGl0ZXJhbD4pLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGNyZWF0ZWQgYSByZWxheSBmaWxlIG9mIHNvbWUgY3Jhc2hpbmcKKyAgICAgICAgICAgICAgcHJvZ3JhbSBhbmQgd2FudCB0byBzZXQgYSBicmVha3BvaW50IGF0IGEgY2VydGFpbgorICAgICAgICAgICAgICBsb2NhdGlvbiB3aGljaCBpcyBub3QgeWV0IGF2YWlsYWJsZSBhcyB0aGUgcHJvZ3JhbSBsb2FkcworICAgICAgICAgICAgICB0aGUgYnJlYWtwb2ludCdzIHNlZ21lbnQgZHVyaW5nIGV4ZWN1dGlvbiwgeW91IG1heSBzZXQgYQorICAgICAgICAgICAgICBicmVha3BvaW50IHRvIDxmdW5jdGlvbj5HZXRWZXJzaW9uMTYvMzI8L2Z1bmN0aW9uPiBhcworICAgICAgICAgICAgICB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2ZXJ5IG9mdGVuLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoZW4gZG8gYSA8dXNlcmlucHV0PmM8L3VzZXJpbnB1dD4gdW50aWwgeW91IGFyZSBhYmxlIHRvCisgICAgICAgICAgICAgIHNldCB0aGlzIGJyZWFrcG9pbnQgd2l0aG91dCBlcnJvciBtZXNzYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFNvbWUgdXNlZnVsIHByb2dyYW1zOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgICA8dGVybT4KKyAgICAgICAgICAgICAgICAgIDxhcHBsaWNhdGlvbj5JREE8L2FwcGxpY2F0aW9uPjogCisgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9ImZ0cDovL2Z0cC51bmkta29lbG4uZGUvcGMvbXNkb3MvcHJvZ3JhbW1pbmcvYXNzZW1ibGVyL2lkYTM1YnguemlwIj4KKyAgICAgICAgICAgICAgICAgICAgICBmdHA6Ly9mdHAudW5pLWtvZWxuLmRlL3BjL21zZG9zL3Byb2dyYW1taW5nL2Fzc2VtYmxlci9pZGEzNWJ4LnppcDwvdWxpbms+CisgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDwvdGVybT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgKlZlcnkqIGdvb2QgRE9TIGRpc2Fzc2VtYmxlciAhIEl0J3MgYmFkbHkgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBkZWJ1Z2dpbmcgV2luZSBzb21ldGltZXMuCisgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgICAgPHRlcm0+CisgICAgICAgICAgICAgICAgICA8YXBwbGljYXRpb24+WFJBWTwvYXBwbGljYXRpb24+OgorICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJmdHA6Ly9mdHAudGgtZGFybXN0YWR0LmRlL3B1Yi9tYWNoaW5lcy9tcy1kb3MvU2ltVGVsL21zZG9zL2FzbXV0aWwveHJheTE1LnppcCI+CisgICAgICAgICAgICAgICAgICAgICAgZnRwOi8vZnRwLnRoLWRhcm1zdGFkdC5kZS9wdWIvbWFjaGluZXMvbXMtZG9zL1NpbVRlbC9tc2Rvcy9hc211dGlsL3hyYXkxNS56aXA8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3Rlcm0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRyYWNlcyBET1MgY2FsbHMgKEludCAyMWgsIERQTUksIC4uLikuIFVzZSBpdCB3aXRoCisgICAgICAgICAgICAgICAgICAgIFdpbmRvd3MgdG8gY29ycmVjdCBmaWxlIG1hbmFnZW1lbnQgcHJvYmxlbXMgZXRjLgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICAgIDx0ZXJtPgorICAgICAgICAgICAgICAgICAgPGFwcGxpY2F0aW9uPnBlZHVtcDwvYXBwbGljYXRpb24+OgorICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vb2FrLm9ha2xhbmQuZWR1L3B1Yi9zaW10ZWxuZXQvd2luOTUvcHJvZy9wZWR1bXAuemlwIj4KKyAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vb2FrLm9ha2xhbmQuZWR1L3B1Yi9zaW10ZWxuZXQvd2luOTUvcHJvZy9wZWR1bXAuemlwPC91bGluaz4KKyAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgPC90ZXJtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEdW1wcyB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBvZiBhIFBFIChQb3J0YWJsZQorICAgICAgICAgICAgICAgICAgICBFeGVjdXRhYmxlKSBETEwuCisgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICA8dGl0bGU+U29tZSBiYXNpYyBkZWJ1Z2dlciB1c2FnZXM6PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBZnRlciBzdGFydGluZyB5b3VyIHByb2dyYW0gd2l0aAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cit3aW5lIC1kZWJ1ZyBteXByb2cuZXhlCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB0aGUgcHJvZ3JhbSBsb2FkcyBhbmQgeW91IGdldCBhIHByb21wdCBhdCB0aGUgcHJvZ3JhbQorICAgICAgICAgIHN0YXJ0aW5nIHBvaW50LiBUaGVuIHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CisgIGIgUm91dGluZU5hbWUgICAgICAoYnkgb3V0aW5lIG5hbWUpIE9SCisgIGIgKjB4ODEyNTc1ICAgICAgICAoYnkgYWRkcmVzcykKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZW4geW91IGhpdCA8Y29tbWFuZD5jPC9jb21tYW5kPiAoY29udGludWUpIHRvIHJ1biB0aGUKKyAgICAgICAgICBwcm9ncmFtLiBJdCBzdG9wcyBhdCB0aGUgYnJlYWtwb2ludC4gWW91IGNhbiB0eXBlCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KKyAgc3RlcCAgICAgICAgICAgICAgICh0byBzdGVwIG9uZSBsaW5lKSBPUgorICBzdGVwaSAgICAgICAgICAgICAgKHRvIHN0ZXAgb25lIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gYXQgYSB0aW1lOworICAgICAgICAgICAgICAgICAgICAgIGhlcmUsIGl0IGhlbHBzIHRvIGtub3cgdGhlIGJhc2ljIDM4NgorICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uIHNldCkKKyAgaW5mbyByZWcgICAgICAgICAgICh0byBzZWUgcmVnaXN0ZXJzKQorICBpbmZvIHN0YWNrICAgICAgICAgKHRvIHNlZSBoZXggdmFsdWVzIGluIHRoZSBzdGFjaykKKyAgaW5mbyBsb2NhbCAgICAgICAgICh0byBzZWUgbG9jYWwgdmFyaWFibGVzKQorICBsaXN0ICZsdDtsaW5lIG51bWJlciZndDsgKHRvIGxpc3Qgc291cmNlIGNvZGUpCisgIHggJmx0O3ZhcmlhYmxlIG5hbWUmZ3Q7ICAodG8gZXhhbWluZSBhIHZhcmlhYmxlOyBvbmx5IHdvcmtzIGlmIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb24pCisgIHggMHg0MjY5OTc4ICAgICAgICAodG8gZXhhbWluZSBhIG1lbW9yeSBsb2NhdGlvbikKKyAgPyAgICAgICAgICAgICAgICAgIChoZWxwKQorICBxICAgICAgICAgICAgICAgICAgKHF1aXQpCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCeSBoaXR0aW5nIDxrZXljYXA+RW50ZXI8L2tleWNhcD4sIHlvdSByZXBlYXQgdGhlIGxhc3QKKyAgICAgICAgICBjb21tYW5kLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9ImN2cy1yZWdyZXNzaW9uIj4KKyAgICAgIDx0aXRsZT5Ib3cgdG8gZG8gcmVncmVzc2lvbiB0ZXN0aW5nIHVzaW5nIEN2czwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IEdlcmFyZCBQYXRlbCAoPz8/KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHM8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEEgcHJvYmxlbSB0aGF0IGNhbiBoYXBwZW4gc29tZXRpbWVzIGlzICdpdCB1c2VkIHRvIHdvcmsKKyAgICAgICAgYmVmb3JlLCBub3cgaXQgZG9lc24ndCBhbnltb3JlLi4uJy4gSGVyZSBpcyBhIHN0ZXAgYnkgc3RlcAorICAgICAgICBwcm9jZWR1cmUgdG8gdHJ5IHRvIHBpbnBvaW50IHdoZW4gdGhlIHByb2JsZW0gb2NjdXJlZC4gVGhpcyBpcworICAgICAgICAqTk9UKiBmb3IgY2FzdWFsIHVzZXJzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdldCB0aGUgJ2Z1bGwgY3ZzJyBhcmNoaXZlIGZyb20gd2luZWhxLiBUaGlzIGFyY2hpdmUgaXMKKyAgICAgICAgICAgIHRoZSBjdnMgdHJlZSBidXQgd2l0aCB0aGUgdGFncyBjb250cm9saW5nIHRoZSB2ZXJzaW9uaW5nCisgICAgICAgICAgICBzeXN0ZW0uIEl0J3MgYSBiaWcgZmlsZSAoPiAxNSBtZWcpIHdpdGggYSBuYW1lIGxpa2UKKyAgICAgICAgICAgIGZ1bGwtY3ZzLSZsdDtsYXN0IHVwZGF0ZSBkYXRlJmd0OyAoaXQncyBtb3JlIHRoYW4gMTAwbWIKKyAgICAgICAgICAgIHdoZW4gdW5jb21wcmVzc2VkLCB5b3UgY2FuJ3QgdmVyeSB3ZWxsIGRvIHRoaXMgd2l0aAorICAgICAgICAgICAgc21hbGwsIG9sZCBjb21wdXRlcnMgb3Igc2xvdyBJbnRlcm5ldCBjb25uZWN0aW9ucykuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICB1bnRhciBpdCBpbnRvIGEgcmVwb3NpdG9yeSBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8c2NyZWVuPgorY2QgL2hvbWUvZ2VyYXJkCit0YXIgLXp4ZmZ1bGwtY3ZzLTIwMDAtMDUtMjAudGFyLmd6CittdiB3aW5lIHJlcG9zaXRvcnkKKyAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZXh0cmFjdCBhIG5ldyBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IG11c3QKKyAgICAgICAgICAgIG5vdCBiZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSBlbHNlCisgICAgICAgICAgICA8Y29tbWFuZD5jdnM8L2NvbW1hbmQ+IHdpbGwgdGhpbmsgaXQncyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgZGVueSB5b3UgYW4gZXh0cmFjdGlvbiBpbiB0aGUgcmVwb3NpdG9yeToKKyAgICAgICAgICA8c2NyZWVuPgorY2QgL2hvbWUvZ2VyYXJkCittdiB3aW5lIHdpbmVfY3VycmVudCAoLT4gdGhpcyBwcm90ZWN0cyB5b3VyIGN1cnJlbnQgd2luZSBzYW5kYm94LCBpZiBhbnkpCitleHBvcnQgQ1ZTUk9PVD0vaG9tZS9nZXJhcmQvcmVwb3NpdG9yeQorY2QgL2hvbWUvZ2VyYXJkCitjdnMgLWQgJENWU1JPT1QgY2hlY2tvdXQgd2luZQorICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byBkbyBhIGNoZWNrb3V0IGF0IGEgZ2l2ZW4KKyAgICAgICAgICAgIGRhdGU7IHlvdSBhbHdheXMgZG8gdGhlIGNoZWNrb3V0IGZvciB0aGUgbGFzdCBkYXRlIHdoZXJlCisgICAgICAgICAgICB0aGUgZnVsbC1jdnMteHh4IHNuYXBzaG90IHdhcyBnZW5lcmF0ZWQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICB5b3Ugd2lsbCBoYXZlIG5vdyBpbiB0aGUgPGZpbGVuYW1lPn4vd2luZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgYW4gaW1hZ2Ugb2YgdGhlIGN2cyB0cmVlLCBvbiB0aGUgY2xpZW50IHNpZGUuCisgICAgICAgICAgICBOb3cgdXBkYXRlIHRoaXMgaW1hZ2UgdG8gdGhlIGRhdGUgeW91IHdhbnQ6CisgICAgICAgICAgPHNjcmVlbj4KK2NkIC9ob21lL2dlcmFyZC93aW5lCitjdnMgLWQgJENWU1JPT1QgdXBkYXRlIC1EICIxOTk5LTA2LTAxIiAgIAorICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkYXRlIGZvcm1hdCBpcyA8bGl0ZXJhbD5ZWVlZLU1NLUREPC9saXRlcmFsPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNYW55IG1lc3NhZ2VzIHdpbGwgaW5mb3JtIHlvdSB0aGF0IG1vcmUgcmVjZW50IGZpbGVzIGhhdmUKKyAgICAgICAgICAgIGJlZW4gZGVsZXRlZCB0byBzZXQgYmFjayB0aGUgY2xpZW50IGN2cyB0cmVlIHRvIHRoZSBkYXRlCisgICAgICAgICAgICB5b3UgYXNrZWQsIGZvciBleGFtcGxlOgorICAgICAgICAgIDxzY3JlZW4+CitjdnMgdXBkYXRlOiB0c3gxMS90c194Zjg2ZGdhMi5jIGlzIG5vIGxvbmdlciBpbiB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxjb21tYW5kPmN2cyB1cGRhdGU8L2NvbW1hbmQ+IGlzIG5vdCBsaW1pdGVkIHRvIHVwZ3JhZGUgdG8KKyAgICAgICAgICAgIGEgKm5ld2VyKiB2ZXJzaW9uIGFzIEkgaGF2ZSBiZWxpZXZlZCBmb3IgZmFyIHRvbyBsb25nIDotKAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm93IHByb2NlZWQgYXMgZm9yIGEgbm9ybWFsIHVwZGF0ZToKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHNjcmVlbj4KKy4vY29uZmlndXJlCittYWtlIGRlcGVuZCAmJiBtYWtlCisgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBoYXZlIGZvdW5kIHRoZSBleGFjdCBkYXRlIHdoZW4gYSBidWcgd2FzIGFkZGVkIHRvCisgICAgICAgICAgICB0aGUgY3ZzIHRyZWUsIHVzZSBzb21ldGhpbmcgbGlrZSA6CisgICAgICAgICAgPHNjcmVlbj4KK2N2cyAtZCAkQ1ZTUk9PVCBkaWZmIC1EICIxOTk5LTA3LTEwIiAtRCAiMTk5OS0wNy0xMiIKKyAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICAgIHRvIGdldCBhbGwgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGxhc3QgY3ZzIHRyZWUKKyAgICAgICAgICAgIHZlcnNpb24ga25vd24gdG8gd29yayBhbmQgY29kZSB0aGF0IGZpcnN0IGRpc3BsYXllZCB0aGUKKyAgICAgICAgICAgIG1pc2JlaGF2aW9yLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBJIGRpZCBub3QgaW5jbHVkZSBmbGFncyBmb3IgPGNvbW1hbmQ+ZGlmZjwvY29tbWFuZD4KKyAgICAgICAgICAgICAgc2luY2UgdGhleSBhcmUgaW4gbXkgPGZpbGVuYW1lPi5jdnNyYzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8c2NyZWVuPgorY3ZzIC16IDMKK3VwZGF0ZSAtZFBBCitkaWZmIC11CisgICAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGcm9tIHRoaXMgZGlmZiBmaWxlLCBwYXJ0aWN1bGFybHkgdGhlIGZpbGUgbmFtZXMsIGFuZCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5DaGFuZ2VMb2c8L2ZpbGVuYW1lPiwgaXQncyB1c3VhbGx5IHBvc3NpYmxlIHRvCisgICAgICAgICAgICBmaW5kIHRoZSBkaWZmZXJlbnQgaW5kaXZpZHVhbCBwYXRjaGVzIHRoYXQgd2VyZSBkb25lIGF0CisgICAgICAgICAgICB0aGlzIHRpbWUuIAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIGFueSBub24tcHJvZ3JhbW1lciByZWFkcyB0aGlzLCB0aGUgZmFzdGVzdCBtZXRob2QgdG8gZ2V0CisgICAgICAgICAgICBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIHByb2JsZW0gb2NjdXJlZCBpcyB0byB1c2UgYSBiaW5hcnkKKyAgICAgICAgICAgIHNlYXJjaCwgdGhhdCBpcywgaWYgdGhlIHByb2JsZW0gb2NjdXJlZCBpbiAxOTk5LCBzdGFydCBhdAorICAgICAgICAgICAgbWlkLXllYXIsIHRoZW4gaXMgdGhlIHByb2JsZW0gaXMgYWxyZWFkeSBoZXJlLCBiYWNrIHRvIDFzdAorICAgICAgICAgICAgQXByaWwsIGlmIG5vdCwgdG8gMXN0IE9jdG9iZXIsIGFuZCBzbyBvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gc3RhcnQgZnJvbSB0aGUgbGFzdCB3b3JraW5nIHZlcnNpb24KKyAgICAgICAgICAgIGFuZCB0byBkaWcgdGhlIGluZGl2aWR1YWwgY29udHJpYnV0aW9ucyBmcm9tCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmludGVncml0YS5jb20vY2dpLWxvY2FsL2x3Z2F0ZS5wbC9XSU5FLVBBVENIRVMvIj4KKyAgICAgICAgICAgICAgaHR0cDovL3d3dy5pbnRlZ3JpdGEuY29tL2NnaS1sb2NhbC9sd2dhdGUucGwvV0lORS1QQVRDSEVTLzwvdWxpbms+CisgICAgICAgICAgICAod2hlcmUgdGhlIFdpbmUgcGF0Y2hlcyBtYWlsaW5nIGxpc3QgaXMgYXJjaGl2ZWQpCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgdGhlIHBhdGNoIHdhcyBkb25lIGJ5IHRoZSBXaW5lIG1haW50YWluZXIgb3IgaWYgaXQgd2FzCisgICAgICAgICAgICBzZW50IGRpcmVjdGx5IHRvIGhpcyBtYWlsIGFkZHJlc3Mgd2l0aG91dCBnb2luZyBmaXJzdCB0aHJvdWdoIAorICAgICAgICAgICA8dWxpbmsgdXJsPSJtYWlsdG86d2luZS1wYXRjaGVzQHdpbmVocS5jb20iPndpbmUtcGF0Y2hlczwvdWxpbms+LAorICAgICAgICAgICAgeW91IGFyZSBvdXQgb2YgbHVjayBhcyB5b3Ugd2lsbCBuZXZlciBmaW5kIHRoZSBwYXRjaCBpbgorICAgICAgICAgICAgdGhlIGFyY2hpdmUuIElmIGl0IGlzLCBpdCdzIG9mdGVuIHBvc3NpYmxlIHRvIGFwcGx5IHRoZQorICAgICAgICAgICAgcGF0Y2hlcyBvbmUgYnkgb25lIHRvIGxhc3Qgd29ya2luZyBjdnMgc25hcHNob3QsIGNvbXBpbGUgYW5kIHRlc3QuCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBzYXZlZCB0aGUgbmV4dCBjYW5kaWRhdGUgYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9nZXJhcmQvYnVnZ2VkcGF0Y2gxLnR4dDwvZmlsZW5hbWU+OgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8c2NyZWVuPgorY2QgL2hvbWUvZ2VyYXJkL3dpbmUKK3BhdGNoIC1wIDAgJmx0OyAvaG9tZS9nZXJhcmQvYnVnZ2VkcGF0Y2gxLnR4dAorICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmV3YXJlIHRoYXQgdGhlIGNvbW1pdHRlZCBwYXRjaCBpcyBub3QgYWx3YXlzIGlkZW50aWNhbCB0bworICAgICAgICAgICAgdGhlIHBhdGNoIHRoYXQgdGhlIGF1dGhvciBzZW50IHRvIHdpbmUtcGF0Y2hlcywgYXMKKyAgICAgICAgICAgIHNvbWV0aW1lcyB0aGUgV2luZSBtYWludGFpbmVyIGNoYW5nZXMgdGhpbmdzIGEgYml0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBmaW5kIG9uZSBwYXRjaCB0aGF0IGlzIGdldHRpbmcgdGhlIGN2cyBzb3VyY2UgdHJlZSB0bworICAgICAgICAgICAgcmVwcm9kdWNlIHRoZSBwcm9ibGVtLCB5b3UgaGF2ZSBhbG1vc3Qgd29uOyBwb3N0IHRoZSBwcm9ibGVtIG9uCisgICAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy53aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+IGFuZCB0aGVyZQorICAgICAgICAgICAgaXMgYSBjaGFuY2UgdGhhdCB0aGUgYXV0aG9yIHdpbGwganVtcCBpbiB0byBzdWdnZXN0IGEgZml4OyBvcgorICAgICAgICAgICAgdGhlcmUgaXMgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSB0byBsb29rIGhhcmQgYXQgdGhlIHBhdGNoIHVudGlsCisgICAgICAgICAgICBpdCBpcyBjb2VyY2VkIHRvIHJldmVhbCB3aGVyZSBpcyB0aGUgYnVnIDotKSAKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Rpc3RyaWJ1dG9ycyBiL2RvY3VtZW50YXRpb24vZGlzdHJpYnV0b3JzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzhhZjhhLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vZGlzdHJpYnV0b3JzCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLQkJQSBzbWFsbCBXSU5FIGRpc3RyaWJ1dGlvbiBndWlkZS4KLQotV2hpbGUgcGFja2FnaW5nIFdJTkUgZm9yIG9uZSBvZiB0aGUgTGludXggZGlzdHJpYnV0aW9ucyBJIGNhbWUgYWNyb3NzCi1zZXZlcmFsIHBvaW50cyB3aGljaCBoYXZlIG5vdCBiZWVuIGNsYXJpZmllZCB5ZXQuIFBhcnRpY3VsYXJseSBhIGhvdy10bwotZm9yIFdJTkUgcGFja2FnaW5nIGRpc3RyaWJ1dG9ycyBpcyBtaXNzaW5nLiBUaGlzIGRvY3VtZW50IHRyaWVzIHRvIGdpdmUKLWEgYnJpZWYgb3ZlcnZpZXcgb3ZlciB0aGUgcmF0aW9uYWxlcyBJIHRob3VnaHQgdXAgYW5kIGhvdyBJIHRyaWVkIHRvCi1pbXBsZW1lbnQgaXQuCi0oV2hpbGUgdGhlIGV4YW1wbGVzIHVzZSAicnBtIiBtb3N0IG9mIHRoaXMgc3R1ZmYgY2FuIGJlIGFwcGxpZWQgdG8gb3RoZXIKLXBhY2thZ2VycyB0b28uKQotCi1OT1RFIFRIQVQgWU9VIFNIT1VMRCBSRUNIRUNLIFRISVMgRklMRSBFVkVSWSBUV08gTU9OVEhTIE9SIFNPCi0oZGlmZiAtdU4gY29tZXMgdG8gbXkgbWluZCBoZXJlLi4uKS4KLVdlJ2xsIGJlIGFkZGluZyBzdHVmZiBjb25zdGFudGx5IGhlcmUgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgV2luZQotZW52aXJvbm1lbnQgIQotCi0xLiBSYXRpb25hbGVzCi0KLUEgV0lORSBpbnN0YWxsIHNob3VsZDoKLWEuIE5vdCBoYXZlIGEgd29ybGQgd3JpdGVhYmxlIGRpcmVjdG9yeSAoLXRyZWUpLgotYi4gUmVxdWlyZSBvbmx5IGFzIG11Y2ggdXNlciBpbnB1dCBhcyBuZWVkZWQuIEl0IHdvdWxkIGJlIHZlcnkgZ29vZCBpZiBpdAotICAgd291bGQgbm90IHJlcXVpcmUgYW55IGF0IGFsbC4gSnVzdCBsZXQgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGRvICJycG0KLSAgIC1pIHdpbmUucnBtIiBhbmQgbGV0IGFueSB1c2VyIGJlIGFibGUgdG8gcnVuICJ3aW5lIHNvbC5leGUiIGluc3RhbnRseS4KLWMuIEdpdmUgdGhlIHVzZXIgYXMgbXVjaCBmbGV4aWJpbGl0eSBhcyBwb3NzaWJsZSB0byBpbnN0YWxsIGhpcyBvd24KLSAgIGFwcGxpY2F0aW9ucywgZG8gaGlzIG93biBjb25maWd1cmluZyBldGMuCi1kLiBDb21lIGFzIHByZWNvbmZpZ3VyZWQgYXMgcG9zc2libGUsIHNvIHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgdG8gY2hhbmdlCi0gICBhbnkgY29uZmlndXJhdGlvbiBmaWxlcy4KLWUuIFVzZSBvbmx5IGFzIG11Y2ggZGlza3NwYWNlIGFzIG5lZWRlZCBwZXIgdXNlci4KLQotQSBXSU5FIGluc3RhbGwgbmVlZHM6Ci1mLiBBIHdyaXRlYWJsZSBDOlwgZGlyZWN0b3J5IHN0cnVjdHVyZSBvbiBhIHBlciB1c2VyIGJhc2lzLiBBcHBsaWNhdGlvbnMgZG8KLSAgIGR1bXAgLmluaSBmaWxlcyBpbnRvIGM6XHdpbmRvd3MsIGluc3RhbGxlcnMgZHVtcCAuZXhlLCAuZGxsIGFuZCBtb3JlIGludG8KLSAgIGM6XHdpbmRvd3NcIGFuZCBzdWJkaXJlY3RvcmllcyBvciBpbnRvIEM6XFByb2dyYW0gRmlsZXNcLgotZy4gVGhlIC5leGUgYW5kIC5kbGwgZnJvbSBhIGdsb2JhbCByZWFkLW9ubHkgV2luZG93cyBpbnN0YWxsYXRpb24gdG8gYmUgCi0gICBmb3VuZCBieSBhcHBsaWNhdGlvbnMuCi1oLiBTb21lIHNwZWNpYWwgLmRsbCBhbmQgLmV4ZSBmaWxlcyBpbiB0aGUgd2luZG93c1xzeXN0ZW0gZGlyZWN0b3J5LCBzaW5jZQotICAgYXBwbGljYXRpb25zIGRpcmVjdGx5IGNoZWNrIGZvciB0aGVpciBwcmVzZW5jZS4KLWkuIFNvbWUgc3BlY2lhbCBwcm9ncmFtIGVudmlyb25tZW50LgotCi0KLTIuIEltcGxlbWVudGF0aW9uCi0KLTIuMSBCdWlsZGluZyB0aGUgcGFja2FnZQotCi1XSU5FIGlzIGNvbmZpZ3VyZWQgdGhlIHVzdWFsIHdheSAoZGVwZW5kaW5nIG9uIHlvdXIgYnVpbGRlbnZpcm9ubWVudCkuCi1UaGUgInByZWZpeCIgaXMgY2hvc2VuIHVzaW5nIHlvdXIgYXBwbGljYXRpb24gcGxhY2VtZW50IHBvbGljeQotKC91c3IvLC91c3IvWDExUjYvLCAvb3B0L3dpbmUvIG9yIHNpbWlsYXIpLiAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKLSh3aW5lLmNvbmYsIHdpbmUudXNlcnJlZywgd2luZS5zeXN0ZW1yZWcpIGFyZSB0YXJnZXRlZCBmb3IgL2V0Yy93aW5lLwotKHJhdGlvbmFsZTogRkhTIDIuMCwgbXVsdGlwbGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBhIHBhY2thZ2UpLgotCi1FeGFtcGxlIChzcGxpdCB0aGlzIGludG8gJWJ1aWxkIGFuZCAlaW5zdGFsbCBzZWN0aW9uIGZvciBycG0pOgotCUNGTEFHUz0kUlBNX09QVF9GTEFHUyBcCi0JLi9jb25maWd1cmUgLS1wcmVmaXg9L3Vzci9YMTFSNiAtLXN5c2NvbmZkaXI9L2V0Yy93aW5lLyAtLWVuYWJsZS1kbGwKLQltYWtlCi0JQlI9JFJQTV9CVUlMRF9ST09UCi0JbWFrZSBpbnN0YWxsIHByZWZpeD0kQlIvdXNyL1gxMVI2LyBzeXNjb25mZGlyPSRCUi9ldGMvd2luZS8KLQlpbnN0YWxsIC1kICRCUi9ldGMvd2luZS8KLQlpbnN0YWxsIC1tIDY0NCB3aW5lLmluaSAkQlIvZXRjL3dpbmUvd2luZS5jb25mCi0KLQkjIFB1dCBhbGwgb3VyIGRsbHMgaW4gYSBzZXBlcmF0ZSBkaXJlY3RvcnkuICh0aGlzIHdvcmtzIG9ubHkgaWYKLQkjIHlvdSBoYXZlIGEgYnVpbGRyb290KQotCWluc3RhbGwgLWQgJEJSL3Vzci9YMTFSNi9saWIvd2luZQotCW12ICRCUi91c3IvWDExUjYvbGliL2xpYiogJEJSL3Vzci9YMTFSNi9saWIvd2luZS8KLQotCSMgdGhlIGNsaXBib2FyZCBzZXJ2ZXIgaXMgc3RhcnRlZCBvbiBkZW1hbmQuCi0JaW5zdGFsbCAtbSA3NTUgd2luZG93cy94MTFkcnYvd2luZWNsaXBzcnYgJEJSL3Vzci9YMTFSNi9iaW4vCi0KLQkjIFRoZSBXSU5FIHNlcnZlciBpcyBuZWVkZWQuCi0JaW5zdGFsbCAtbSA3NTUgc2VydmVyL3dpbmVzZXJ2ZXIgJEJSL3Vzci9YMTFSNi9iaW4vCi0KLUhlcmUgd2UgdW5mb3J0dW5hdGVseSBkbyBuZWVkIHRvIGNyZWF0ZSB3aW5ldXNlci5yZWcgYW5kIHdpbmVzeXN0ZW0ucmVnCi1mcm9tIHRoZSBXSU5FIGRpc3RyaWJ1dGVkIHdpbmVkZWZhdWx0LnJlZy4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZwotLi9yZWdhcGkgb25jZSBmb3Igb25lIGV4YW1wbGUgdXNlciBhbmQgdGhlbiByZXVzaW5nIGhpcyAud2luZS91c2VyLnJlZwotYW5kIC53aW5lL3N5c3RlbS5yZWcgZmlsZXMuIFtGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBkb25lIGJldHRlcl0KLQotCWluc3RhbGwgLW0gNjQ0IHdpbmUuc3lzdGVtcmVnICRCUi9ldGMvd2luZS8KLQlpbnN0YWxsIC1tIDY0NCB3aW5lLnVzZXJyZWcgJEJSL2V0Yy93aW5lLwotCi1UaGVyZSBhcmUgbm93IGEgbG90IG9mIGxpYnJhcmllcyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MsIHNvIGEKLXNlcGVyYXRlIGxpYnJhcnkgZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkLgotCi0JaW5zdGFsbCAtZCA3NTUgJEJSL3Vzci9YMTFSNi9saWIvCi0JbXYgJEJSLwotCi1Zb3Ugd2lsbCBuZWVkIHRvIHBhY2thZ2UgdGhlIGZpbGVzOgotCSRwcmVmaXgvYmluL3dpbmUsICRwcmVmaXgvYmluL2Rvc21vZCwgJHByZWZpeC9saWIvd2luZS8qCi0JJHByZWZpeC9tYW4vbWFuMS93aW5lLjEsICRwcmVmaXgvaW5jbHVkZS93aW5lLyosCi0JJHByZWZpeC9iaW4vd2luZXNlcnZlciwgJHByZWZpeC9iaW4vd2luZWNsaXBzcnYKLQotCSVjb25maWcgL2V0Yy93aW5lLyoKLQklZG9jIC4uLiBjaG9vc2UgZnJvbSB0aGUgdG9wbGV2ZWwgZGlyZWN0b3J5IGFuZCBkb2N1bWVudGF0aW9uLwotCi1UaGUgUG9zdCBpbnN0YWxsIHNjcmlwdDoKLQlpZiAhIGdyZXAgLXEgL3Vzci9YMTFSNi9saWIvd2luZSAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLQkgICAgZWNobyAiL3Vzci9YMTFSNi9saWIvd2luZSIgPj4gL2V0Yy9sZC5zby5jb25mCi0JZmkKLQkvc2Jpbi9sZGNvbmZpZwotCi1UaGUgcG9zdCB1bmluc3RhbGwgc2NyaXB0OgotCWlmIFsgIiQxIiA9IDAgXTsgdGhlbgotCQlwZXJsIC1uaSAtZSAncHJpbnQgdW5sZXNzIG06L3Vzci9YMTFSNi9saWIvd2luZTo7JyAvZXRjL2xkLnNvLmNvbmYKLQlmaQotCS9zYmluL2xkY29uZmlnCi0KLQotMi4yIENyZWF0aW5nIGEgZ29vZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZQotCi1Gb3IgdGhlIHJhdGlvbmFsZXMgb2YgbmVlZGluZyBhcyBsZXNzIGlucHV0IGZyb20gdGhlIHVzZXIgYXMgcG9zc2libGUgCi1hcmlzZXMgdGhlIG5lZWQgZm9yIGEgdmVyeSBnb29kIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG9uZSBzdXBwbGllZAotd2l0aCBXSU5FIGlzIGN1cnJlbnRseSBsYWNraW5nLiBXZSBuZWVkOgotCi0tIFtEcml2ZSBYXToKLSAgKyBBIGZvciB0aGUgZmxvcHB5LiBTcGVjaWZ5IHlvdXIgZGlzdHJpYnV0aW9ucyBkZWZhdWx0IGZsb3BweSBtb3VudHBvaW50Ci0gICAgaGVyZS4gKFBhdGg9L2F1dG8vZmxvcHB5KQotICArIEMgZm9yIHRoZSBDOlwgZGlyZWN0b3J5LiBIZXJlIHdlIHVzZSB0aGUgdXNlcnMgaG9tZWRpcmVjdG9yeSwgZm9yIG1vc3QKLSAgICBhcHBsaWNhdGlvbnMgZG8gc2VlIEM6XCBhcyByb290LXdyaXRlYWJsZSBkaXJlY3Rvcnkgb2YgZXZlcnkgd2luZG93cwotICAgIGluc3RhbGxhdGlvbiBhbmQgdGhpcyBiYXNpY2FsbHkgaXMgaXQgaW4gdGhlIFVOSVgtdXNlciBjb250ZXh0LgotICAgIChQYXRoPSR7SE9NRX0pCi0gICsgUiBmb3IgdGhlIENELVJvbSBkcml2ZS4gU3BlY2lmeSB5b3VyIGRpc3RyaWJ1dGlvbnMgZGVmYXVsdCBDRC1ST00gZHJpdmVzCi0gICAgbW91bnRwb2ludCBoZXJlLiAoUGF0aD0vYXV0by9jZHJvbSkKLSAgKyBUIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZS4gV2UgZG8gdXNlIC90bXAvIChyYXRpb25hbGU6IGJldHdlZW4gcHJvY2VzcwotICAgIHRlbXBvcmFyeSBkYXRhIGJlbG9uZ3MgdG8gL3RtcC8sIEZIUyAyLjApCi0gICsgVyBmb3IgdGhlIG9yaWdpbmFsIFdpbmRvd3MgaW5zdGFsbGF0aW9uLiBUaGlzIGRyaXZlIHBvaW50cyB0byB0aGUKLSAgICB3aW5kb3dzXCBzdWJkaXJlY3Rvcnkgb2YgdGhlIG9yaWdpbmFsIHdpbmRvd3MgaW5zdGFsbGF0aW9uLiBUaGlzIGF2b2lkcwotICAgIHByb2JsZW1zIHdpdGggcmVuYW1lZCAnd2luZG93cycgZGlyZWN0b3JpZXMgKGFzIGZvciBpbnN0YW5jZSAnbG9zZTk1JywKLSAgICAnd2luJyBvciAnc3lzXHdpbjk1JykuIER1cmluZyBjb21waWxlL3BhY2thZ2UvaW5zdGFsbCB3ZSBsZWF2ZSB0aGlzIAotICAgIHRvIGJlICcvJywgaXQgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgYWZ0ZXIgdGhlIHBhY2thZ2UgaW5zdGFsbC4KLSAgKyBaIGZvciB0aGUgVU5JWCBSb290IGRpcmVjdG9yeSAoUGF0aD0vKS4gVGhpcyBhdm9pZHMgYW55IHByb2JsZW1zIHdpdGgKLSAgICAiY291bGQgbm90IGZpbmQgZHJpdmUgZm9yIGN1cnJlbnQgZGlyZWN0b3J5IiB1c2VycyBvY2Nhc2lvbmFseSBjb21wbGFpbgotICAgIGFib3V0IGluIHRoZSBuZXdzZ3JvdXAgYW5kIHRoZSBpcmNjaGFubmVsLiBJdCBhbHNvIG1ha2VzIHRoZSB3aG9sZQotICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYnJvd3NlYWJsZS4gVGhlIHR5cGUgb2YgWiBzaG91bGQgYmUgbmV0d29yaywgc28KLSAgICBhcHBsaWNhdGlvbnMgZXhwZWN0IGl0IHRvIGJlIHJlYWRvbmx5LgotCi0tIFt3aW5lXToKLSAgV2luZG93cz1jOlx3aW5kb3dzXCAJCSh0aGUgd2luZG93cy8gc3ViZGlyZWN0b3J5IGluIHRoZSB1c2VycwotICAJCQkJIGhvbWVkaXJlY3RvcnkpCi0gIFN5c3RlbT1jOlx3aW5kb3dzXHN5c3RlbVwJKHRoZSB3aW5kb3dzL3N5c3RlbSBzdWJkaXJlY3RvcnkgaW4gdGhlIHVzZXJzCi0gIAkJCQkgaG9tZWRpcmVjdG9yeSkKLSAgUGF0aD1jOlx3aW5kb3dzO2M6XHdpbmRvd3Ncc3lzdGVtO2M6XHdpbmRvd3Ncc3lzdGVtMzI7dzpcO3c6XHN5c3RlbTt3OlxzeXN0ZW0zMjsKLSAgOyBVc2luZyB0aGlzIHRyaWNrIHdlIGhhdmUgaW4gZmFjdCB0d28gd2luZG93cyBpbnN0YWxsYXRpb25zIGluIG9uZSwgd2UKLSAgOyBnZXQgdGhlIHN0dWZmIGZyb20gdGhlIHJlYWRvbmx5IGluc3RhbGxhdGlvbiBhbmQgY2FuIHdyaXRlIHRvIG91ciBvd24uCi0gIFRlbXA9dDpcCQkJKHRoZSBURU1QIGRpcmVjdG9yeSkKLS0gW1R3ZWFrLkxheW91dF0KLSAgV2luZUxvb2s9d2luOTUJCShqdXN0IHRoZSBjb29sZXN0IGxvb2sgOykKLS0gUG9zc2libHkgbW9kaWZ5IHRoZSBbc3Bvb2xlcl0sIFtzZXJpYWxwb3J0c10gYW5kIFtwYXJhbGxlbHBvcnRzXSBzZWN0aW9ucy4KLShGSVhNRTogcG9zc2libHkgbW9yZSwgaW5jbHVkaW5nIHByaW50ZXIgc3R1ZmYpCi0KLUFkZCB0aGlzIHByZXBhcmVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB0aGUgcGFja2FnZS4KLQotMi4zIEluc3RhbGxpbmcgV0lORSBmb3IgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCi0KLUluc3RhbGwgdGhlIHBhY2thZ2UgdXNpbmcgdGhlIHVzdWFsIHBhY2thZ2VyICJycG0gLWkgd2luZS5ycG0iLgotWW91IG1heSBlZGl0IC9ldGMvd2luZS93aW5lLmNvbmYsIFtEcml2ZSBXXSwgdG8gcG9pbnQgdG8gYSBwb3NzaWJsZSB3aW5kb3dzCi1pbnN0YWxsYXRpb24gcmlnaHQgYWZ0ZXIgdGhlIGluc3RhbGwuIFRoYXRzIGl0LgotCi1Ob3RlIHRoYXQgb24gTGludXggeW91IHNob3VsZCBzb21laG93IHRyeSB0byBhZGQgdGhlICJ1bmhpZGUiIG1vdW50IG9wdGlvbgotKC0+ICJtYW4gbW91bnQiKSB0byB0aGUgQ0QtUk9NIGVudHJ5IGluIC9ldGMvZnN0YWIgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbCwKLWFzIHNldmVyYWwgc3R1cGlkIFdpbmRvd3MgcHJvZ3JhbXMgbWFyayBzb21lIHNldHVwICghKSBmaWxlcwotYXMgaGlkZGVuIChJU085NjYwKSBvbiBDRC1ST01zLCB3aGljaCB3aWxsIGdyZWF0bHkgY29uZnVzZSB1c2VycwotYXMgdGhleSB3b24ndCBmaW5kIHRoZWlyIHNldHVwIGZpbGVzIG9uIHRoZSBDRC1ST01zIGFzIHRoZXkgd2VyZQotdXNlZCBvbiBXaW5kb3dzIHN5c3RlbXMgd2hlbiAidW5oaWRlIiBpcyBub3Qgc2V0IDstXAotQW5kIG9mIGNvdXJzZSB0aGUgc2V0dXAgcHJvZ3JhbSB3aWxsIGNvbXBsYWluIHRoYXQgInNldHVwLmlucyIgb3Igc29tZSBvdGhlcgotbWVzcyBpcyBtaXNzaW5nLi4uCi1JZiB5b3UgY2hvb3NlIHRvIGRvIHNvLCB0aGVuIHBsZWFzZSBtYWtlIHRoaXMgY2hhbmdlIHZlcmJvc2UgdG8gdGhlIGFkbWluLgotCi0yLjQgSW5zdGFsbGluZyBXSU5FIGZvciB0aGUgdXNlcgotCi1UaGUgdXNlciB3aWxsIG5lZWQgdG8gcnVuIGEgc2V0dXAgc2NyaXB0IGJlZm9yZSB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZgotV0lORS4gVGhpcyBzY3JpcHQgc2hvdWxkOgotLSBDb3B5IC9ldGMvd2luZS93aW5lLmNvbmYgZm9yIHVzZXIgbW9kaWZpY2F0aW9uLgotLSBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCB3aW5kb3dzIGluc3RhbGxhdGlvbiB0byB1c2UgKHdoaWNoCi0gIG1vZGlmaWVzIHRoZSBjb3BpZWQgd2luZS5jb25mIGZpbGUpLgotLSBDcmVhdGUgdGhlIHdpbmRvd3MgZGlyZWN0b3J5IHN0cnVjdHVyZSAoYzpcd2luZG93cyxjOlx3aW5kb3dzXHN5c3RlbSwKLSAgYzpcd2luZG93c1xTdGFydCBNZW51XFByb2dyYW1zLGM6XFByb2dyYW0gRmlsZXMsYzpcRGVza3RvcCwuLi4pCi0KLSAgKEZJWE1FOiBOb3Qgc3VyZSB0aGlzIGlzIG5lZWRlZCBmb3IgYWxsIGZpbGVzOikKLQotLSBTeW1saW5rIGFsbCAuZGxsIGFuZCAuZXhlIGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsIHdpbmRvd3MgaW5zdGFsbGF0aW9uIHRvCi0gIHRoZSB3aW5kb3dzIGRpcmVjdG9yeS4gV2h5PyBTb21lIHByb2dyYW0gcmVmZXJlbmNlICIld2luZG93c2RpciUvZmlsZS5kbGwiCi0gIG9yICIlc3lzdGVtZGlyJS9maWxlLmRsbCIgZGlyZWN0bHkgYW5kIGZhaWwgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCi0KLSAgVGhpcyB3aWxsIGdpdmUgYSBodWdlIG51bWJlciBvZiBzeW1saW5rcywgeWVzLiBIb3dldmVyLCBpZiBhbiBpbnN0YWxsZXIKLSAgbGF0ZXIgb3ZlcndyaXRlcyBvbiBvZiB0aG9zZSBmaWxlcywgaXQgd2lsbCBvdmVyd3JpdGUgdGhlIHN5bWxpbmsgKHNvCi0gIHRoYXQgdGhlIGZpbGUgbm93IGxpZXMgaW4gdGhlIHdpbmRvd3MvIHN1YmRpcmVjdG9yeSkuCi0KLS0gT24gbGF0ZXIgaW52b2NhdGlvbiB0aGUgc2NyaXB0IG1pZ2h0IHdhbnQgdG8gY29tcGFyZSByZWd1bGFyIGZpbGVzIGluIAotICB0aGUgdXNlcnMgd2luZG93cyBkaXJlY3RvcmllcyBhbmQgaW4gdGhlIGdsb2JhbCB3aW5kb3dzIGRpcmVjdG9yaWVzIGFuZAotICByZXBsYWNlIHNhbWUgZmlsZXMgYnkgc3ltbGlua3MgKHRvIGF2b2lkIGRpc2tzcGFjZSBwcm9ibGVtcykuCi0KLURvbmUuCi0KLVRoaXMgcHJvY2VkdXJlIHJlcXVpcmVzOgotLSBNdWNoIHRob3VnaHQgYW5kIHdvcmsgZnJvbSB0aGUgcGFja2FnZXIgKDF4KQotLSBObyB3b3JrIGZvciB0aGUgc3lzYWRtaW4uIFdlbGwgZXhjZXB0IG9uZSAicnBtIC1pIiBhbmQgcG9zc2libGUgb25lIGVkaXQKLSAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLS0gU29tZSBvciBubyB3b3JrIGZyb20gdGhlIHVzZXIsIGV4Y2VwdCBydW5uaW5nIHRoZSBwZXItdXNlciBzZXR1cCBzY3JpcHQKLSAgb25jZS4KLT0+IEl0IHNjYWxlcyB3ZWxsIGFuZCBzdWZmaWNlcyBtb3N0IG9mIHRoZSByYXRpb25hbGVzLgotCi0JCQkJTWFyY3VzIE1laXNzbmVyIDxNYXJjdXMuTWVpc3NuZXJAY2FsZGVyYS5kZT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2FtcGxlIHdpbmUuaW5pIGZvciBPcGVuTGludXggMi54OgotCi07OwotOzsgTVMtRE9TIGRyaXZlcyBjb25maWd1cmF0aW9uCi07OwotOzsgRWFjaCBzZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLTs7IFtEcml2ZSBYXQotOzsgUGF0aD14eHggICAgICAgKFVuaXggcGF0aCBmb3IgZHJpdmUgcm9vdCkKLTs7IFR5cGU9eHh4ICAgICAgIChzdXBwb3J0ZWQgdHlwZXMgYXJlICdmbG9wcHknLCAnaGQnLCAnY2Ryb20nIGFuZCAnbmV0d29yaycpCi07OyBMYWJlbD14eHggICAgICAoZHJpdmUgbGFiZWwsIGF0IG1vc3QgMTEgY2hhcmFjdGVycykKLTs7IFNlcmlhbD14eHggICAgIChzZXJpYWwgbnVtYmVyLCA4IGNoYXJhY3RlcnMgaGV4YWRlY2ltYWwgbnVtYmVyKQotOzsgRmlsZXN5c3RlbT14eHggKHN1cHBvcnRlZCB0eXBlcyBhcmUgJ21zZG9zJy8nZG9zJy8nZmF0JywgJ3dpbjk1Jy8ndmZhdCcsICd1bml4JykKLTs7ICAgVGhpcyBpcyB0aGUgRlMgV2luZSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIG9uIGEgY2VydGFpbgotOzsgICBkaXJlY3Rvcnkgc3RydWN0dXJlLgotOzsgICBSZWNvbW1lbmRlZDoKLTs7ICAgLSAid2luOTUiIGZvciBleHQyZnMsIFZGQVQgYW5kIEZBVDMyCi07OyAgIC0gIm1zZG9zIiBmb3IgRkFUMTYgKHVnbHksIHVwZ3JhZGluZyB0byBWRkFUIGRyaXZlciBzdHJvbmdseSByZWNvbW1lbmRlZCkKLTs7ICAgRE9OJ1QgdXNlICJ1bml4IiB1bmxlc3MgeW91IGludGVuZCB0byBwb3J0IHByb2dyYW1zIHVzaW5nIFdpbmVsaWIgIQotOzsgRGV2aWNlPS9kZXYveHggKG9ubHkgaWYgeW91IHdhbnQgdG8gYWxsb3cgcmF3IGRldmljZSBhY2Nlc3MpCi07OwotCi07Ci07Ci07IEZsb3BweSAnQScgYW5kICdCJwotOwotOyBPcGVuTGludXggdXNlcyBhbiBhdXRvbW91bnRlciB1bmRlciAvYXV0by8sIHNvIHdlIHVzZSB0aGF0IHRvby4KLTsKLVtEcml2ZSBBXQotUGF0aD0vYXV0by9mbG9wcHkvCi1UeXBlPWZsb3BweQotTGFiZWw9RmxvcHB5Ci1TZXJpYWw9ODc2NTQzMjEKLURldmljZT0vZGV2L2ZkMAotRmlsZXN5c3RlbT13aW45NQotCi07IAotOyBDb21tZW50IGluIE9OTFkgaWYgeW91IGhhdmUgYSBzZWNvbmQgZmxvcHB5IG9yIHRoZSBhdXRvbW91bnRlciBoYW5ncwotOyBmb3IgNSBtaW51dGVzLgotOwotO1tEcml2ZSBCXQotO1BhdGg9L2F1dG8vZmxvcHB5Mi8KLTtUeXBlPWZsb3BweQotO0xhYmVsPUZsb3BweQotO1NlcmlhbD04NzY1NDMyMQotO0RldmljZT0vZGV2L2ZkMQotO0ZpbGVzeXN0ZW09d2luOTUKLQotCi07Ci07IERyaXZlICdDJyBsaW5rcyB0byB0aGUgdXNlcnMgaG9tZWRpcmVjdG9yeS4gCi07IAotOyBUaGlzIG11c3QgcG9pbnQgdG8gYSB3cml0ZWFibGUgZGlyZWN0b3J5IHN0cnVjdHVyZSAobm90IHlvdXIgcmVhZG9ubHkKLTsgbW91bnRlZCBET1MgcGFydGl0aW9ucyEpIHNpbmNlIHByb2dyYW1zIHdhbnQgdG8gZHVtcCBzdHVmZiBpbnRvCi07ICJQcm9ncmFtIEZpbGVzLyIgIlByb2dyYW1tZS8iLCAid2luZG93cy8iLCAid2luZG93cy9zeXN0ZW0vIiBldGMuCi07IAotOyBUaGUgYmFzaWMgc3RydWN0dXJlIGlzIHNldCB1cCB1c2luZyB0aGUgY29uZmlnIHNjcmlwdC4KLTsKLVtEcml2ZSBDXQotUGF0aD0ke0hPTUV9Ci1UeXBlPWhkCi1MYWJlbD1NUy1ET1MKLUZpbGVzeXN0ZW09d2luOTUKLQotOwotOyAvdG1wLyBkaXJlY3RvcnkKLTsgCi07IFRoZSB0ZW1wIGRyaXZlIChhbmQgZGlyZWN0b3J5KSBwb2ludHMgdG8gL3RtcC8uIFdpbmRvd3MgcHJvZ3JhbXMgZmlsbCBpdAotOyB3aXRoIGp1bmssIHNvIGl0IGlzIGFwcHJvYmlhdGUuCi07Ci1bRHJpdmUgVF0KLVBhdGg9L3RtcAotVHlwZT1oZAotTGFiZWw9VG1wIERyaXZlCi1GaWxlc3lzdGVtPXdpbjk1Ci0KLTsKLTsgJ1Unc2VyIGhvbWVkaXJlY3RvcnkKLTsgCi07IEp1c3QgaW4gY2FzZSB5b3Ugd2FudCBDOlwgZWxzZXdoZXJlLgotOyAKLVtEcml2ZSBVXQotUGF0aD0ke0hPTUV9Ci1UeXBlPWhkCi1MYWJlbD1Ib21lCi1GaWxlc3lzdGVtPXdpbjk1Ci0KLTsKLTsgQ0QtJ1InT00gZHJpdmUgKGF1dG9tb3VudGVkKQotOyAKLTsgVGhlIGRlZmF1bHQgY2Ryb20gZHJpdmUuCi07Ci07IElmIGFuIGFwcGxpY2F0aW9uIChvciBnYW1lKSB3YW50cyBhIHNwZWNpZmljIENELVJPTSB5b3UgbWlnaHQgaGF2ZSB0bwotOyB0ZW1wb3JhcnkgY2hhbmdlIHRoZSBMYWJlbCB0byB0aGUgb25lIG9mIHRoZSBDRCBpdHNlbGYuCi07Ci07IEhvdyB0byByZWFkIHRoZW0gaXMgZGVzY3JpYmVkIGluIC91c3IvZG9jL3dpbmUtY3ZzLXh4eHh4L2Nkcm9tLWxhYmVscy4KLTsgCi1bRHJpdmUgUl0KLVBhdGg9L2F1dG8vY2Ryb20KLVR5cGU9Y2Ryb20KLUxhYmVsPUNELVJvbQotRmlsZXN5c3RlbT13aW45NQotCi07Ci07IFRoZSBkcml2ZSB3aGVyZSB0aGUgb2xkIHdpbmRvd3MgaW5zdGFsbGF0aW9uIHJlc2lkZXMgKGl0IHBvaW50cyB0byB0aGUgCi07IHdpbmRvd3MvIHN1YmRpcmVjdG9yeSkuCi07IAotOyBUaGUgUGF0aCBpcyBtb2RpZmllZCBieSB0aGUgd2luZXNldHVwIHNjcmlwdC4KLTsKLVtEcml2ZSBXXQotUGF0aD0vCi1UeXBlPW5ldHdvcmsKLUxhYmVsPVdpbmRvd3MKLUZpbGVzeXN0ZW09d2luOTUKLTsKLTsgVGhlIFVOSVggUm9vdCBkaXJlY3RvcnksIHNvIGFsbCBvdGhlciBwcm9ncmFtcyBhbmQgZGlyZWN0b3JpZXMgYXJlIHJlYWNoYWJsZS4KLTsKLTsgdHlwZSBuZXR3b3JrIGlzIHVzZWQgdG8gdGVsbCBwcm9ncmFtcyB0byBub3Qgd3JpdGUgaGVyZS4gCi07Ci1bRHJpdmUgWl0KLVBhdGg9LwotVHlwZT1uZXR3b3JrCi1MYWJlbD1ST09UCi1GaWxlc3lzdGVtPXdpbjk1Ci0KLTsKLTsgU3RhbmRhcmQgV2luZG93cyBwYXRoIGVudHJpZXMuIFdJTkUgd2lsbCBub3Qgd29yayBpZiB0aGV5IGFyZSBpbmNvcnJlY3QuCi07Ci1bd2luZV0KLTsgCi07IFRoZSB3aW5kb3dzLyBkaXJlY3RvcnkuIEl0IG11c3QgYmUgd3JpdGVhYmxlLCBmb3IgcHJvZ3JhbXMgd3JpdGUgaW50byBpdC4KLTsKLVdpbmRvd3M9Yzpcd2luZG93cwotOwotOyBUaGUgd2luZG93cy9zeXN0ZW0vIGRpcmVjdG9yeS4gSXQgbXVzdCBiZSB3cml0ZWFibGUsIGZvciBlc3BlY2lhbGx5IHNldHVwCi07IHByb2dyYW1zIGluc3RhbGwgZGxscyBpbiB0aGVyZS4KLTsKLVN5c3RlbT1jOlx3aW5kb3dzXHN5c3RlbQotOwotOyBUaGUgdGVtcCBkaXJlY3RvcnkuIFNob3VsZCBiZSBjbGVhbmVkIHJlZ3VsYXJ5LCBzaW5jZSBpbnN0YWxsIHByb2dyYW1zIGxlYXZlCi07IGp1bmsgd2l0aG91dCBlbmQgaW4gdGhlcmUuCi07Ci1UZW1wPXQ6XAotOwotOyBUaGUgZGxsIHNlYXJjaCBwYXRoLiBJdCBzaG91bGQgY29udGFpbiBhdCBsZWFzdDoKLTsgLSB0aGUgd2luZG93cyBhbmQgdGhlIHdpbmRvd3Mvc3lzdGVtIGRpcmVjdG9yeSBvZiB0aGUgdXNlci4KLTsgLSB0aGUgZ2xvYmFsIHdpbmRvd3MgYW5kIHdpbmRvd3Mvc3lzdGVtIGRpcmVjdG9yeSAoZnJvbSBhIHBvc3NpYmxlIHJlYWRvbmx5Ci07ICAgd2luZG93cyBpbnN0YWxsYXRpb24gZWl0aGVyIG9uIG1zZG9zIGZpbGVzeXN0ZW1zIG9yIHNvbWV3aGVyZSBpbiB0aGUgVU5JWAotOyAgIGRpcmVjdG9yeSB0cmVlKQotOyAtIGFueSBvdGhlciB3aW5kb3dzIHN0eWxlIGRpcmVjdG9yaWVzIHlvdSB3YW50IHRvIGFkZC4KLTsKLVBhdGg9Yzpcd2luZG93cztjOlx3aW5kb3dzXHN5c3RlbTtjOlx3aW5kb3dzXHN5c3RlbTMyO3Q6XDt3Olw7dzpcc3lzdGVtO3c6XHN5c3RlbTMyCi07Ci07IE91dGRhdGVkIGFuZCBubyBsb25nZXIgdXNlZC4gKGJ1dCBuZWVkcyB0byBiZSBwcmVzZW50KS4KLTsKLVN5bWJvbFRhYmxlRmlsZT0uL3dpbmUuc3ltCi0KLSMgPHdpbmVjb25mPgotCi07IAotOyBEbGwgbG9hZG9yZGVyIGRlZmF1bHRzLiBObyBuZWVkIHRvIG1vZGlmeS4KLTsKLVtEbGxEZWZhdWx0c10KLUVYVFJBX0xEX0xJQlJBUllfUEFUSD0ke0hPTUV9L3dpbmUvY3ZzL2xpYgotRGVmYXVsdExvYWRPcmRlciA9IG5hdGl2ZSwgZWxmZGxsLCBzbywgYnVpbHRpbgotCi07Ci07IFdoYXQgMzIvMTYgZGxscyBiZWxvbmcgdG8gZWFjaCBvdGhlciAoY29udGV4dCB3aXNlKS4gTm8gbmVlZCB0byBtb2RpZnkuCi07Ci1bRGxsUGFpcnNdCi1rZXJuZWwJPSBrZXJuZWwzMgotZ2RpCT0gZ2RpMzIKLXVzZXIJPSB1c2VyMzIKLWNvbW1kbGcJPSBjb21kbGczMgotY29tbWN0cmw9IGNvbWN0bDMyCi12ZXIJPSB2ZXJzaW9uCi1zaGVsbAk9IHNoZWxsMzIKLWx6ZXhwYW5kPSBsejMyCi1tbXN5c3RlbT0gd2lubW0KLW1zdmlkZW8gPSBtc3ZmdzMyCi13aW5zb2NrCT0gd3NvY2szMgotCi07Ci07IFdoYXQgdHlwZSBvZiBkbGwgdG8gdXNlIGluIHRoZWlyIHJlc3BlY3RpdmUgbG9hZG9yZGVyLgotOyAKLVtEbGxPdmVycmlkZXNdCi1rZXJuZWwzMiwgZ2RpMzIsIHVzZXIzMgk9IGJ1aWx0aW4KLWtlcm5lbCwgZ2RpLCB1c2VyCT0gYnVpbHRpbgotdG9vbGhlbHAJCT0gYnVpbHRpbgotY29tZGxnMzIsIGNvbW1kbGcJPSBlbGZkbGwsIGJ1aWx0aW4sIG5hdGl2ZQotdmVyc2lvbiwgdmVyCQk9IGVsZmRsbCwgYnVpbHRpbiwgbmF0aXZlCi1zaGVsbDMyLCBzaGVsbAkJPSBidWlsdGluLCBuYXRpdmUKLWx6MzIsIGx6ZXhwYW5kCQk9IGJ1aWx0aW4sIG5hdGl2ZQotY29tbWN0cmwsIGNvbWN0bDMyCT0gYnVpbHRpbiwgbmF0aXZlCi13c29jazMyLCB3aW5zb2NrCT0gYnVpbHRpbgotYWR2YXBpMzIsIGNydGRsbCwgbnRkbGwJPSBidWlsdGluLCBuYXRpdmUKLW1wciwgd2luc3Bvb2wJCT0gYnVpbHRpbiwgbmF0aXZlCi1kZHJhdywgZGlucHV0LCBkc291bmQJPSBidWlsdGluLCBuYXRpdmUKLXdpbm1tLCBtbXN5c3RlbSAgICAgICAgID0gYnVpbHRpbgotbXN2aWRlbywgbXN2ZnczMiAgICAgICAgPSBidWlsdGluLCBuYXRpdmUKLW1jaWNkYS5kcnYsIG1jaXNlcS5kcnYgID0gYnVpbHRpbiwgbmF0aXZlCi1tY2l3YXZlLmRydgkJPSBidWlsdGluLCBuYXRpdmUKLW1jaWF2aS5kcnYsIG1jaWFuaW0uZHJ2ID0gbmF0aXZlLCBidWlsdGluCi13MzJza3JubCAgICAgICAgICAgICAgICA9IGJ1aWx0aW4KLXduYXNwaTMyLCB3b3czMgkJPSBidWlsdGluCi1zeXN0ZW0sIGRpc3BsYXksIHdwcm9jcwk9IGJ1aWx0aW4KLXdpbmVwcwkJCT0gYnVpbHRpbgotCi07Ci07IE9wdGlvbnMgc2VjdGlvbi4gRG9lcyBub3QgbmVlZCB0byBiZSBlZGl0ZWQuCi07Ci1bb3B0aW9uc10KLTsgYWxsb2NhdGUgaG93IG11Y2ggc3lzdGVtIGNvbG9ycyBvbiBzdGFydHVwLiBObyBuZWVkIHRvIG1vZGlmeS4KLUFsbG9jU3lzdGVtQ29sb3JzPTEwMAotCi07OwotOyBGb250IHNwZWNpZmljYXRpb24uIFlvdSB1c3VhbGx5IGRvIG5vdCBuZWVkIHRvIGVkaXQgdGhpcyBzZWN0aW9uLgotOyAKLTsgUmVhZCBkb2N1bWVudGF0aW9uL2ZvbnRzIGJlZm9yZSBhZGRpbmcgYWxpYXNlcwotOwotW2ZvbnRzXQotOyBUaGUgcmVzb2x1dGlvbiBkZWZpbmVzIHdoYXQgZm9udHMgdG8gdXNlICh1c3VhbGx5IGVpdGhlciA3NSBvciAxMDAgZHBpIGZvbnRzLAotOyBvciBuZWFyZXN0IG1hdGNoKS4KLVJlc29sdXRpb24gPSA5NgotOyBEZWZhdWx0IGZvbnQKLURlZmF1bHQgPSAtYWRvYmUtdGltZXMtCi0KLTsKLTsgc2VyaWFsIHBvcnRzIHVzZWQgYnkgIkNPTTEiICJDT00yIiAiQ09NMyIgIkNPTTQiLiBVc2VmdWwgZm9yIGFwcGxpY2F0aW9ucwotOyB0aGF0IHRyeSB0byBhY2Nlc3Mgc2VyaWFsIHBvcnRzLgotOyAKLVtzZXJpYWxwb3J0c10KLUNvbTE9L2Rldi90dHlTMAotQ29tMj0vZGV2L3R0eVMxCi1Db20zPS9kZXYvbW9kZW0sMzg0MDAKLUNvbTQ9L2Rldi9tb2RlbQotCi07Ci07IHBhcmFsbGVsIHBvcnQocykgdXNlZCBieSAiTFBUMSIgZXRjLiBVc2VmdWwgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHRyeSB0byAKLTsgYWNjZXNzIHRoZXNlIHBvcnRzLgotOwotW3BhcmFsbGVscG9ydHNdCi1McHQxPS9kZXYvbHAwCi0KLTsKLTsgV2hhdCBzcG9vbGluZyBwcm9ncmFtIHRvIHVzZSBvbiBwcmludGluZy4KLTsgVXNlICJ8cHJvZ3JhbSIgb3IgImZpbGVuYW1lIiwgd2hlcmUgdGhlIG91dHB1dCB3aWxsIGJlIGR1bXBlZCBpbnRvLgotOwotW3Nwb29sZXJdCi1MUFQxOj18bHByCi1MUFQyOj18Z3MgLXNERVZJQ0U9YmoyMDAgLXNPdXRwdXRGaWxlPS90bXAvZnJlZCAtcSAtCi1MUFQzOj0vZGV2L2xwMwotCi07IAotOyBBbGxvdyBwb3J0IGFjY2VzcyB0byBXSU5FIHN0YXJ0ZWQgYnkgdGhlIHJvb3QgdXNlci4gVXNlZnVsIGZvciBzb21lCi07IHN1cHBvcnRlZCBkZXZpY2VzLCBidXQgaXQgY2FuIG1ha2UgdGhlIHN5c3RlbSB1bnN0YWJsZS4KLTsgUmVhZCAvdXNyL2RvYy93aW5lLWN2cy14eHh4eC9pb3BvcnQtdHJhY2UtaGludHMuCi07Ci1bcG9ydHNdCi07cmVhZD0weDc3OSwweDM3OSwweDI4MC0weDJhMAotO3dyaXRlPTB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwCi0KLTsgZGVidWdnaW5nLCBub3QgbmVlZCB0byBiZSBtb2RpZmllZC4KLVtzcHldCi1FeGNsdWRlPVdNX1NJWkU7V01fVElNRVI7Ci0KLTsKLTsgV2hhdCBuYW1lcyBmb3IgdGhlIHJlZ2lzdHJ5IGRhdGFmaWxlcywgbm8gbmVlZCB0byBtb2RpZnkuCi07Ci1bUmVnaXN0cnldCi07IFBhdGhzIG11c3QgYmUgZ2l2ZW4gaW4gL2Rpci9kaXIvZmlsZS5yZWcgZm9ybWF0LgotOyBXaW5lIHdpbGwgbm90IHVuZGVyc3RhbmQgZG9zIGZpbGUgbmFtZXMgaGVyZS4uLgotO1VzZXJGaWxlTmFtZT14eHgJCTsgYWx0ZXJuYXRlIHJlZ2lzdHJ5IGZpbGUgbmFtZSAodXNlci5yZWcpCi07TG9jYWxNYWNoaW5lRmlsZU5hbWU9eHh4CTsgKHN5c3RlbS5yZWcpCi0KLTsKLTsgTGF5b3V0L0xvb2sgbW9kaWZpY2F0aW9ucy4gSGVyZSB5b3UgY2FuIHN3aXRjaCB3aXRoIGEgc2luZ2xlIGxpbmUgYmV0d2VlbgotOyB3aW5kb3dzIDMuMSBhbmQgd2luZG93cyA5NSBzdHlsZS4KLTsgVGhpcyBkb2VzIG5vdCBjaGFuZ2UgV0lORSBiZWhhdmlvdXIgb3IgcmVwb3J0ZWQgdmVyc2lvbnMsIGp1c3QgdGhlIGxvb2shCi07Ci1bVHdlYWsuTGF5b3V0XQotOzsgV2luZUxvb2s9eHh4ICAoc3VwcG9ydGVkIHN0eWxlcyBhcmUgJ1dpbjMxJyhkZWZhdWx0KSwgJ1dpbjk1JywgJ1dpbjk4JykKLVdpbmVMb29rPVdpbjk1Ci0KLTsKLTsgV2hhdCBwcm9ncmFtcyB0byBzdGFydCBvbiBXSU5FIHN0YXJ0dXAuICh5b3Ugc2hvdWxkIHByb2JhYmx5IGxlYXZlIGl0IGVtcHR5KQotOwotW3Byb2dyYW1zXQotRGVmYXVsdD0KLVN0YXJ0dXA9Ci0KLTsgZGVmdW5jdCBzZWN0aW9uLgotW0NvbnNvbGVdCi07WHRlcm1Qcm9nPW54dGVybQotO0luaXRpYWxSb3dzPTI1Ci07SW5pdGlhbENvbHVtbnM9ODAKLTtUZXJtaW5hbFR5cGU9bnh0ZXJtCi0KLSMgPC93aW5lY29uZj4KLQotCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2RsbC1vdmVycmlkZXMgYi9kb2N1bWVudGF0aW9uL2RsbC1vdmVycmlkZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTg1MDkuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi9kbGwtb3ZlcnJpZGVzCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLURMTCBvdmVycmlkZXMKLS0tLS0tLS0tLS0tLS0KLSAgIAotICAgVGhlIHdpbmUuY29uZiBkaXJlY3RpdmVzIFtEbGxEZWZhdWx0c10gYW5kIFtEbGxPdmVycmlkZXNdIGFyZSB0aGUKLSAgIHN1YmplY3Qgb2Ygc29tZSBjb25mdXNpb24uIFRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgbW9zdCBvZiB0aGVzZQotICAgZGlyZWN0aXZlcyBhcmUgY2xlYXIgZW5vdWdoLCB0aG91Z2ggLSBnaXZlbiBhIGNob2ljZSwgc2hvdWxkIFdpbmUgdXNlCi0gICBpdHMgb3duIGJ1aWx0LWluIERMTHMsIG9yIHNob3VsZCBpdCB1c2UgLkRMTCBmaWxlcyBmb3VuZCBpbiBhbgotICAgZXhpc3RpbmcgV2luZG93cyBpbnN0YWxsYXRpb24/IFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMgaG93IHRoaXMgZmVhdHVyZQotICAgd29ya3MuCi0gICAKLURMTCB0eXBlcwotCi0gICBuYXRpdmUKLSAgICAgICAgICBBICJuYXRpdmUiIERMTCBpcyBhIC5ETEwgZmlsZSB3cml0dGVuIGZvciB0aGUgcmVhbCBNaWNyb3NvZnQKLSAgICAgICAgICBXaW5kb3dzLgotICAgICAgICAgIAotICAgYnVpbHRpbgotICAgICAgICAgIEEgImJ1aWx0aW4iIERMTCBpcyBhIFdpbmUgRExMLiBUaGVzZSBjYW4gZWl0aGVyIGJlIGEgcGFydCBvZgotICAgICAgICAgIGxpYndpbmUuc28sIG9yIG1vcmUgcmVjZW50bHksIGluIGEgc3BlY2lhbCAuc28gZmlsZSB0aGF0IFdpbmUKLSAgICAgICAgICBpcyBhYmxlIHRvIGxvYWQgb24gZGVtYW5kLgotICAgICAgICAgIAotICAgZWxmZGxsCi0gICAgICAgICAgQW4gImVsZmRsbCIgaXMgYSBXaW5lIC5zbyBmaWxlIHdpdGggYSBzcGVjaWFsIFdpbmRvd3MtbGlrZSBmaWxlCi0gICAgICAgICAgc3RydWN0dXJlIHRoYXQgaXMgYXMgY2xvc2UgdG8gV2luZG93cyBhcyBwb3NzaWJsZSwgYW5kIHRoYXQgY2FuCi0gICAgICAgICAgYWxzbyBzZWFtbGVzc2x5IGxpbmsgZHluYW1pY2FsbHkgd2l0aCAibmF0aXZlIiBETExzLCBieSB1c2luZwotICAgICAgICAgIHNwZWNpYWwgRUxGIGxvYWRlciBhbmQgbGlua2VyIHRyaWNrcy4gQmVydGhvIFN0dWx0aWVucyBkaWQgc29tZQotICAgICAgICAgIHdvcmsgb24gdGhpcywgYnV0IHRoaXMgZmVhdHVyZSBoYXMgbm90IHlldCBiZWVuIG1lcmdlZCBiYWNrCi0gICAgICAgICAgaW50byBXaW5lIChiZWNhdXNlIG9mIHBvbGl0aWNhbCByZWFzb25zIGFuZCBsYWNrIG9mIHRpbWUpLCBzbwotICAgICAgICAgIHRoaXMgRExMIHR5cGUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9mZmljaWFsIFdpbmUgYXQgdGhpcyB0aW1lLgotICAgICAgICAgIEluIHRoZSBtZWFudGltZSwgdGhlICJidWlsdGluIiBETEwgdHlwZSBnYWluZWQgc29tZSBvZiB0aGUKLSAgICAgICAgICBmZWF0dXJlcyBvZiBlbGZkbGxzIChzdWNoIGFzIGR5bmFtaWMgbG9hZGluZyksIHNvIGl0J3MgcG9zc2libGUKLSAgICAgICAgICB0aGF0ICJlbGZkbGwiIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBmb2xkZWQgaW50byAiYnVpbHRpbiIgYXQKLSAgICAgICAgICBzb21lIHBvaW50LgotICAgICAgICAgIAotICAgc28KLSAgICAgICAgICBBIG5hdGl2ZSBVbml4IC5zbyBmaWxlLCB3aXRoIGNhbGxpbmcgY29udmVudGlvbiBjb252ZXJzaW9uCi0gICAgICAgICAgdGh1bmtzIGdlbmVyYXRlZCBvbiB0aGUgZmx5IGFzIHRoZSBsaWJyYXJ5IGlzIGxvYWRlZC4gVGhpcyBpcwotICAgICAgICAgIG1vc3RseSB1c2VmdWwgZm9yIGxpYnJhcmllcyBzdWNoIGFzICJnbGlkZSIgdGhhdCBoYXMgZXhhY3RseQotICAgICAgICAgIHRoZSBzYW1lIEFQSSBvbiBib3RoIFdpbmRvd3MgYW5kIFVuaXguCi0gICAgICAgICAgCi1UaGUgW0RsbERlZmF1bHRzXSBzZWN0aW9uCi0KLSAgIEVYVFJBX0xEX0xJQlJBUllfUEFUSAotICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgV2luZSdzIERMTCAuc28gZmlsZXMuIFdpbmUKLSAgICAgICAgICB3aWxsIHNlYXJjaCB0aGlzIHBhdGggd2hlbiB0cnlpbmcgdG8gbG9jYXRlIGEgRExMIG9mIHRoZSB0eXBlCi0gICAgICAgICAgImJ1aWx0aW4iIG9yICJlbGZkbGwiLiAoVGhpcyBkb2VzIG5vdCBhcHBseSB0byBsaWJ3aW5lLnNvLAotICAgICAgICAgIHNpbmNlIGxpYndpbmUuc28gaXMgbm90IGEgRExMIGluIHRoaXMgc2Vuc2UuKQotICAgICAgICAgIAotICAgRGVmYXVsdExvYWRPcmRlcgotICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIGluIHdoYXQgb3JkZXIgV2luZSBzaG91bGQgc2VhcmNoIGZvciBhdmFpbGFibGUKLSAgICAgICAgICBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUKLSAgICAgICAgICBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uLgotICAgICAgICAgIAotVGhlIFtEbGxQYWlyc10gc2VjdGlvbgotCi0gICBBdCBvbmUgdGltZSwgdGhlcmUgd2FzIGEgc2VjdGlvbiBjYWxsZWQgW0RsbFBhaXJzXSBpbiB0aGUgZGVmYXVsdAotICAgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQgYmVjYXVzZSB0aGUgcGFpcmluZwotICAgaW5mb3JtYXRpb24gaGFzIG5vdyBiZWVuIGVtYmVkZGVkIGludG8gV2luZSBpdHNlbGYuIChUaGUgcHVycG9zZSBvZgotICAgdGhpcyBzZWN0aW9uIHdhcyBtZXJlbHkgdG8gYmUgYWJsZSB0byBpc3N1ZSB3YXJuaW5ncyBpZiB0aGUgdXNlcgotICAgYXR0ZW1wdGVkIHRvIHBhaXIgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pCi0gICBJZiB5b3Ugc3RpbGwgaGF2ZSB0aGlzIGluIHlvdXIgd2luZS5jb25mIG9yIC53aW5lcmMsIHlvdSBtYXkgc2FmZWx5Ci0gICBkZWxldGUgaXQuCi0gICAKLVRoZSBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uCi0KLSAgIFRoaXMgc2VjdGlvbiBzcGVjaWZpZXMgaG93IHlvdSB3YW50IHNwZWNpZmljIERMTHMgdG8gYmUgaGFuZGxlZCwgaW4KLSAgIHBhcnRpY3VsYXIgd2hldGhlciB5b3Ugd2FudCB0byB1c2UgIm5hdGl2ZSIgRExMcyBvciBub3QsIGlmIHlvdSBoYXZlCi0gICBzb21lIGZyb20gYSByZWFsIFdpbmRvd3MgY29uZmlndXJhdGlvbi4gQmVjYXVzZSBidWlsdGlucyBkbyBub3QgbWl4Ci0gICBzZWFtbGVzc2x5IHdpdGggbmF0aXZlIERMTHMgeWV0LCBjZXJ0YWluIERMTCBkZXBlbmRlbmNpZXMgbWF5IGJlCi0gICBwcm9ibGVtYXRpYywgYnV0IHdvcmthcm91bmRzIGV4aXN0IGluIFdpbmUgZm9yIG1hbnkgcG9wdWxhciBETEwKLSAgIGNvbmZpZ3VyYXRpb25zLiBBbHNvIHNlZSBXV04ncyBbMTZdU3RhdHVzIFBhZ2UgdG8gZmlndXJlIG91dCBob3cgd2VsbAotICAgeW91ciBmYXZvcml0ZSBETEwgaXMgaW1wbGVtZW50ZWQgaW4gV2luZS4KLSAgIAotICAgSXQgaXMgb2YgY291cnNlIGFsc28gcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgYnkgZXhwbGljdGx5Ci0gICB1c2luZyBXaW5lJ3MgLS1kbGwgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuCi0gICAKLSAgIFNvbWUgaGludHMgZm9yIGNob29zaW5nIHlvdXIgb3B0aW1hbCBjb25maWd1cmF0aW9uIChsaXN0ZWQgYnkKLSAgIDE2LzMyLWJpdCBETEwgcGFpcik6Ci0gICAKLSAgIGtybmwzODYsIGtlcm5lbDMyCi0gICAgICAgICAgTmF0aXZlIHZlcnNpb25zIG9mIHRoZXNlIHdpbGwgbmV2ZXIgd29yaywgc28gZG9uJ3QgdHJ5LiBMZWF2ZQotICAgICAgICAgIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICBnZGksIGdkaTMyCi0gICAgICAgICAgR3JhcGhpY3MgRGV2aWNlIEludGVyZmFjZS4gTm8gZWZmb3J0IGhhcyBiZWVuIG1hZGUgYXQgdHJ5aW5nIHRvCi0gICAgICAgICAgcnVuIG5hdGl2ZSBHREkuIExlYXZlIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICB1c2VyLCB1c2VyMzIKLSAgICAgICAgICBXaW5kb3cgbWFuYWdlbWVudCBhbmQgc3RhbmRhcmQgY29udHJvbHMuIEl0IHdhcyBwb3NzaWJsZSB0byB1c2UKLSAgICAgICAgICBXaW45NSdzIG5hdGl2ZSB2ZXJzaW9ucyBhdCBzb21lIHBvaW50IChpZiBhbGwgb3RoZXIgRExMcyB0aGF0Ci0gICAgICAgICAgZGVwZW5kIG9uIGl0LCBzdWNoIGFzIGNvbWN0bDMyIGFuZCBjb21kbGczMiwgd2VyZSBhbHNvIHJ1bgotICAgICAgICAgIG5hdGl2ZSkuIEhvd2V2ZXIsIHRoaXMgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIGFmdGVyIHRoZSBBZGRyZXNzCi0gICAgICAgICAgU3BhY2UgU2VwYXJhdGlvbiwgc28gbGVhdmUgYXQgYnVpbHRpbi4KLSAgICAgICAgICAKLSAgIG50ZGxsCi0gICAgICAgICAgTlQga2VybmVsIEFQSS4gQWx0aG91Z2ggYmFkbHkgZG9jdW1lbnRlZCwgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mCi0gICAgICAgICAgdGhpcyB3aWxsIG5ldmVyIHdvcmsuIExlYXZlIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICB3MzJza3JubAotICAgICAgICAgIFdpbjMycyAoZm9yIFdpbjMueCkuIE5hdGl2ZSB2ZXJzaW9uIHdpbGwgcHJvYmFibHkgbmV2ZXIgd29yay4KLSAgICAgICAgICBMZWF2ZSBhdCBidWlsdGluLgotICAgICAgICAgIAotICAgd293MzIKLSAgICAgICAgICBXaW4xNiBzdXBwb3J0IGxpYnJhcnkgZm9yIE5ULiBOYXRpdmUgdmVyc2lvbiB3aWxsIHByb2JhYmx5Ci0gICAgICAgICAgbmV2ZXIgd29yay4gTGVhdmUgYXQgYnVpbHRpbi4KLSAgICAgICAgICAKLSAgIHN5c3RlbQotICAgICAgICAgIFdpbjE2IGtlcm5lbCBzdHVmZi4gV2lsbCBuZXZlciB3b3JrIG5hdGl2ZS4gTGVhdmUgYXQgYnVpbHRpbi4KLSAgICAgICAgICAKLSAgIGRpc3BsYXkKLSAgICAgICAgICBEaXNwbGF5IGRyaXZlci4gRGVmaW5pdGVseSBsZWF2ZSBhdCBidWlsdGluLgotICAgICAgICAgIAotICAgdG9vbGhlbHAKLSAgICAgICAgICBUb29sIGhlbHBlciByb3V0aW5lcy4gVGhpcyBpcyByYXJlbHkgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuCi0gICAgICAgICAgTGVhdmUgYXQgYnVpbHRpbi4KLSAgICAgICAgICAKLSAgIHZlciwgdmVyc2lvbgotICAgICAgICAgIFZlcnNpb25pbmcuIFNlbGRvbSB1c2VmdWwgdG8gbWVzcyB3aXRoLgotICAgICAgICAgIAotICAgYWR2YXBpMzIKLSAgICAgICAgICBSZWdpc3RyeSBhbmQgc2VjdXJpdHkgZmVhdHVyZXMuIFRyeWluZyB0aGUgbmF0aXZlIHZlcnNpb24gb2YKLSAgICAgICAgICB0aGlzIG1heSBvciBtYXkgbm90IHdvcmsuCi0gICAgICAgICAgCi0gICBjb21tZGxnLCBjb21kbGczMgotICAgICAgICAgIENvbW1vbiBEaWFsb2dzLCBzdWNoIGFzIGNvbG9yIHBpY2tlciwgZm9udCBkaWFsb2csIHByaW50Ci0gICAgICAgICAgZGlhbG9nLCBvcGVuL3NhdmUgZGlhbG9nLCBldGMuIEl0IGlzIHNhZmUgdG8gdHJ5IG5hdGl2ZS4KLSAgICAgICAgICAKLSAgIGNvbW1jdHJsLCBjb21jdGwzMgotICAgICAgICAgIENvbW1vbiBDb250cm9scy4gVGhpcyBpcyB0b29sYmFycywgc3RhdHVzIGJhcnMsIGxpc3QgY29udHJvbHMsCi0gICAgICAgICAgdGhlIHdvcmtzLiBJdCBpcyBzYWZlIHRvIHRyeSBuYXRpdmUuCi0gICAgICAgICAgCi0gICBzaGVsbCwgc2hlbGwzMgotICAgICAgICAgIFNoZWxsIGludGVyZmFjZSAoZGVza3RvcCwgZmlsZXN5c3RlbSwgZXRjKS4gQmVpbmcgb25lIG9mIHRoZQotICAgICAgICAgIG1vc3QgdW5kb2N1bWVudGVkIHBpZWNlcyBvZiBXaW5kb3dzLCB5b3UgbWF5IGhhdmUgbHVjayB3aXRoIHRoZQotICAgICAgICAgIG5hdGl2ZSB2ZXJzaW9uLCBzaG91bGQgeW91IG5lZWQgaXQuCi0gICAgICAgICAgCi0gICB3aW5zb2NrLCB3c29jazMyCi0gICAgICAgICAgV2luZG93cyBTb2NrZXRzLiBUaGUgbmF0aXZlIHZlcnNpb24gd2lsbCBub3Qgd29yayB1bmRlciBXaW5lLAotICAgICAgICAgIHNvIGxlYXZlIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICBpY21wCi0gICAgICAgICAgSUNNUCByb3V0aW5lcyBmb3Igd3NvY2szMi4gQXMgd2l0aCB3c29jazMyLCBsZWF2ZSBhdCBidWlsdGluLgotICAgICAgICAgIAotICAgbXByCi0gICAgICAgICAgVGhlIG5hdGl2ZSB2ZXJzaW9uIG1heSBub3Qgd29yayBkdWUgdG8gdGh1bmtpbmcgaXNzdWVzLiBMZWF2ZQotICAgICAgICAgIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICBsemV4cGFuZCwgbHozMgotICAgICAgICAgIExlbXBlbC1aaXYgZGVjb21wcmVzc2lvbi4gV2luZSdzIGJ1aWx0aW4gdmVyc2lvbiBvdWdodCB0byB3b3JrCi0gICAgICAgICAgZmluZS4KLSAgICAgICAgICAKLSAgIHdpbmFzcGksIHduYXNwaTMyCi0gICAgICAgICAgQWR2YW5jZWQgU0NTSSBQZXJpcGhlcmFsIEludGVyZmFjZS4gVGhlIG5hdGl2ZSB2ZXJzaW9uIHdpbGwKLSAgICAgICAgICBwcm9iYWJseSBuZXZlciB3b3JrLiBMZWF2ZSBhdCBidWlsdGluLgotICAgICAgICAgIAotICAgY3J0ZGxsCi0gICAgICAgICAgQyBSdW50aW1lIGxpYnJhcnkuIFRoZSBuYXRpdmUgdmVyc2lvbiB3aWxsIGVhc2lseSB3b3JrIGJldHRlcgotICAgICAgICAgIHRoYW4gV2luZSdzIG9uIHRoaXMgb25lLgotICAgICAgICAgIAotICAgd2luc3Bvb2wuZHJ2Ci0gICAgICAgICAgUHJpbnRlciBzcG9vbGVyLiBZb3UgYXJlIG5vdCBsaWtlbHkgdG8gaGF2ZSBtb3JlIGx1Y2sgd2l0aCB0aGUKLSAgICAgICAgICBuYXRpdmUgdmVyc2lvbi4KLSAgICAgICAgICAKLSAgIGRkcmF3Ci0gICAgICAgICAgRGlyZWN0RHJhdy9EaXJlY3QzRC4gU2luY2UgV2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIERpcmVjdFgKLSAgICAgICAgICBIQUwsIHRoZSBuYXRpdmUgdmVyc2lvbiB3aWxsIG5vdCB3b3JrIGF0IHRoaXMgdGltZS4KLSAgICAgICAgICAKLSAgIGRpbnB1dAotICAgICAgICAgIERpcmVjdElucHV0LiBSdW5uaW5nIHRoaXMgbmF0aXZlIG1heSBvciBtYXkgbm90IHdvcmsuCi0gICAgICAgICAgCi0gICBkc291bmQKLSAgICAgICAgICBEaXJlY3RTb3VuZC4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJ1biB0aGlzIG5hdGl2ZSwgYnV0IGRvbid0Ci0gICAgICAgICAgY291bnQgb24gaXQuCi0gICAgICAgICAgCi0gICBkcGxheS9kcGxheXgKLSAgICAgICAgICBEaXJlY3RQbGF5LiBOYXRpdmUgb3VnaHQgdG8gd29yayBiZXN0IG9uIHRoaXMsIGlmIGF0IGFsbC4KLSAgICAgICAgICAKLSAgIG1tc3lzdGVtLCB3aW5tbQotICAgICAgICAgIE11bHRpbWVkaWEgc3lzdGVtLiBUaGUgbmF0aXZlIHZlcnNpb24gaXMgbm90IGxpa2VseSB0byB3b3JrLgotICAgICAgICAgIExlYXZlIGF0IGJ1aWx0aW4uCi0gICAgICAgICAgCi0gICBtc2FjbSwgbXNhY20zMgotICAgICAgICAgIEF1ZGlvIENvbXByZXNzaW9uIE1hbmFnZXIuIEJ1aWx0aW4gd29ya3MgYmVzdCwgaWYgeW91IHNldAotICAgICAgICAgIG1zYWNtLmRydiB0byB0aGUgc2FtZS4KLSAgICAgICAgICAKLSAgIG1zdmlkZW8sIG1zdmZ3MzIKLSAgICAgICAgICBWaWRlbyBmb3IgV2luZG93cy4gSXQgaXMgc2FmZSAoYW5kIHJlY29tbWVuZGVkKSB0byB0cnkgbmF0aXZlLgotICAgICAgICAgIAotICAgbWNpY2RhLmRydgotICAgICAgICAgIENEIEF1ZGlvIE1DSSBkcml2ZXIuCi0gICAgICAgICAgCi0gICBtY2lzZXEuZHJ2Ci0gICAgICAgICAgTUlESSBTZXF1ZW5jZXIgTUNJIGRyaXZlciAoLk1JRCBwbGF5YmFjaykuCi0gICAgICAgICAgCi0gICBtY2l3YXZlLmRydgotICAgICAgICAgIFdhdmUgYXVkaW8gTUNJIGRyaXZlciAoLldBViBwbGF5YmFjaykuCi0gICAgICAgICAgCi0gICBtY2lhdmkuZHJ2Ci0gICAgICAgICAgQVZJIE1DSSBkcml2ZXIgKC5BVkkgdmlkZW8gcGxheWJhY2spLiBCZXN0IHRvIHVzZSBuYXRpdmUuCi0gICAgICAgICAgCi0gICBtY2lhbmltLmRydgotICAgICAgICAgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgotICAgICAgICAgIAotICAgbXNhY20uZHJ2Ci0gICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gU2V0IHRvIHNhbWUgYXMgbXNhY20zMi4KLSAgICAgICAgICAKLSAgIG1pZGltYXAuZHJ2Ci0gICAgICAgICAgTUlESSBNYXBwZXIuCi0gICAgICAgICAgCi0gICB3cHJvY3MKLSAgICAgICAgICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nIHB1cnBvc2VzLiBBCi0gICAgICAgICAgbmF0aXZlIHZlcnNpb24gb2YgdGhpcyBkb2Vzbid0IGV4aXN0LgotICAgICAgICAgIAotICAgSGF2ZSBmdW4uLi4KLSAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE92ZSBL5XZlbgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kbGxzIGIvZG9jdW1lbnRhdGlvbi9kbGxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzgxZDNiLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vZGxscworKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi1XSU5FL1dJTkRPV1MgRExMUwotCi0KLVRoaXMgZG9jdW1lbnQgbWFpbmx5IGRlYWxzIHdpdGggdGhlIHN0YXR1cyBvZiBjdXJyZW50IERMTCBzdXBwb3J0IGJ5Ci1XaW5lLiAgVGhlIFdpbmUgaW5pIGZpbGUgY3VycmVudGx5IHN1cHBvcnRzIHNldHRpbmdzIHRvIGNoYW5nZSB0aGUKLWxvYWQgb3JkZXIgb2YgRExMcy4gIFRoZSBsb2FkIG9yZGVyIGRlcGVuZHMgb24gc2V2ZXJhbCBpc3N1ZXMsIHdoaWNoCi1yZXN1bHRzIGluIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgdmFyaW91cyBETExzLgotCi0KLVByb3Mgb2YgTmF0aXZlIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTmF0aXZlIERMTHMgb2YgY291cnNlIGd1YXJhbnRlZSAxMDAlIGNvbXBhdGliaWxpdHkgZm9yIHJvdXRpbmVzIHRoZXkKLWltcGxlbWVudC4gRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBuYXRpdmUgVVNFUiBETEwgd291bGQgbWFpbnRhaW4gYQotdmlydHVhbGx5IHBlcmZlY3QgYW5kIFdpbmRvd3MgOTUtbGlrZSBsb29rIGZvciB3aW5kb3cgYm9yZGVycywgZGlhbG9nCi1jb250cm9scywgYW5kIHNvIG9uLiBVc2luZyB0aGUgYnVpbHQtaW4gV0lORSB2ZXJzaW9uIG9mIHRoaXMgbGlicmFyeSwKLW9uIHRoZSBvdGhlciBoYW5kLCB3b3VsZCBwcm9kdWNlIGEgZGlzcGxheSB0aGF0IGRvZXMgbm90IHByZWNpc2VseQotbWltaWMgdGhhdCBvZiBXaW5kb3dzIDk1LiAgU3VjaCBzdWJ0bGUgZGlmZmVyZW5jZXMgY2FuIGJlIGVuZ2VuZGVyZWQKLWluIG90aGVyIGltcG9ydGFudCBETExzLCBzdWNoIGFzIHRoZSBjb21tb24gY29udHJvbHMgbGlicmFyeSBDT01NQ1RSTAotb3IgdGhlIGNvbW1vbiBkaWFsb2dzIGxpYnJhcnkgQ09NTURMRywgd2hlbiBidWlsdC1pbiBXSU5FIERMTHMgb3V0cmFuawotb3RoZXIgdHlwZXMgaW4gbG9hZCBvcmRlci4KLQotTW9yZSBzaWduaWZpY2FudCwgbGVzcyBhZXN0aGV0aWNhbGx5LW9yaWVudGVkIHByb2JsZW1zIGNhbiByZXN1bHQgaWYKLXRoZSBidWlsdC1pbiBXSU5FIHZlcnNpb24gb2YgdGhlIFNIRUxMIERMTCBpcyBsb2FkZWQgYmVmb3JlIHRoZSBuYXRpdmUKLXZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5LiBTSEVMTCBjb250YWlucyByb3V0aW5lcyBzdWNoIGFzIHRob3NlIHVzZWQgYnkKLWluc3RhbGxlciB1dGlsaXRpZXMgdG8gY3JlYXRlIGRlc2t0b3Agc2hvcnRjdXRzLiBTb21lIGluc3RhbGxlcnMgbWlnaHQKLWZhaWwgd2hlbiB1c2luZyBXSU5FJ3MgYnVpbHQtaW4gU0hFTEwuCi0KLUNvbnMgb2YgTmF0aXZlIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm90IGV2ZXJ5IGFwcGxpY2F0aW9uIHBlcmZvcm1zIGJldHRlciB1bmRlciBuYXRpdmUgRExMcy4gSWYgYSBsaWJyYXJ5Ci10cmllcyB0byBhY2Nlc3MgZmVhdHVyZXMgb2YgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB0aGF0IGFyZSBub3QgZnVsbHkKLWltcGxlbWVudGVkIGluIFdpbmUsIHRoZSBuYXRpdmUgRExMIG1pZ2h0IHdvcmsgbXVjaCB3b3JzZSB0aGFuIHRoZQotY29ycmVzcG9uZGluZyBidWlsdC1pbiBvbmUsIGlmIGF0IGFsbC4gRm9yIGV4YW1wbGUsIHRoZSBuYXRpdmUgV2luZG93cwotR0RJIGxpYnJhcnkgbXVzdCBiZSBwYWlyZWQgd2l0aCBhIFdpbmRvd3MgZGlzcGxheSBkcml2ZXIsIHdoaWNoIG9mCi1jb3Vyc2UgaXMgbm90IHByZXNlbnQgdW5kZXIgSW50ZWwgVW5peCBhbmQgV0lORS4KLQotRmluYWxseSwgb2NjYXNzaW9uYWxseSBidWlsdC1pbiBXSU5FIERMTHMgaW1wbGVtZW50IG1vcmUgZmVhdHVyZXMgdGhhbgotdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIFdpbmRvd3MgRExMcy4gUHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50Ci1leGFtcGxlIG9mIHN1Y2ggYmVoYXZpb3IgaXMgdGhlIGludGVncmF0aW9uIG9mIFdpbmUgd2l0aCBYIHByb3ZpZGVkIGJ5Ci1XSU5FJ3MgYnVpbHQtaW4gVVNFUiBETEwuIFNob3VsZCB0aGUgbmF0aXZlIFdpbmRvd3MgVVNFUiBsaWJyYXJ5IHRha2UKLWxvYWQtb3JkZXIgcHJlY2VkZW5jZSwgc3VjaCBmZWF0dXJlcyBhcyB0aGUgYWJpbGl0eSB0byB1c2UgdGhlCi1jbGlwYm9hcmQgb3IgZHJhZy1hbmQtIGRyb3AgYmV0d2VlbiBXaW5lIHdpbmRvd3MgYW5kIFggd2luZG93cyB3aWxsIGJlCi1sb3N0LgotCi1EZWNpZGluZyBCZXR3ZWVuIE5hdGl2ZSBhbmQgQnVpbHQtSW4gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xlYXJseSwgdGhlcmUgaXMgbm8gb25lIHJ1bGUtb2YtdGh1bWIgcmVnYXJkaW5nIHdoaWNoIGxvYWQtb3JkZXIgdG8KLXVzZS4gU28sIHlvdSBtdXN0IGJlY29tZSBmYW1pbGlhciB3aXRoOgotKiB3aGF0IHNwZWNpZmljIERMTHMgZG8KLSogd2hpY2ggb3RoZXIgRExMcyBvciBmZWF0dXJlcyBhIGdpdmVuIGxpYnJhcnkgaW50ZXJhY3RzIHdpdGgKLWFuZCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtYWtlIGEgY2FzZS1ieS1jYXNlIGRlY2lzaW9uLgotCi1Mb2FkIE9yZGVyIGZvciBETExzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVVzaW5nIHRoZSBETEwgc2VjdGlvbnMgZnJvbSB0aGUgd2luZSBjb25maWd1cmF0aW9uIGZpbGUsIHRoZSBsb2FkCi1vcmRlciBjYW4gYmUgdHdlYWtlZCB0byBhIGhpZ2ggZGVncmVlLiBJbiBnZW5lcmFsIGl0IGlzIGFkdmlzZWQgbm90IHRvCi1jaGFuZ2UgdGhlIHNldHRpbmdzIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBkZWZhdWx0Ci1jb25maWd1cmF0aW9uIHNwZWNpZmllcyB0aGUgcmlnaHQgbG9hZCBvcmRlciBmb3IgdGhlIG1vc3QgaW1wb3J0YW50Ci1ETExzLgotCi1UaGUgZGVmYXVsdCBsb2FkIG9yZGVyIGZvbGxvd3MgdGhpcyBhbGdvcml0aG06IGZvciBhbGwgRExMcyB3aGljaCBoYXZlCi1hIGZ1bGx5LWZ1bmN0aW9uYWwgV2luZSBpbXBsZW1lbnRhdGlvbiwgb3Igd2hlcmUgdGhlIG5hdGl2ZSBETEwgaXMKLWtub3duIG5vdCB0byB3b3JrLCB0aGUgYnVpbHQtaW4gbGlicmFyeSB3aWxsIGJlIGxvYWRlZCBmaXJzdC4gSW4gYWxsCi1vdGhlciBjYXNlcywgdGhlIG5hdGl2ZSBETEwgdGFrZXMgbG9hZC1vcmRlciBwcmVjZWRlbmNlLgotCi1UaGUgRGVmYXVsdExvYWRPcmRlciBmcm9tIHRoZSBbRGxsRGVmYXVsdHNdIHNlY3Rpb24gc3BlY2lmaWVzIGZvciBhbGwKLURMTHMgd2hpY2ggdmVyc2lvbiB0byB0cnkgZmlyc3QuIFNlZSBtYW5wYWdlIGZvciBleHBsYW5hdGlvbiBvZiB0aGUKLWFyZ3VtZW50cy4KLQotVGhlIFtEbGxPdmVycmlkZXNdIHNlY3Rpb24gZGVhbHMgd2l0aCBETExzLCB3aGljaCBuZWVkIGEKLWRpZmZlcmVudC1mcm9tLWRlZmF1bHQgdHJlYXRtZW50LiAKLQotVGhlIFtEbGxQYWlyc10gc2VjdGlvbiBpcyBmb3IgRExMcywgd2hpY2ggbXVzdCBiZSBsb2FkZWQgaW4gcGFpcnMuIEluCi1nZW5lcmFsLCB0aGVzZSBhcmUgRExMcyBmb3IgZWl0aGVyIDE2LWJpdCBvciAzMi1iaXQgYXBwbGljYXRpb25zLiBJbgotbW9zdCBjYXNlcyBpbiBXaW5kb3dzLCB0aGUgMzItYml0IHZlcnNpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCBpdHMKLTE2LWJpdCBjb3VudGVycGFydC4gRm9yIFdJTkUsIGl0IGlzIGN1c3RvbWFyeSB0aGF0IHRoZSAxNi1iaXQKLWltcGxlbWVudGF0aW9ucyByZWx5IG9uIHRoZSAzMi1iaXQgaW1wbGVtZW50YXRpb25zIGFuZCBjYXN0IHRoZQotcmVzdWx0cyBiYWNrIHRvIDE2LWJpdCBhcmd1bWVudHMuIENoYW5naW5nIGFueXRoaW5nIGluIHRoaXMgc2VjdGlvbiBpcwotYm91bmQgdG8gcmVzdWx0IGluIGVycm9ycy4KLQotRm9yIHRoZSBmdXR1cmUsIFdpbmUgaW1wbGVtZXRhdGlvbiBvZiBXaW5kb3dzIERMTCBzZWVtcyB0byBoZWFkCi10b3dhcmRzIHVuaWZ5aW5nIHRoZSAxNiBhbmQgMzIgYml0IERMTHMgd2hlcmV2ZXIgcG9zc2libGUsIHJlc3VsdGluZwotaW4gbGFyZ2VyIERMTHMuICBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlIGRsbHMvIHN1YmRpcmVjdG9yeSB1c2luZyB0aGUKLTE2LWJpdCBuYW1lLiAgRm9yIGxhcmdlIERMTHMsIGEgc3BsaXQgbWlnaHQgYmUgZGlzY3Vzc2VkLgotCi0KLVVuZGVyc3RhbmRpbmcgV2hhdCBETExzIERvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZm9sbG93aW5nIGxpc3QgYnJpZWZseSBkZXNjcmliZXMgZWFjaCBvZiB0aGUgRExMcyBjb21tb25seSBmb3VuZAotaW4gV2luZG93cyB3aG9zZSBsb2FkIG9yZGVyIG1heSBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24KLWFuZCBjb21waWxhdGlvbiBvZiBXSU5FLgotCi0oU2VlIGFsc28gLi9ERVZFTE9QRVItSElOVFMgb3IgdGhlIGRsbHMvIHN1YmRpcmVjdG9yeSB0byBzZWUgd2hpY2gKLURMTHMgYXJlIGN1cnJlbnRseSBiZWluZyByZXdyaXR0ZW4gZm9yIHdpbmUpCi0KLUFEVkFQSTMyLkRMTDoJICAgMzItYml0IGFwcGxpY2F0aW9uIGFkdmFuY2VkIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSAgICAgICAgICAgICAgICAgICBsaWtlIGNyeXB0bywgc3lzdGVtaW5mbywgc2VjdXJpdHkgYW5kIGV2ZW50bG9nZ2luZwotQVZJRklMRS5ETEw6CSAgIDMyLWJpdCBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICBBdWRpbyBWaWRlbyBJbnRlcmxlYXZlIChBVkkpIFdpbmRvd3Mtc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgYXVkaW8tdmlkZW8gc3RhbmRhcmQKLUNPTU1DVFJMLkRMTDoJICAgMTYtYml0IGNvbW1vbiBjb250cm9scwotQ09NQ1RMMzIuRExMOgkgICAzMi1iaXQgY29tbW9uIGNvbnRyb2xzIAotQ09NRExHMzIuRExMOgkgICAzMi1iaXQgY29tbW9uIGRpYWxvZ3MKLUNPTU1ETEcuRExMOgkgICAxNi1iaXQgY29tbW9uIGRpYWxvZ3MKLUNPTVBPQkouRExMOgkgICBPTEUgMTYtIGFuZCAzMi1iaXQgY29tcGF0aWJpbGl0eSBsaWJyYXJpZXMKLUNSVERMTC5ETEw6CSAgIE1pY3Jvc29mdCBDIHJ1bnRpbWUKLURDSU1BTi5ETEw6CSAgIDE2LWJpdAotRENJTUFOMzIuRExMOgkgICAzMi1iaXQgZGlzcGxheSBjb250cm9scwotRERFTUwuRExMOgkgICBEREUgbWVzc2FnaW5nCi1EM0QqLkRMTAkgICBEaXJlY3RYL0RpcmVjdDNEIGRyYXdpbmcgbGlicmFyaWVzCi1ERFJBVy5ETEw6CSAgIERpcmVjdFggZHJhd2luZyBsaWJyYXJpZXMKLURJTlBVVC5ETEw6CSAgIERpcmVjdFggaW5wdXQgbGlicmFyaWVzCi1ESVNQTEFZLkRMTDoJICAgRGlzcGxheSBsaWJyYXJpZXMKLURQTEFZLkRMTCwgRFBMQVlYLkRMTDogIERpcmVjdFggcGxheWJhY2sgbGlicmFyaWVzCi1EU09VTkQuRExMOgkgICBEaXJlY3RYIGF1ZGlvIGxpYnJhcmllcwotR0RJLkRMTDoJICAgMTYtYml0IGdyYXBoaWNzIGRyaXZlciBpbnRlcmZhY2UKLUdESTMyLkRMTDoJICAgMzItYml0IGdyYXBoaWNzIGRyaXZlciBpbnRlcmZhY2UKLUlNQUdFSExQLkRMTDoJICAgMzItYml0IElNTSBBUEkgaGVscGVyIGxpYnJhcmllcyAoZm9yIFBFLWV4ZWN1dGFibGVzKQotSU1NMzIuRExMOgkgICAzMi1iaXQgSU1NIEFQSQotSU1HVVRJTC5ETEw6CSAgIAotS0VSTkVMMzIuRExMCSAgIDMyLWJpdCBrZXJuZWwgRExMCi1LRVlCT0FSRC5ETEw6CSAgIEtleWJvYXJkIGRyaXZlcnMKLUxaMzIuRExMOgkgICAzMi1iaXQgTGVtcGVsLVppdiBvciBMWiBmaWxlIGNvbXByZXNzaW9uIAotICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIGluc3RhbGxzaGllbGRzICg/Pz8pLgotTFpFWFBBTkQuRExMOgkgICBMWiBmaWxlIGV4cGFuc2lvbjsgbmVlZGVkIGZvciBXaW5kb3dzIFNldHVwCi1NTVNZU1RFTS5ETEw6CSAgIENvcmUgb2YgdGhlIFdpbmRvd3MgbXVsdGltZWRpYSBzeXN0ZW0KLU1PVVNFLkRMTDoJICAgTW91c2UgZHJpdmVycwotTVBSLkRMTDoJICAgMzItYml0IFdpbmRvd3MgbmV0d29yayBpbnRlcmZhY2UKLU1TQUNNLkRMTDoJICAgQ29yZSBvZiB0aGUgQWRkcmVzc2VkIENhbGwgTW9kZSBvciBBQ00gc3lzdGVtCi1NU0FDTTMyLkRMTDoJICAgQ29yZSBvZiB0aGUgMzItYml0IEFDTSBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICBBdWRpbyBDb21wcmVzc2lvbiBNYW5hZ2VyID8/PwotTVNORVQzMi5ETEwJICAgMzItYml0IG5ldHdvcmsgQVBJcwotTVNWRlczMi5ETEw6CSAgIDMyLWJpdCBXaW5kb3dzIHZpZGVvIHN5c3RlbQotTVNWSURFTy5ETEw6CSAgIDE2LWJpdCBXaW5kb3dzIHZpZGVvIHN5c3RlbQotT0xFMi5ETEw6CSAgIE9MRSAyLjAgbGlicmFyaWVzCi1PTEUzMi5ETEw6CSAgIDMyLWJpdCBPTEUgMi4wIGNvbXBvbmVudHMKLU9MRTJDT05WLkRMTDoJICAgSW1wb3J0IGZpbHRlciBmb3IgZ3JhcGhpY3MgZmlsZXMKLU9MRTJESVNQLkRMTCwgT0xFMk5MUy5ETEw6IE9MRSAyLjEgMTYtIGFuZCAzMi1iaXQgaW50ZXJvcGVyYWJpbGl0eQotT0xFMlBST1guRExMOgkgICBQcm94eSBzZXJ2ZXIgZm9yIE9MRSAyLjAKLU9MRTJUSEsuRExMOgkgICBUaHVua2luZyBmb3IgT0xFIDIuMAotT0xFQVVUMzIuRExMCSAgIDMyLWJpdCBPTEUgMi4wIGF1dG9tYXRpb24KLU9MRUNMSS5ETEw6CSAgIDE2LWJpdCBPTEUgY2xpZW50Ci1PTEVDTEkzMi5ETEw6CSAgIDMyLWJpdCBPTEUgY2xpZW50Ci1PTEVETEcuRExMOgkgICBPTEUgMi4wIHVzZXIgaW50ZXJmYWNlIHN1cHBvcnQKLU9MRVNWUi5ETEw6CSAgIDE2LWJpdCBPTEUgc2VydmVyIGxpYnJhcmllcwotT0xFU1ZSMzIuRExMOgkgICAzMi1iaXQgT0xFIHNlcnZlciBsaWJyYXJpZXMKLVBTQVBJLkRMTDoJICAgUHJvY2VzIFN0YXR1cyBBUEkgbGlicmFyaWVzCi1SQVNBUEkxNi5ETEw6CSAgIDE2LWJpdCBSZW1vdGUgQWNjZXNzIFNlcnZpY2VzIGxpYnJhcmllcwotUkFTQVBJMzIuRExMOgkgICAzMi1iaXQgUmVtb3RlIEFjY2VzcyBTZXJ2aWNlcyBsaWJyYXJpZXMKLVNIRUxMLkRMTDoJICAgMTYtYml0IFdpbmRvd3Mgc2hlbGwgdXNlZCBieSBTZXR1cAotU0hFTEwzMi5ETEw6CSAgIDMyLWJpdCBXaW5kb3dzIHNoZWxsIChDT00gb2JqZWN0PykKLVRBUEkvVEFQSTMyL1RBUElBRERSOiAgVGVsZXBob25lIEFQSSAoZm9yIE1vZGVtcykKLVczMlNLUk5MOgkgICBXaW4zMnMgS2VybmVsID8gKG5vdCBpbiB1c2UgZm9yIFdpbjk1IGFuZCB1cCEpCi1XSU4zMlMxNi5ETEw6CSAgIEFwcGxpY2F0aW9uIGNvbXBhdGliaWxpdHkgZm9yIFdpbjMycwotV0lOODdFTS5ETEw6CSAgIDgwMzg3IG1hdGgtZW11bGF0aW9uIGxpYnJhcmllcwotV0lOQVNQSS5ETEw6CSAgIEFkdmFuY2VkIFNDU0kgUGVyaXBoZXJhbCBJbnRlcmZhY2Ugb3IgQVNQSSBsaWJyYXJpZXMKLVdJTkRFQlVHLkRMTAkgICBXaW5kb3dzIGRlYnVnZ2VyCi1XSU5NTS5ETEw6CSAgIExpYnJhcmllcyBmb3IgbXVsdGltZWRpYSB0aHVua2luZwotV0lORy5ETEw6CSAgIExpYnJhcmllcyByZXF1aXJlZCB0byAiZHJhdyIgZ3JhcGhpY3MKLVdJTlNPQ0suRExMOgkgICBTb2NrZXRzIEFQSXMKLVdJTlNQT09MLkRMTDoJICAgUHJpbnQgc3Bvb2xlciBsaWJyYXJpZXMKLVdOQVNQSTMyLkRMTDoJICAgMzItYml0IEFTUEkgbGlicmFyaWVzCi1XU09DSzMyLkRMTDoJICAgMzItYml0IHNvY2tldHMgQVBJcwotCi0KLUNyZWRpdHMKLS0tLS0tLS0KLQotQmFzZWQgdXBvbiB2YXJpb3VzIG1lc3NhZ2VzIG9uIHdpbmUtZGV2ZWwgZXNwZWNpYWxseSBieSBVbHJpY2ggV2VpZ2FuZC4KLUFkYXB0ZWQgYnkgTWljaGVsZSBQZXRyb3Zza2kgYW5kIEtsYWFzIHZhbiBHZW5kLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kbGxzLnNnbWwgYi9kb2N1bWVudGF0aW9uL2RsbHMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmUxNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kbGxzLnNnbWwKQEAgLTAsMCArMSw5MDggQEAKKyAgICA8Y2hhcHRlciBpZD0iZGxscyI+CisgICAgICA8dGl0bGU+V2luZSBCdWlsdGluIERMTHM8L3RpdGxlPgorICAgIDxwYXJhPkEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IFdpbmUncyBidWlsdGluIERMTHMuLi48L3BhcmE+CisKKyAgICA8c2VjdDEgaWQ9ImNvbW1vbi1jb250cm9scyI+CisgICAgICA8dGl0bGU+Q29tbW9uIENvbnRyb2xzPC90aXRsZT4KKworICAgICAgPCEtLSBGSVhNRTogSHVoPyBTdWJ0aXRsZSBlbGVtZW50IG5vdCBhdmFpbGFibGUgaGVyZT8hPyAtLT4KKyAgICAgIDxicmlkZ2VoZWFkIHJlbmRlcmFzPSJzZWN0MyI+CisgICAgICAgIFRoZWlyIGRldmVsb3BtZW50IHN0YXR1cyBhbmQgdGhlaXIgVU5ET0NVTUVOVEVEIGZlYXR1cmVzIGFuZCBmdW5jdGlvbnMKKyAgICAgIDwvYnJpZGdlaGVhZD4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgRXJpYyBLb2hsICZsdDtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSZndDsKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT4xLiBJbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBoZXJlaW4gaXMgYmFzZWQgb24gdGhlIGRsbCB2ZXJzaW9uCisgICAgICAgICAgNC43MiB3aGljaCBpcyBpbmNsdWRlZCBpbiBNUyBJbnRlcm5ldCBFeHBsb3JlciA0LjAxLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFsbCBpbmZvcm1hdGlvbiBhYm91dCBjb21tb24gY29udHJvbHMgc2hvdWxkIGJlIGNvbGxlY3RlZCBpbiB0aGlzIGRvY3VtZW50LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFsbCBXaW5lIHByb2dyYW1tZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGFkZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhpcyBkb2N1bWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Mi4gR2VuZXJhbCBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBjb21tb24gY29udHJvbHMgY2FuIGJlIGZvdW5kIGluCisgICAgICAgICAgdGhlIE1TIFBsYXRmb3JtIFNESyBhbmQgdGhlIE1TIEludGVybmV0IENsaWVudCBTREsgKG1vc3QKKyAgICAgICAgICByZWNlbnQpLiBJbmZvcm1hdGlvbiBmcm9tIHRoZXNlIFNESydzIHdpbGwgTk9UIGJlIHJlcGVhdGVkCisgICAgICAgICAgaGVyZS4gT25seSBpbmZvcm1hdGlvbiB3aGljaCBjYW4gTk9UIGJlIGZvdW5kIGluIHRoZXNlIFNESydzCisgICAgICAgICAgd2lsbCBiZSBjb2xsZWN0ZWQgaGVyZS4gU29tZSBpbmZvcm1hdGlvbiBpbiB0aGUgU0RLJ3MKKyAgICAgICAgICBtZW50aW9uZWQgYWJvdmUgaXMgKGludGVudGlvbmFsbHk/Pz8pIFdST05HLiBDb3JyZWN0aW9ucyB0bworICAgICAgICAgIHdyb25nIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGhlcmUgdG9vLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4yLjEgU3RydWN0dXJlIHNpemVzIG9mIGRpZmZlcmVudCBjb21tb24gY29udHJvbCB2ZXJzaW9uczwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb21tb24gY29udHJvbHMgaGF2ZSBiZWVuIGNvbnRpbm91c2x5IGltcHJvdmVkIGluIHRoZQorICAgICAgICAgICAgcGFzdC4gU29tZSBvZiB0aGUgb3JpZ25hbCBzdHJ1Y3R1cmVzIGhhZCB0byBiZSBleHRlbmRlZAorICAgICAgICAgICAgYW5kIHRoZWlyIHNpemUgY2hhbmdlZC4gTW9zdCBvZiB0aGUgY29tbW9uIGNvbnRyb2wKKyAgICAgICAgICAgIHN0cnVjdHVyZXMgaW5jbHVkZSB0aGVpciBzaXplIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIElmIGEKKyAgICAgICAgICAgIGNvbnRyb2wgZ2V0cyB0aGUgd3Jvbmcgc2l6ZSBpbiBhIG1lc3NhZ2Ugb3IgZnVuY3Rpb24gYQorICAgICAgICAgICAgZmFpbHVyZSBpcyB2ZXJ5IGxpa2VseSB0byBvY2N1ci4gVG8gYXZvaWQgdGhpcywgTVMgZGVmaW5lZAorICAgICAgICAgICAgbmV3IGNvbnN0YW50cyB0aGF0IHJlZmxlY3QgdGhlIHN0cnVjdHVyZSBzaXplIG9mIG9sZGVyCisgICAgICAgICAgICA8ZmlsZW5hbWU+Q09NQ1RMMzIuRExMPC9maWxlbmFtZT4gdmVyc2lvbnMuIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGxpc3Qgc2hvd3MgdGhlIHN0cnVjdHVyZSBzaXplIGNvbnN0YW50cyB0aGF0IGFyZSBjdXJyZW50bHkKKyAgICAgICAgICAgIGRlZmluZWQgaW4gdGhlIG9yaWdpbmFsIDxmaWxlbmFtZT5DT01DVEwzMi5ETEw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgU29tZSBzdHVjdHVyZXMgYXJlIE5PVCBkZWZpbmVkIGluIHdpbmUncyBDT01DVEwzMiB5ZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPkhESVRFTV9WMV9TSVpFPC92YXJuYW1lPjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2l6ZSBvZiB0aGUgPHN0cnVjdG5hbWU+SERJVEVNPC9zdHJ1Y3RuYW1lPgorICAgICAgICAgICAgICAgICAgc3RydWN0dXJlIGluIHZlcnNpb24gNC4wMC48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPkxWQ09MVU1OX1YxX1NJWkU8L3Zhcm5hbWU+OjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICAgICAgICAgPHN0cnVjdG5hbWU+TFZDT0xVTU48L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+TFZISVRURVNUSU5GT19WMV9TSVpFPC92YXJuYW1lPjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIDxzdHJ1Y3RuYW1lPkxWSElUVEVTVElORk88L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+TFZJVEVNX1YxX1NJWkU8L3Zhcm5hbWU+OjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzaXplIG9mIHRoZSA8c3RydWN0bmFtZT5MVklURU08L3N0cnVjdG5hbWU+CisgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgaW4gdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+Tk1MVkNVU1RPTURSQVdfVjNfU0laRTwvdmFybmFtZT46PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNpemUgb2YgdGhlCisgICAgICAgICAgICAgICAgICA8c3RydWN0bmFtZT5OTUxWQ1VTVE9NRFJBVzwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGluCisgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDQuNzAuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48dmFybmFtZT5OTVRURElTUElORk9fVjFfU0laRTwvdmFybmFtZT46PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNpemUgb2YgdGhlCisgICAgICAgICAgICAgICAgICA8c3RydWN0bmFtZT5OTVRURElTUElORk88L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+Tk1UVkNVU1RPTURSQVdfVjNfU0laRTwvdmFybmFtZT46PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNpemUgb2YgdGhlCisgICAgICAgICAgICAgICAgICA8c3RydWN0bmFtZT5OTVRWQ1VTVE9NRFJBVzwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGluCisgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDQuNzAuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT48dmFybmFtZT5QUk9QU0hFRVRIRUFERVJfVjFfU0laRTwvdmFybmFtZT46PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNpemUgb2YgdGhlCisgICAgICAgICAgICAgICAgICA8c3RydWN0bmFtZT5QUk9QU0hFRVRIRUFERVI8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgaW4gdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+UFJPUFNIRUVUUEFHRV9WMV9TSVpFPC92YXJuYW1lPjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIDxzdHJ1Y3RuYW1lPlBST1BTSEVFVFBBR0U8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+UkVCQVJCQU5ESU5GT19WM19TSVpFPC92YXJuYW1lPjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIDxzdHJ1Y3RuYW1lPlJFQkFSQkFORElORk88L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjcwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+PHZhcm5hbWU+VFRUT09MSU5GT19WMV9TSVpFPC92YXJuYW1lPjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgIDxzdHJ1Y3RuYW1lPlRPT0xJTkZPPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgaW4KKyAgICAgICAgICAgICAgICAgIHZlcnNpb24gNC4wMC48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlRWSU5TRVJUU1RSVUNUX1YxX1NJWkU8L3Zhcm5hbWU+OjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICAgICAgICAgPHN0cnVjdG5hbWU+VFZJTlNFUlRTVFJVQ1Q8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBpbgorICAgICAgICAgICAgICAgICAgdmVyc2lvbiA0LjAwLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+My4gQ29udHJvbHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGRldmVsb3BtZW50IHN0YXR1cyBvZiB0aGUgY29tbW9uIGNvbnRyb2xzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjEgQW5pbWF0aW9uIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT4gIE5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAKKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuMiBDb21ibyBCb3ggRXggQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiAmbHQ7ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGUmZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjMgRGF0ZSBhbmQgVGltZSBQaWNrZXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiAmbHQ7ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGUmZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjQgRHJhZyBMaXN0IEJveCBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuICZsdDtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSZndDs8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPlN0YXR1czo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+Tm90ZXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+QXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz88L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuNSBGbGF0IFNjcm9sbCBCYXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IHdyaXR0ZW4gYnkgQWxleCBQcmllbS4gJmx0O2FsZXhwQHNjaS5rdW4ubmwmZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjYgSGVhZGVyIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5FcmljIEtvaGwgJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsbW9zdCBmaW5pc2hlZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Vbmljb2RlIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKFdNX05PVElGWUZPUk1BVCkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+T3JkZXIgYXJyYXkgbm90IHN1cHBvcnRlZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjcgSG90IEtleSBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuICZsdDtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSZndDs8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPlN0YXR1czo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+Tm90ZXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+QXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz88L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuOCBJbWFnZSBMaXN0IChubyBjb250cm9sKTwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkVyaWMgS29obCAmbHQ7ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGUmZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+QWxtb3N0IGZpbmlzaGVkLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My45IElQIEFkZHJlc3MgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuICZsdDtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSZndDssCisgICAgICAgICAgICAgICAgICBBbGV4IFByaWVtICZsdDthbGV4cEBzY2kua3VuLm5sJmd0OworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlVuZGVyIGNvbnN0cnVjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuMTAgTGlzdCBWaWV3IENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgd3JpdHRlbiBieTogPC9wYXJhPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkVyaWMgS29obC4gJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkx1YyBUb3VyYW5nZWF1ICZsdDtsdWNAbWFjYWRhbWlhbi5jb20mZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+S29lbiBEZWZvcmNoZSAmbHQ7am96ZWZAa290bmV0Lm9yZyZndDs8L3BhcmE+CisgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5GcmFuY2lzIEJlYXVkZXQgJmx0O2ZyYW5jaXNAbWFjYWRhbWlhbi5jb20mZ3Q7IGFuZCB0aGUgIkNvcmVsLVRlYW0iPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VW5kZXIgY29uc3RydWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+Tm90ZXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBCYXNpYyBkYXRhIHN0cnVjdHVyZSB3aXRoIHJlbGF0ZWQgbWVzc2FnZXMgYXJlCisgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuIE5vIHBhaW50aW5nIHN1cHBvcnRlZCB5ZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjExIE1vbnRoIENhbGVuZGFyIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EdW1teSB3cml0dGVuIGJ5IEVyaWMgS29obC4gJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5Ob3Rlczo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4xMiBOYXRpdmUgZm9udCBjb250cm9sPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuICZsdDtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSZndDs8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPlN0YXR1czo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EdW1teSBjb250cm9sLiBObyBmdW5jdGlvbmFsaXR5LjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+Tm90ZXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+QXV0aG9yIG5lZWRlZCEhIEFueSB2b2x1bnRlZXJzPz88L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuMTMgUGFnZXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiAmbHQ7ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGUmZ3Q7PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBVbmRlciBjb25zdHJ1Y3Rpb24uIE1hbnkgbWlzc2luZyBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkF1dGhvciBuZWVkZWQhISBBbnkgdm9sdW50ZWVycz8/PC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjE0IFByb2dyZXNzIEJhciBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBieSBEaW1pdHJpZSBPLiBQYXVuLiBGaXhlcworICAgICAgICAgICAgICAgICAgYW5kIGltcHJvdmVtZW50cyBieSBFcmljIEtvaGwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RmluaXNoZWQhPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjE1IFByb3BlcnR5IFNoZWV0PC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBBbmRlcnMgQ2FybHNzb24gJmx0O2FuZGVycy5jYXJsc3NvbkBsaW51eC5udSZndDsgYW5kCisgICAgICAgICAgICAgICAgICBGcmFuY2lzIEJlYXVkZXQgJmx0O2ZyYW5jaXNAbWFjYWRhbWlhbi5jb20mZ3Q7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+RGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5Ob3Rlczo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UYWIgY29udHJvbCBtdXN0IGJlIGltcGxlbWVudGVkIGZpcnN0LjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4xNiBSZWJhciBDb250cm9sIChDb29sIEJhcik8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5FcmljIEtvaGwgJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRldmVsb3BtZW50IGluIHByb2dyZXNzLiBNYW55IGJ1Z3MgYW5kIG1pc3NpbmcgZmVhdHVyZXMuPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5Ob3Rlczo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4xNyBTdGF0dXMgQmFyIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGJ5IEJydWNlIE1pbG5lci4gRml4ZXMgYW5kCisgICAgICAgICAgICAgICAgICBpbXByb3ZlbWVudHMgYnkgRXJpYyBLb2hsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkFsbW9zdCBmaW5pc2hlZC48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlRvb2x0aXAgaW50ZWdyYXRpb24gaXMgYWxtb3N0IGNvbXBsZXRlLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4xOCBUYWIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkFuZGVycyBDYXJsc3NvbiAmbHQ7YW5kZXJzLmNhcmxzc29uQGxpbnV4Lm51Jmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkRldmVsb3BtZW50IGluIHByb2dyZXNzLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4xOSBUb29sYmFyIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5FcmljIEtvaGwgJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuIEJhc2ljIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgICAgICAgICAgIGFsbW9zdCBkb25lLiAoZGxsIHZlcnNpb24gNC4wKQorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4yMCBUb29sdGlwIENvbnRyb2w8L3RpdGxlPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPkF1dGhvcjo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5FcmljIEtvaGwgJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OzwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkFsbW9zdCBmaW5pc2hlZC48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPk5vdGVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlVuaWNvZGUgc3VwcG9ydCBpcyBpbmNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAoPGNvbnN0YW50PldNX05PVElGWUZPUk1BVDwvY29uc3RhbnQ+KS48L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPC9zZWN0Mz4KKworICAgICAgICA8c2VjdDM+CisgICAgICAgICAgPHRpdGxlPjMuMjEgVHJhY2tiYXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwgJmx0O2Vrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlJmd0OywKKyAgICAgICAgICAgICAgICAgIEFsZXggUHJpZW0gJmx0O2FsZXhwQHNjaS5rdW4ubmwmZ3Q7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5TdGF0dXM6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+VW5kZXIgY29uc3RydWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+My4yMiBUcmVlIFZpZXcgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+QXV0aG9yOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPkR1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLiwgQWxleCBQcmllbSAmbHQ7YWxleHBAc2NpLmt1bi5ubCZndDs8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPlN0YXR1czo8L3Rlcm0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT5VbmRlciBjb25zdHJ1Y3Rpb24uPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT4zLjIzIFVwZG93biBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgICA8dGVybT5BdXRob3I6PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBieSBEaW1pdHJpZSBPLiBQYXVuLgorICAgICAgICAgICAgICAgICAgU29tZSBtaW5vciBjaGFuZ2VzIGJ5IEVyaWMgS29obCAmbHQ7ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGUmZ3Q7LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICAgICAgPHRlcm0+U3RhdHVzOjwvdGVybT4KKyAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhPlVua25vd24uPC9wYXJhPgorICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSGF2ZSBhIGxvb2sgYXQgPGZpbGVuYW1lPmNvbnRyb2xzL3VwZG93bi5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgZm9yIGEgbGlzdCBvZiBidWdzIGFuZCBtaXNzaW5nIGZlYXR1cmVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoZSBzdGF0dXMgaXMgdW5rbm93biwgYmVjYXVzZSBJIGRpZCBub3QgaGF2ZSBhIGNsb3NlCisgICAgICAgICAgICAgIGxvb2sgYXQgdGhpcyBjb250cm9sLiBPbmUgdGVzdC1wcm9ncmFtIGxvb2tlZCBxdWl0ZQorICAgICAgICAgICAgICBnb29kLCBidXQgaW4gV2luOTUncyA8ZmlsZW5hbWU+Y2RwbGF5ZXIuZXhlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgdGhlIGNvbnRyb2wgZG9lcyBub3Qgc2hvdyBhdCBhbGwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQW55IHZvbHVudGVlcnM/PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0Mz4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPjQuIEFkZGl0aW9uYWwgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEhhcyB0byBiZSB3cml0dGVuLi4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPjUuIFVuZG9jdW1lbnRlZCBmZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlcmUgYXJlIHF1aXRlIGEgbG90IG9mIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgbGlrZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPkRTQSAoRHluYW1pYyBTdG9yYWdlIEFycmF5KSBmdW5jdGlvbnMuPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+RFBBIChEeW5hbWljIFBvaW50ZXIgQXJyYXkpIGZ1bmN0aW9ucy48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5NUlUgKCJNb3N0IFJlY2VudGx5IFVzZWQiIExpc3QpIGZ1bmN0aW9ucy48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5vdGhlciB1bmtub3duIGZ1bmN0aW9ucy48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGF2ZSBhIGxvb2sgYXQgPGZpbGVuYW1lPnJlbGF5MzIvY29tY3RsMzIuc3BlYzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT41LjEgRHltbmFtaWMgU3RvcmFnZSBBcnJheSAoRFNBKTwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBEU0EgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHN0b3JlIGFuZCBtYW5hZ2UgZHluYW1pYworICAgICAgICAgICAgYXJyYXlzIG9mIGZpeGVkIHNpemUgbWVtb3J5IGJsb2Nrcy4gVGhleSBhcmUgdXNlZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPlRBU0tNQU4uRVhFPC9maWxlbmFtZT4sIEV4cGxvcmVyLCBJRTQgYW5kIG90aGVyCisgICAgICAgICAgICBQcm9ncmFtcyBhbmQgRExMJ3MgdGhhdCBhcmUgInBhcnRzIG9mIHRoZSBXaW5kb3dzCisgICAgICAgICAgICBPcGVyYXRpbmcgU3lzdGVtIi4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBjb21wbGV0ZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIYXZlIGEgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+NS4yIER5bmFtaWMgUG9pbnRlciBBcnJheSAoRFBBKTwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gdGhlIERTQSBmdW5jdGlvbnMsIGJ1dCB0aGV5IGp1c3Qgc3RvcmUKKyAgICAgICAgICAgIHBvaW50ZXJzLiBUaGV5IGFyZSB1c2VkIGJ5IEV4cGxvcmVyLCBJRTQgYW5kIG90aGVyCisgICAgICAgICAgICBQcm9ncmFtcyBhbmQgRExMJ3MgdGhhdCBhcmUgInBhcnRzIG9mIHRoZSBXaW5kb3dzCisgICAgICAgICAgICBPcGVyYXRpbmcgU3lzdGVtIi4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBjb21wbGV0ZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIYXZlIGEgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+NS4zICJNb3N0IFJlY2VudGx5IFVzZWQiIC0gTGlzdCAoTVJVKTwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubHkgc3R1YnMgYXJlIGltcGxlbWVudGVkIHRvIGtlZXAgRXhwbG9yZXIgZnJvbSBiYWlsaW5nIG91dC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBObyBtb3JlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdCB0aGlzIHRpbWUhCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+NS40IE1lbnVIZWxwPC90aXRsZT4KKworICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGFzIHRvIGJlIHdyaXR0ZW4uLi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdDM+CisKKyAgICAgICAgPHNlY3QzPgorICAgICAgICAgIDx0aXRsZT41LjUgR2V0RWZmZWN0aXZlQ2xpZW50UmVjdDwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhhcyB0byBiZSB3cml0dGVuLi4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+NS42IFNob3dIaWRlTWVudUN0bDwvdGl0bGU+CisKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IE1TIGlzIGluY29tcGxldGUuCisgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPmxwSW5mbzwvdmFybmFtZT46PC90ZXJtPgorICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGJsb2NrcXVvdGU+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQm90aCB2YWx1ZXMgb2YgdGhlIGZpcnN0IHBhaXIgbXVzdCBiZSB0aGUgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBhcHBsaWNhdGlvbnMgbWFpbiBtZW51LgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KKyAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAgICA8L3NlY3QzPgorCisgICAgICAgIDxzZWN0Mz4KKyAgICAgICAgICA8dGl0bGU+NS43IE90aGVyIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXZlcmFsIG90aGVyIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgSUU0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN0cmluZyBmdW5jdGlvbnM6ICh3aWxsIGJlIHdyaXR0ZW4uLi4pCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3QzPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Ni4gRXBpbG9ndWU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFlvdSBzZWUsIG11Y2ggd29yayBoYXMgc3RpbGwgdG8gYmUgZG9uZS4gSWYgeW91IGFyZQorICAgICAgICAgIGludGVyZXN0ZWQgaW4gd3JpdGluZyBhIGNvbnRyb2wgc2VuZCBtZSBhbiBlLW1haWwuIElmIHlvdQorICAgICAgICAgIGxpa2UgdG8gZml4IGJ1Z3Mgb3IgYWRkIHNvbWUgZnVuY3Rpb25hbGl0eSBzZW5kIGFuIGUtbWFpbCB0bworICAgICAgICAgIHRoZSBhdXRob3Igb2YgdGhlIGNvbnRyb2wuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJwYXJ0IiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZG9jdW1lbnRhdGlvbi5zZ21sIGIvZG9jdW1lbnRhdGlvbi9kb2N1bWVudGF0aW9uLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzYmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZG9jdW1lbnRhdGlvbi5zZ21sCkBAIC0wLDAgKzEsODkgQEAKKyAgPGNoYXB0ZXIgaWQ9ImRvY3VtZW50YXRpb24iPgorICAgIDx0aXRsZT5Eb2N1bWVudGluZyBXaW5lPC90aXRsZT4KKyAgICA8cGFyYT5Ib3cgdG8gaGVscCBvdXQgd2l0aCB0aGUgV2luZSBkb2N1bWVudGF0aW9uIGVmZm9ydC4uLjwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0iYXBpLWRvY3MiPgorICAgICAgPHRpdGxlPldyaXRpbmcgV2luZSBBUEkgRG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ICg/Pz8pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vUkVBRE1FLmRvY3VtZW50YXRpb248L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRvIGltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFdpbmUgQVBJLCBqdXN0IGFkZAorICAgICAgICBjb21tZW50cyB0byB0aGUgZXhpc3Rpbmcgc291cmNlLiBGb3IgZXhhbXBsZSwKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxzY3JlZW4+CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIENvcHlNZXRhRmlsZTMyQSAgIChHREkzMi4yMykKKyAqCisgKiAgQ29waWVzIHRoZSBtZXRhZmlsZSBjb3JyZXNwb25kaW5nIHRvIGhTcmNNZXRhRmlsZSB0byBlaXRoZXIKKyAqICBhIGRpc2sgZmlsZSwgaWYgYSBmaWxlbmFtZSBpcyBnaXZlbiwgb3IgdG8gYSBuZXcgbWVtb3J5IGJhc2VkCisgKiAgbWV0YWZpbGUsIGlmIGxwRmlsZU5hbWUgaXMgTlVMTC4KKyAqCisgKiBSRVRVUk5TCisgKgorICogIEhhbmRsZSB0byBtZXRhZmlsZSBjb3B5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKiBCVUdTCisgKgorICogIENvcHlpbmcgdG8gZGlzayByZXR1cm5zIE5VTEwgZXZlbiBpZiBzdWNjZXNzZnVsLgorICovCitITUVUQUZJTEUzMiBXSU5BUEkgQ29weU1ldGFGaWxlMzJBKAorCQkgICBITUVUQUZJTEUzMiBoU3JjTWV0YUZpbGUsIC8qIGhhbmRsZSBvZiBtZXRhZmlsZSB0byBjb3B5ICovCisJCSAgIExQQ1NUUiBscEZpbGVuYW1lIC8qIGZpbGVuYW1lIGlmIGNvcHlpbmcgdG8gYSBmaWxlICovCispIHsgLi4uIH0KKyAgICAgIDwvc2NyZWVuPgorICAgICAgPHBhcmE+CisgICAgICAgIGJlY29tZXMsIGFmdGVyIHByb2Nlc3Npbmcgd2l0aCA8Y29tbWFuZD5jMm1hbjwvY29tbWFuZD4gYW5kCisgICAgICAgIDxjb21tYW5kPm5yb2ZmIC1tYW48L2NvbW1hbmQ+LAorICAgICAgPC9wYXJhPgorICAgICAgPHNjcmVlbj4KK0NvcHlNZXRhRmlsZUEoM3cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlNZXRhRmlsZUEoM3cpCisKKworTkFNRQorICAgICAgIENvcHlNZXRhRmlsZUEgLSBDb3B5TWV0YUZpbGUzMkEgICAoR0RJMzIuMjMpCisKK1NZTk9QU0lTCisgICAgICAgSE1FVEFGSUxFMzIgQ29weU1ldGFGaWxlQQorICAgICAgICgKKyAgICAgICAgICAgIEhNRVRBRklMRTMyIGhTcmNNZXRhRmlsZSwKKyAgICAgICAgICAgIExQQ1NUUiBscEZpbGVuYW1lCisgICAgICAgKTsKKworUEFSQU1FVEVSUworICAgICAgIEhNRVRBRklMRTMyIGhTcmNNZXRhRmlsZQorICAgICAgICAgICAgICBIYW5kbGUgb2YgbWV0YWZpbGUgdG8gY29weS4KKworICAgICAgIExQQ1NUUiBscEZpbGVuYW1lCisgICAgICAgICAgICAgIEZpbGVuYW1lIGlmIGNvcHlpbmcgdG8gYSBmaWxlLgorCitERVNDUklQVElPTgorICAgICAgIENvcGllcyAgdGhlICBtZXRhZmlsZSAgY29ycmVzcG9uZGluZyAgdG8gIGhTcmNNZXRhRmlsZSAgdG8KKyAgICAgICBlaXRoZXIgYSBkaXNrIGZpbGUsIGlmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4sIG9yICB0byAgYSAgbmV3CisgICAgICAgbWVtb3J5IGJhc2VkIG1ldGFmaWxlLCBpZiBscEZpbGVOYW1lIGlzIE5VTEwuCisKK1JFVFVSTlMKKyAgICAgICBIYW5kbGUgdG8gbWV0YWZpbGUgY29weSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisKK0JVR1MKKyAgICAgICBDb3B5aW5nIHRvIGRpc2sgcmV0dXJucyBOVUxMIGV2ZW4gaWYgc3VjY2Vzc2Z1bC4KKworU0VFIEFMU08KKyAgICAgICBHZXRNZXRhRmlsZUEoM3cpLCAgIEdldE1ldGFGaWxlVygzdyksICAgQ29weU1ldGFGaWxlVygzdyksCisgICAgICAgUGxheU1ldGFGaWxlKDN3KSwgIFNldE1ldGFGaWxlQml0c0V4KDN3KSwgIEdldE1ldGFGaWxlQml0LQorICAgICAgIHNFeCgzdykKKyAgICAgIDwvc2NyZWVuPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2ZpbGVoYW5kbGVzIGIvZG9jdW1lbnRhdGlvbi9maWxlaGFuZGxlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1NzU5Ni4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2ZpbGVoYW5kbGVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRE9TIHRyZWF0cyB0aGUgZmlyc3QgNSBmaWxlIGhhbmRsZXMgYXMgc3BlY2lhbCBjYXNlcy4gIFRoZXkgbWFwIGRpcmVjdGx5Ci10byBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIHN0ZGF1eCBhbmQgc3RkcHJuLiAgV2luZG93cyAxNiBpbmhlcml0cyB0aGlzCi1iZWhhdm9pciwgYW5kIGluIGZhY3QsIHdpbjE2IGhhbmRsZXMgYXJlIGludGVyY2hhbmdhYmxlIHdpdGggRE9TIGhhbmRsZXMuCi1Tb21lIG5hc3R5IHdpbmRvd3MgcHJvZ3JhbXMgZXZlbiBkbyB0aGlzIQotCi1XaW5kb3dzMzIgaXNzdWVzIGZpbGUgaGFuZGxlcyBzdGFydGluZyBmcm9tIDEsIG9uIHRoZSBncm91bmRzIHRoYXQKLW1vc3QgR1VJIHByb2Nlc3NlcyBkb24ndCBuZWVkIGEgc3RkaW4sIG91dCwgZXRjLgotCi1UaGUgd2luZSBoYW5kbGUgY29kZSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgV2luMzIgc3R5bGUsIGFuZCB0aGUgV2luMTYKLWZ1bmN0aW9ucyB1c2UgdHdvIG1hY3JvcyB0byBjb252ZXJ0IHRvIGFuZCBmcm9tIHRoZSB0d28gdHlwZXMuCi0KLVRoZSBtYWNyb3MgYXJlIGRlZmluZWQgaW4gZmlsZS5oIGFzIGZvbGxvd3MuOgotI2RlZmluZSBIRklMRTE2X1RPX0hGSUxFMzIoaGFuZGxlKSBcCi0oKChoYW5kbGUpPT0wKSA/IEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSA6IFwKLSAoKGhhbmRsZSk9PTEpID8gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKSA6IFwKLSAoKGhhbmRsZSk9PTIpID8gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpIDogXAotICgoaGFuZGxlKT4weDQwMCkgPyBoYW5kbGUgOiBcCi0gKGhhbmRsZSktNSkKLQotI2RlZmluZSBIRklMRTMyX1RPX0hGSUxFMTYoaGFuZGxlKSAoeyBIRklMRTMyIGhuZD1oYW5kbGU7IFwKLSAgICAgICgoaG5kPT1IRklMRV9FUlJPUjMyKSA/IEhGSUxFX0VSUk9SMTYgOiBcCi0gICAgICAoKGhhbmRsZT4weDQwMCkgPyBoYW5kbGUgOiBcCi0gICAgICAgKEhGSUxFMTYpaG5kKzUpOyB9KQotCi1XQVJOSU5HOiBiZSBjYXJlZnVsIG5vdCB0byB1c2UgdGhlIG1hY3JvIEhGSUxFMTZfVE9fSEZJTEUzMiBvbgotZnVuY3Rpb25zIHdpdGggc2lkZS1lZmZlY3RzLCBhcyBpdCB3aWxsIGNhdXNlIHRoZW0gdG8gYmUgZXZhbHVhdGVkCi1zZXZlcmFsIHRpbWVzLiAgVGhpcyBjb3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLCBidXQgdGhlIHVzZSBvZiB0aGlzCi1tYWNybyBpcyBsaW1pdGVkIGVub3VnaCBub3QgdG8gbmVlZCBhIHJld3JpdGUuCi0KLU5PVEU6IFRoZSAweDQwMCBzcGVjaWFsIGNhc2UgYWJvdmUgZGVhbHMgd2l0aCBMWlcgZmlsZWhhbmRsZXMgKHNlZSAKLW1pc2MvbHpleHBhbmQuYykuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2ZvbnRzIGIvZG9jdW1lbnRhdGlvbi9mb250cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3ZTc5Ny4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2ZvbnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLU5vdGU6Ci09PT09PQotVGhlIGZudDJiZGYgdXRpbGl0eSBpcyBpbmNsdWRlZCB3aXRoIFdpbmUuIEl0IGNhbiBiZSBmb3VuZCBpbiB0aGUgdG9vbHMgCi1kaXJlY3RvcnkuCi1MaW5rcyB0byB0aGUgb3RoZXIgdG9vbHMgbWVudGlvbmVkIGluIHRoaXMgZG9jdW1lbnQgY2FuIGJlIGZvdW5kIG9uIHdpbmUKLWhlYWRxdWFydGVyczogaHR0cDovL3d3dy53aW5laHEuY29tL3Rvb2xzLmh0bWwKLQotCi1Ib3cgVG8gQ29udmVydCBXaW5kb3dzIEZvbnRzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlmIHlvdSBoYXZlIGFjY2VzcyB0byBhIFdpbmRvd3MgaW5zdGFsbGF0aW9uIHlvdSBzaG91bGQgdXNlIAotZm50MmJkZiB1dGlsaXR5IChmb3VuZCBpbiB0aGUgJ3Rvb2xzKScgZGlyZWN0b3J5IHRvIGNvbnZlcnQKLWJpdG1hcCBmb250cyAoVkdBU1lTLkZPTiwgU1NFUklGRS5GT04sIGFuZCBTRVJJRkUuRk9OKSBpbnRvIAotdGhlIGZvcm1hdCB0aGF0IHRoZSBYIFdpbmRvdyBTeXN0ZW0gY2FuIHJlY29nbml6ZS4gCi0KLVN0ZXAgMS4gRXh0cmFjdCBiaXRtYXAgZm9udHMgd2l0aCAnZm50MmJkZicuCi0KLVN0ZXAgMi4gQ29udmVydCAuYmRmIGZpbGVzIHByb2R1Y2VkIGJ5IFN0ZXAgMSBpbnRvCi0JLnBjZiBmaWxlcyB3aXRoICdiZGZ0b3BjZicuCi0KLVN0ZXAgMy4gQ29weSAucGNmIGZpbGVzIHRvIHRoZSBmb250IHNlcnZlciBkaXJlY3Rvcnkgd2hpY2gKLQlpcyB1c3VhbGx5IC91c3IvbGliL1gxMS9mb250cy9taXNjICh5b3Ugd2lsbCBwcm9iYWJseSAKLSAgICAgICAgbmVlZCBzdXBlcnVzZXIgcHJpdmlsZWdlcykuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldwotCWZvbnQgZGlyZWN0b3J5IHlvdSB3aWxsIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBmb250IHBhdGguCi0KLVN0ZXAgNC4gUnVuICdta2ZvbnRkaXInIGZvciB0aGUgZGlyZWN0b3J5IHlvdSBjb3BpZWQgZm9udHMgdG8uCi0JSWYgeW91IGFyZSBhbHJlYWR5IGluIFggeW91IHNob3VsZCBydW4gJ3hzZXQgZnAgcmVoYXNoJyAKLSAgICAgICAgdG8gbWFrZSBYIHNlcnZlciBhd2FyZSBvZiB0aGUgbmV3IGZvbnRzLgotCi1TdGVwIDUuIEVkaXQgV0lORS5DT05GIGZpbGUgdG8gcmVtb3ZlIGFsaWFzZXMgZm9yIHRoZSBmb250cyAKLQl5b3UndmUganVzdCBpbnN0YWxsZWQuCi0KLVdJTkUgY2FuIGdldCBieSB3aXRob3V0IHRoZXNlIGZvbnRzIGJ1dCAndGhlIGxvb2sgYW5kIGZlZWwnCi1tYXkgYmUgcXVpdGUgZGlmZmVyZW50LiBBbHNvLCBzb21lIGFwcGxpY2F0aW9ucyB0cnkgdG8gbG9hZAotdGhlaXIgY3VzdG9tIGZvbnRzIG9uIHRoZSBmbHkgKFdpbldvcmQgNi4wKSBhbmQgc2luY2UgV0lORSBkb2VzCi1ub3QgaW1wbGVtZW50IHRoaXMgeWV0IGl0IGluc3RlYWQgcHJpbnRzIG91dCBzb21ldGhpbmcgbGlrZTsKLQotU1RVQjogQWRkRm9udFJlc291cmNlKCBTT01FRklMRS5GT04gKQotCi1Zb3UgY2FuIGNvbnZlcnQgdGhpcyBmaWxlIHRvby4gTm90ZSB0aGF0IC5GT04gZmlsZSBtYXkgbm90IGhvbGQgCi1hbnkgYml0bWFwIGZvbnRzIGFuZCBmbnQyYmRmIHdpbGwgZmFpbCBpZiB0aGlzIGlzIHRoZSBjYXNlLiBBbHNvCi1ub3RlIHRoYXQgYWx0aG91Z2ggdGhlIGFib3ZlIG1lc3NhZ2Ugd2lsbCBub3QgZGlzYXBwZWFyIFdJTkUgd2lsbAotd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGZvbnQgeW91IGV4dHJhY3RlZCBmcm9tIHRoZQotU09NRUZJTEUuRk9OLiBmbnQyYmRmIHdpbGwgb25seSB3b3JrIGZvciBXaW5kb3dzIDMuMSBmb250cy4gSXQgCi13aWxsIG5vdCB3b3JrIGZvciBUcnVlVHlwZSBmb250cy4KLQotV2hhdCB0byBkbyB3aXRoIFRydWVUeXBlIGZvbnRzPyBUaGVyZSBhcmUgc2V2ZXJhbCBjb21tZXJjaWFsCi1mb250IHRvb2xzIHRoYXQgY2FuIGNvbnZlcnQgdGhlbSB0byB0aGUgVHlwZTEgZm9ybWF0IGJ1dCB0aGUgCi1xdWFsaXR5IG9mIHRoZSByZXN1bHRpbmcgZm9udHMgaXMgZmFyIGZyb20gc3RlbGxhci4gVGhlIG90aGVyCi13YXkgdG8gdXNlIHRoZW0gaXMgdG8gZ2V0IGEgZm9udCBzZXJ2ZXIgY2FwYWJsZSBvZiByZW5kZXJpbmcgCi1UcnVlVHlwZSAoQ2FsZGVyYSBoYXMgb25lLCB0aGVyZSBhbHNvIGlzIHRoZSBmcmVlIFhmc3R0IGluCi1MaW51eC9YMTEvZm9udHMgb24gc3Vuc2l0ZSBhbmQgbWlycm9ycywgaWYgeW91J3JlIG9uIEZyZWVCU0QgeW91Ci1jYW4gdXNlIHRoZSBwb3J0IGluIC91c3IvcG9ydHMveDExLXNlcnZlcnMvWGZzdHQuICBBbmQgdGhlcmUgaXMKLXhmc2Z0IHdoaWNoIHVzZXMgdGhlIGZyZWV0eXBlIGxpYnJhcnksIHNlZSBkb2N1bWVudGF0aW9uL3R0ZnNlcnZlcikuCi0KLUhvd2V2ZXIsIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgdGhlIG5hdGl2ZSBUcnVlVHlwZSBzdXBwb3J0IAotdmlhIEZyZWVUeXBlIHJlbmRlcmVyIGluIHRoZSBmdXR1cmUgKGhpbnQsIGhpbnQgOi0pCi0KLQotSG93IFRvIEFkZCBGb250IEFsaWFzZXMgVG8gV0lORS5DT05GCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTWFueSBXaW5kb3dzIGFwcGxpY2F0aW9ucyBhc3N1bWUgdGhhdCBmb250cyBpbmNsdWRlZCBpbiBvcmlnaW5hbCBXaW5kb3dzIDMuMSAKLWRpc3RyaWJ1dGlvbiBhcmUgYWx3YXlzIHByZXNlbnQuIEJ5IGRlZmF1bHQgV2luZSBjcmVhdGVzIGEgbnVtYmVyIG9mIGFsaWFzZXMKLXRoYXQgbWFwIHRoZW0gb24gdGhlIGV4aXN0aW5nIFggZm9udHM6Ci0KLVdpbmRvd3MgZm9udAkJLi4uaXMgbWFwcGVkIHRvLi4uCVggZm9udAotCi0iTVMgU2FucyBTZXJpZiIJCQktPgkJIi1hZG9iZS1oZWx2ZXRpY2EtIgotIk1TIFNlcmlmIgkJCS0+CQkiLWJpdHN0cmVhbS1jaGFydGVyLSIKLSJUaW1lcyBOZXcgUm9tYW4iCQktPgkJIi1hZG9iZS10aW1lcy0iCi0iQXJpYWwiCQkJCS0+CQkiLWFkb2JlLWhlbHZldGljYS0iCi0KLVRoZXJlIGlzIG5vIGRlZmF1bHQgYWxpYXMgZm9yIHRoZSAiU3lzdGVtIiBmb250LiBBbHNvLCBubyBhbGlhc2VzIGFyZSAKLWNyZWF0ZWQgZm9yIHRoZSBmb250cyB0aGF0IGFwcGxpY2F0aW9ucyBpbnN0YWxsIGF0IHJ1bnRpbWUuIFRoZSByZWNvbW1lbmRlZCAKLXdheSB0byBkZWFsIHdpdGggdGhpcyBwcm9ibGVtIGlzIHRvIGNvbnZlcnQgdGhlIG1pc3NpbmcgZm9udCAoc2VlIGFib3ZlKS4gCi1JZiBpdCBwcm92ZXMgaW1wb3NzaWJsZSwgbGlrZSBpbiB0aGUgY2FzZSB3aXRoIFRydWVUeXBlIGZvbnRzLCB5b3UgY2FuIGZvcmNlIAotdGhlIGZvbnQgbWFwcGVyIHRvIGNob29zZSBhIGNsb3NlbHkgcmVsYXRlZCBYIGZvbnQgYnkgYWRkaW5nIGFuIGFsaWFzIHRvIHRoZSAKLVtmb250c10gc2VjdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhlIFggZm9udCBhY3R1YWxseSBleGlzdHMgKHdpdGggeGZvbnRzZWwKLXRvb2wpLgotCi1BbGlhc04gPSBbV2luZG93cyBmb250XSwgW1ggZm9udF0gPCwgb3B0aW9uYWwgIm1hc2sgWCBmb250IiBmbGFnPgotCi1FeGFtcGxlOgotCi1BbGlhczAgPSBTeXN0ZW0sIC0taW50ZXJuYXRpb25hbC0sIHN1YnN0Ci1BbGlhczEgPSAuLi4KLS4uLgotCi1Db21tZW50czoKLSogICBUaGVyZSBtdXN0IGJlIG5vIGdhcHMgaW4gdGhlIHNlcXVlbmNlIHswLCAuLi4sIE59IG90aGVyd2lzZSBhbGwgYWxpYXNlcwotICAgIGFmdGVyIHRoZSBmaXJzdCBnYXAgd29uJ3QgYmUgcmVhZC4KLQotKiAgIFVzdWFsbHkgZm9udCBtYXBwZXIgdHJhbnNsYXRlcyBYIGZvbnQgbmFtZXMgaW50byBmb250IG5hbWVzIHZpc2libGUgdG8KLSAgICBXaW5kb3dzIHByb2dyYW1zIGluIHRoZSBmb2xsb3dpbmcgZmFzaGlvbjoKLQotICAgIFggZm9udAkJLi4ud2lsbCBzaG93IHVwIGFzLi4uCQlFeHRyYWN0ZWQgbmFtZQotCi0gICAgLS1pbnRlcm5hdGlvbmFsLS4uLgkJLT4JCQkiSW50ZXJuYXRpb25hbCIKLSAgICAtYWRvYmUtaGVsdmV0aWNhLS4uLgktPgkJCSJIZWx2ZXRpY2EiCi0gICAgLWFkb2JlLXV0b3BpYS0uLi4JCS0+CQkJIlV0b3BpYSIKLSAgICAtbWlzYy1maXhlZC0uLi4JCS0+CQkJIkZpeGVkIgotICAgIC0uLi4KLSAgICAtc29ueS1maXhlZC0uLi4JCS0+CQkJIlNvbnkgRml4ZWQiIAotICAgIC0uLi4KLQotICAgIE5vdGUgdGhhdCBzaW5jZSAtbWlzYy1maXhlZC0gYW5kIC1zb255LWZpeGVkLSBhcmUgZGlmZmVyZW50IGZvbnRzCi0gICAgV2luZSBtb2RpZmllZCB0aGUgc2Vjb25kIGV4dHJhY3RlZCBuYW1lIHRvIG1ha2Ugc3VyZSBXaW5kb3dzIHByb2dyYW1zCi0gICAgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gYmVjYXVzZSBvbmx5IGV4dHJhY3RlZCBuYW1lcyBhcHBlYXIgaW4gdGhlIGZvbnQgCi0gICAgc2VsZWN0aW9uIGRpYWxvZ3MuIAotIAotKiAgICJNYXNraW5nIiBhbGlhcyByZXBsYWNlcyB0aGUgb3JpZ2luYWwgZXh0cmFjdGVkIG5hbWUgc28gdGhhdCBpbiB0aGUgCi0gICAgZXhhbXBsZSBjYXNlIHdlIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIG1hcHBpbmc6Ci0KLSAgICAtLWludGVybmF0aW9uYWwtCQktPgkJCSJTeXN0ZW0iCi0KLSAgICAiTm9ubWFza2luZyIgYWxpYXNlcyBhcmUgdHJhbnNwYXJlbnQgdG8gdGhlIHVzZXIgYW5kIHRoZXkgZG8gbm90IAotICAgIHJlcGxhY2UgZXh0cmFjdGVkIG5hbWVzLgotCi0gICAgV2luZSBkaXNjYXJkcyBhbiBhbGlhcyB3aGVuIGl0IHNlZXMgdGhhdCB0aGUgbmF0aXZlIFggZm9udCBpcwotICAgIGF2YWlsYWJsZS4KLQotKiAgIElmIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gV2luZG93cyBmb250cyBtZW50aW9uZWQgaW4gdGhlIGZpcnN0IAotICAgIHBhcmFncmFwaCB5b3Ugc2hvdWxkIHRyeSB0byBzdWJzdGl0dXRlIHRoZSAiU3lzdGVtIiBmb250IHdpdGggCi0gICAgbm9ubWFza2luZyBhbGlhcy4gJ3hmb250c2VsJyB3aWxsIHNob3cgeW91IHRoZSBmb250cyBhdmFpbGFibGUgdG8KLSAgICBYLgotCi0gICAgQWxpYXMuLiA9IFN5c3RlbSwgLi4uYm9sZCBmb250IHdpdGhvdXQgc2VyaWZzCi0KLUFsc28sIHNvbWUgV2luZG93cyBhcHBsaWNhdGlvbnMgcmVxdWVzdCBmb250cyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIAotdHlwZWZhY2UgbmFtZSBvZiB0aGUgZm9udC4gRm9udCB0YWJsZSBzdGFydHMgd2l0aCBBcmlhbCBpbiBtb3N0IFdpbmRvd3MgCi1pbnN0YWxsYXRpb25zLCBob3dldmVyIFggZm9udCB0YWJsZSBzdGFydHMgd2l0aCB3aGF0ZXZlciBpcyB0aGUgZmlyc3QgbGluZSAKLWluIHRoZSBmb250cy5kaXIuICBUaGVyZWZvcmUgV0lORSB1c2VzIHRoZSBmb2xsb3dpbmcgZW50cnkgdG8gZGV0ZXJtaW5lIAotd2hpY2ggZm9udCB0byBjaGVjayBmaXJzdC4KLQotRXhhbXBsZToKLQotRGVmYXVsdCA9IC1hZG9iZS10aW1lcy0KLQotQ29tbWVudHM6Ci0gICAgSXQgaXMgYmV0dGVyIHRvIGhhdmUgYSBzY2FsYWJsZSBmb250IGZhbWlseSAoYm9sZHMgYW5kIGl0YWxpY3MgaW5jbHVkZWQpIAotICAgIGFzIHRoZSBkZWZhdWx0IGNob2ljZSBiZWNhdXNlIG1hcHBlciBjaGVja3MgYWxsIGF2YWlsYWJsZSBmb250cyB1bnRpbCAKLSAgICByZXF1ZXN0ZWQgaGVpZ2h0IGFuZCBvdGhlciBhdHRyaWJ1dGVzIG1hdGNoIHBlcmZlY3RseSBvciB0aGUgZW5kIG9mIHRoZSAKLSAgICBmb250IHRhYmxlIGlzIHJlYWNoZWQuIFR5cGljYWwgWCBpbnN0YWxsYXRpb25zIGhhdmUgc2NhbGFibGUgZm9udHMgaW4KLSAgICB0aGUgLi4vZm9udHMvVHlwZTEgYW5kIC4uL2ZvbnRzL1NwZWVkbyBkaXJlY3Rvcmllcy4KLQotCi1Ib3cgVG8gTWFuYWdlIENhY2hlZCBGb250IE1ldHJpY3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XSU5FIHN0b3JlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgZm9udHMgaW4gdGhlIH4vLndpbmUvLmNhY2hlZG1ldHJpY3MKLWZpbGUuIFlvdSBjYW4gY29weSBpdCBlbHNld2hlcmUgYW5kIGFkZCB0aGlzIGVudHJ5IHRvIHRoZSBbZm9udHNdIHNlY3Rpb24gCi1pbiB5b3VyIFdJTkUuQ09ORjoKLQotRm9udE1ldHJpY3MgPSA8ZmlsZSB3aXRoIG1ldHJpY3M+Ci0KLUlmIFdJTkUgZGV0ZWN0cyBjaGFuZ2VzIGluIHRoZSBYIGZvbnQgY29uZmlndXJhdGlvbiBpdCB3aWxsIHJlYnVpbGQgZm9udAotbWV0cmljcyBmcm9tIHNjcmF0Y2ggYW5kIHRoZW4gaXQgd2lsbCBvdmVyd3JpdGUgfi8ud2luZS8uY2FjaGVkbWV0cmljcyB3aXRoIAotdGhlIG5ldyBpbmZvcm1hdGlvbi4gVGhpcyBwcm9jZXNzIGNhbiB0YWtlIGEgd2hpbGUuCi0KLQotVG9vIFNtYWxsIE9yIFRvbyBMYXJnZSBGb250cwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaW5kb3dzIHByb2dyYW1zIG1heSBhc2sgV0lORSB0byByZW5kZXIgYSBmb250IHdpdGggdGhlIGhlaWdodCBzcGVjaWZpZWQKLWluIHBvaW50cy4gSG93ZXZlciwgcG9pbnQtdG8tcGl4ZWwgcmF0aW8gZGVwZW5kcyBvbiB0aGUgcmVhbCBwaHlzaWNhbCBzaXplIAotb2YgeW91ciBkaXNwbGF5ICgxNSIsIDE3IiwgZXRjLi4uKS4gWCB0cmllcyB0byBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHRoYXQgCi1idXQgaXQgY2FuIGJlIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBhY3R1YWwgc2l6ZS4gWW91IGNhbiBjaGFuZ2UgdGhpcwotcmF0aW8gYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgZW50cnkgdG8gdGhlIFtmb250c10gc2VjdGlvbjoKLQotUmVzb2x1dGlvbiA9IDxpbnRlZ2VyIHZhbHVlPgotCi1JbiBnZW5lcmFsLCBoaWdoZXIgbnVtYmVycyBnaXZlIHlvdSBsYXJnZXIgZm9udHMuIFRyeSB0byBleHBlcmltZW50IHdpdGgKLXZhbHVlcyBpbiB0aGUgNjAgLSAxMjAgcmFuZ2UuIDk2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KLQotCi0iRk9OVF9Jbml0OiBmYWlsZWQgdG8gbG9hZCAuLi4iIE1lc3NhZ2VzIE9uIFN0YXJ0dXAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgbW9zdCBsaWtlbHkgY2F1c2UgaXMgYSBicm9rZW4gZm9udHMuZGlyIGZpbGUgaW4gb25lIG9mIHlvdXIgZm9udAotZGlyZWN0b3JpZXMuIFlvdSBuZWVkIHRvIHJlcnVuICdta2ZvbnRkaXInIHRvIHJlYnVpbGQgdGhpcyBmaWxlLiBSZWFkCi1pdHMgbWFucGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gSWYgeW91IGNhbid0IHJ1biBta2ZvbnRkaXIgb24gdGhpcyBtYWNoaW5lCi1hcyB5b3UgYXJlIG5vdCByb290LCB1c2UgInhzZXQgLWZwIHh4eCIgdG8gcmVtb3ZlIHRoZSBicm9rZW4gZm9udCBwYXRoLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9mb250cy5zZ21sIGIvZG9jdW1lbnRhdGlvbi9mb250cy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDI5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2ZvbnRzLnNnbWwKQEAgLTAsMCArMSw0OTggQEAKKyAgPGNoYXB0ZXIgaWQ9ImZvbnRzIj4KKyAgICA8dGl0bGU+RGVhbGluZyB3aXRoIEZvbnRzPC90aXRsZT4KKworICAgIDxzZWN0MSBpZD0id2luZG93cy1mb250cyI+CisgICAgICA8dGl0bGU+Rm9udHM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSA/Pz8KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9mb250czwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGNvbW1hbmQ+Zm50MmJkZjwvY29tbWFuZD4gdXRpbGl0eSBpcyBpbmNsdWRlZCB3aXRoCisgICAgICAgICAgICBXaW5lLiBJdCBjYW4gYmUgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT50b29sczwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkuIExpbmtzIHRvIHRoZSBvdGhlciB0b29scyBtZW50aW9uZWQgaW4gdGhpcworICAgICAgICAgICAgZG9jdW1lbnQgY2FuIGJlIGZvdW5kIG9uIHdpbmUgaGVhZHF1YXJ0ZXJzOgorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy53aW5laHEuY29tL3Rvb2xzLmh0bWwiPmh0dHA6Ly93d3cud2luZWhxLmNvbS90b29scy5odG1sPC91bGluaz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SG93IFRvIENvbnZlcnQgV2luZG93cyBGb250czwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBoYXZlIGFjY2VzcyB0byBhIFdpbmRvd3MgaW5zdGFsbGF0aW9uIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgPGNvbW1hbmQ+Zm50MmJkZjwvY29tbWFuZD4gdXRpbGl0eSAoZm91bmQgaW4gdGhlCisgICAgICAgICAgPGZpbGVuYW1lPnRvb2xzPC9maWxlbmFtZT4gZGlyZWN0b3J5KSB0byBjb252ZXJ0IGJpdG1hcAorICAgICAgICAgIGZvbnRzICg8ZmlsZW5hbWU+VkdBU1lTLkZPTjwvZmlsZW5hbWU+LAorICAgICAgICAgIDxmaWxlbmFtZT5TU0VSSUZFLkZPTjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICA8ZmlsZW5hbWU+U0VSSUZFLkZPTjwvZmlsZW5hbWU+KSBpbnRvIHRoZSBmb3JtYXQgdGhhdCB0aGUgWAorICAgICAgICAgIFdpbmRvdyBTeXN0ZW0gY2FuIHJlY29nbml6ZS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+RXh0cmFjdCBiaXRtYXAgZm9udHMgd2l0aCA8Y29tbWFuZD5mbnQyYmRmPC9jb21tYW5kPi48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ29udmVydCA8ZmlsZW5hbWU+LmJkZjwvZmlsZW5hbWU+IGZpbGVzIHByb2R1Y2VkIGJ5IFN0ZXAKKyAgICAgICAgICAgICAgMSBpbnRvIDxmaWxlbmFtZT4ucGNmPC9maWxlbmFtZT4gZmlsZXMgd2l0aAorICAgICAgICAgICAgICA8Y29tbWFuZD5iZGZ0b3BjZjwvY29tbWFuZD4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ29weSA8ZmlsZW5hbWU+LnBjZjwvZmlsZW5hbWU+IGZpbGVzIHRvIHRoZSBmb250IHNlcnZlcgorICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2hpY2ggaXMgdXN1YWxseQorICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvWDExL2ZvbnRzL21pc2M8L2ZpbGVuYW1lPiAoeW91IHdpbGwKKyAgICAgICAgICAgICAgcHJvYmFibHkgIG5lZWQgc3VwZXJ1c2VyIHByaXZpbGVnZXMpLiBJZiB5b3Ugd2FudCB0bworICAgICAgICAgICAgICBjcmVhdGUgYSBuZXcgZm9udCBkaXJlY3RvcnkgeW91IHdpbGwgbmVlZCB0byBhZGQgaXQgdG8KKyAgICAgICAgICAgICAgdGhlIGZvbnQgcGF0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBSdW4gPGNvbW1hbmQ+bWtmb250ZGlyPC9jb21tYW5kPiBmb3IgdGhlIGRpcmVjdG9yeSB5b3UKKyAgICAgICAgICAgICAgY29waWVkIGZvbnRzIHRvLiBJZiB5b3UgYXJlIGFscmVhZHkgaW4gWCB5b3Ugc2hvdWxkIHJ1bgorICAgICAgICAgICAgICA8Y29tbWFuZD54c2V0IGZwIHJlaGFzaDwvY29tbWFuZD4gdG8gbWFrZSBYIHNlcnZlciBhd2FyZQorICAgICAgICAgICAgICBvZiB0aGUgbmV3IGZvbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIHJlbW92ZQorICAgICAgICAgICAgICBhbGlhc2VzIGZvciB0aGUgZm9udHMgeW91J3ZlIGp1c3QgaW5zdGFsbGVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdJTkUgY2FuIGdldCBieSB3aXRob3V0IHRoZXNlIGZvbnRzIGJ1dCAndGhlIGxvb2sgYW5kIGZlZWwnCisgICAgICAgICAgbWF5IGJlIHF1aXRlIGRpZmZlcmVudC4gQWxzbywgc29tZSBhcHBsaWNhdGlvbnMgdHJ5IHRvIGxvYWQKKyAgICAgICAgICB0aGVpciBjdXN0b20gZm9udHMgb24gdGhlIGZseSAoV2luV29yZCA2LjApIGFuZCBzaW5jZSBXSU5FCisgICAgICAgICAgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMgeWV0IGl0IGluc3RlYWQgcHJpbnRzIG91dCBzb21ldGhpbmcKKyAgICAgICAgICBsaWtlOworICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitTVFVCOiBBZGRGb250UmVzb3VyY2UoIFNPTUVGSUxFLkZPTiApCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3UgY2FuIGNvbnZlcnQgdGhpcyBmaWxlIHRvby4gTm90ZSB0aGF0CisgICAgICAgICAgPGZpbGVuYW1lPi5GT048L2ZpbGVuYW1lPiBmaWxlIG1heSBub3QgaG9sZCAgYW55IGJpdG1hcAorICAgICAgICAgIGZvbnRzIGFuZCA8Y29tbWFuZD5mbnQyYmRmPC9jb21tYW5kPiB3aWxsIGZhaWwgaWYgdGhpcyBpcworICAgICAgICAgIHRoZSBjYXNlLiBBbHNvIG5vdGUgdGhhdCBhbHRob3VnaCB0aGUgYWJvdmUgbWVzc2FnZSB3aWxsIG5vdAorICAgICAgICAgIGRpc2FwcGVhciBXSU5FIHdpbGwgd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlCisgICAgICAgICAgZm9udCB5b3UgZXh0cmFjdGVkIGZyb20gdGhlCisgICAgICAgICAgPGZpbGVuYW1lPlNPTUVGSUxFLkZPTjwvZmlsZW5hbWU+LgorICAgICAgICAgIDxjb21tYW5kPmZudDJiZGY8L2NvbW1hbmQ+IHdpbGwgb25seSB3b3JrIGZvciBXaW5kb3dzIDMuMQorICAgICAgICAgIGZvbnRzLiBJdCAgd2lsbCBub3Qgd29yayBmb3IgVHJ1ZVR5cGUgZm9udHMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hhdCB0byBkbyB3aXRoIFRydWVUeXBlIGZvbnRzPyBUaGVyZSBhcmUgc2V2ZXJhbCBjb21tZXJjaWFsCisgICAgICAgICAgZm9udCB0b29scyB0aGF0IGNhbiBjb252ZXJ0IHRoZW0gdG8gdGhlIFR5cGUxIGZvcm1hdCBidXQgdGhlCisgICAgICAgICAgcXVhbGl0eSBvZiB0aGUgcmVzdWx0aW5nIGZvbnRzIGlzIGZhciBmcm9tIHN0ZWxsYXIuIFRoZQorICAgICAgICAgIG90aGVyIHdheSB0byB1c2UgdGhlbSBpcyB0byBnZXQgYSBmb250IHNlcnZlciBjYXBhYmxlIG9mCisgICAgICAgICAgcmVuZGVyaW5nICBUcnVlVHlwZSAoQ2FsZGVyYSBoYXMgb25lLCB0aGVyZSBhbHNvIGlzIHRoZSBmcmVlCisgICAgICAgICAgPGNvbW1hbmQ+eGZzdHQ8L2NvbW1hbmQ+IGluCisgICAgICAgICAgPGZpbGVuYW1lPkxpbnV4L1gxMS9mb250czwvZmlsZW5hbWU+IG9uIHN1bnNpdGUgYW5kIG1pcnJvcnMsCisgICAgICAgICAgaWYgeW91J3JlIG9uIEZyZWVCU0QgeW91IGNhbiB1c2UgdGhlIHBvcnQgaW4KKyAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9wb3J0cy94MTEtc2VydmVycy9YZnN0dDwvZmlsZW5hbWU+LiAgQW5kCisgICAgICAgICAgdGhlcmUgaXMgPGNvbW1hbmQ+eGZzZnQ8L2NvbW1hbmQ+IHdoaWNoIHVzZXMgdGhlIGZyZWV0eXBlCisgICAgICAgICAgbGlicmFyeSwgc2VlIDxmaWxlbmFtZT5kb2N1bWVudGF0aW9uL3R0ZnNlcnZlcjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBIb3dldmVyLCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIHRoZSBuYXRpdmUgVHJ1ZVR5cGUKKyAgICAgICAgICBzdXBwb3J0IHZpYSBGcmVlVHlwZSByZW5kZXJlciBpbiB0aGUgZnV0dXJlIChoaW50LCBoaW50IDotKQorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Ib3cgVG8gQWRkIEZvbnQgQWxpYXNlcyBUbyA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNYW55IFdpbmRvd3MgYXBwbGljYXRpb25zIGFzc3VtZSB0aGF0IGZvbnRzIGluY2x1ZGVkIGluCisgICAgICAgICAgb3JpZ2luYWwgV2luZG93cyAzLjEgIGRpc3RyaWJ1dGlvbiBhcmUgYWx3YXlzIHByZXNlbnQuIEJ5CisgICAgICAgICAgZGVmYXVsdCBXaW5lIGNyZWF0ZXMgYSBudW1iZXIgb2YgYWxpYXNlcyB0aGF0IG1hcCB0aGVtIG9uCisgICAgICAgICAgdGhlIGV4aXN0aW5nIFggZm9udHM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5XaW5kb3dzIGZvbnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT4uLi5pcyBtYXBwZWQgdG8uLi48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5YIGZvbnQ8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PiJNUyBTYW5zIFNlcmlmIjwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPi0mZ3Q7PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+Ii1hZG9iZS1oZWx2ZXRpY2EtIjwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT4iTVMgU2VyaWYiPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+LSZndDs8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT4iLWJpdHN0cmVhbS1jaGFydGVyLSI8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+IlRpbWVzIE5ldyBSb21hbiI8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4tJmd0OzwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PiItYWRvYmUtdGltZXMtIjwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT4iQXJpYWwiPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+LSZndDs8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT4iLWFkb2JlLWhlbHZldGljYS0iPC9lbnRyeT4KKyAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICA8L2luZm9ybWFsdGFibGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlcmUgaXMgbm8gZGVmYXVsdCBhbGlhcyBmb3IgdGhlICJTeXN0ZW0iIGZvbnQuIEFsc28sIG5vCisgICAgICAgICAgYWxpYXNlcyBhcmUgIGNyZWF0ZWQgZm9yIHRoZSBmb250cyB0aGF0IGFwcGxpY2F0aW9ucyBpbnN0YWxsCisgICAgICAgICAgYXQgcnVudGltZS4gVGhlIHJlY29tbWVuZGVkICB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgcHJvYmxlbQorICAgICAgICAgIGlzIHRvIGNvbnZlcnQgdGhlIG1pc3NpbmcgZm9udCAoc2VlIGFib3ZlKS4gIElmIGl0IHByb3ZlcworICAgICAgICAgIGltcG9zc2libGUsIGxpa2UgaW4gdGhlIGNhc2Ugd2l0aCBUcnVlVHlwZSBmb250cywgeW91IGNhbgorICAgICAgICAgIGZvcmNlICB0aGUgZm9udCBtYXBwZXIgdG8gY2hvb3NlIGEgY2xvc2VseSByZWxhdGVkIFggZm9udCBieQorICAgICAgICAgIGFkZGluZyBhbiBhbGlhcyB0byB0aGUgIFtmb250c10gc2VjdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgWCBmb250IGFjdHVhbGx5IGV4aXN0cyAod2l0aCA8Y29tbWFuZD54Zm9udHNlbDwvY29tbWFuZD4KKyAgICAgICAgICB0b29sKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorQWxpYXNOID0gW1dpbmRvd3MgZm9udF0sIFtYIGZvbnRdICZsdDssIG9wdGlvbmFsICJtYXNrIFggZm9udCIgZmxhZyZndDsKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEV4YW1wbGU6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK0FsaWFzMCA9IFN5c3RlbSwgLS1pbnRlcm5hdGlvbmFsLSwgc3Vic3QKK0FsaWFzMSA9IC4uLgorLi4uCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBDb21tZW50czoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGVyZSBtdXN0IGJlIG5vIGdhcHMgaW4gdGhlIHNlcXVlbmNlIDxsaXRlcmFsPnswLCAuLi4sCisgICAgICAgICAgICAgICAgTn08L2xpdGVyYWw+IG90aGVyd2lzZSBhbGwgYWxpYXNlcyBhZnRlciB0aGUgZmlyc3QgZ2FwCisgICAgICAgICAgICAgIHdvbid0IGJlIHJlYWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVXN1YWxseSBmb250IG1hcHBlciB0cmFuc2xhdGVzIFggZm9udCBuYW1lcyBpbnRvIGZvbnQKKyAgICAgICAgICAgICAgbmFtZXMgdmlzaWJsZSB0byBXaW5kb3dzIHByb2dyYW1zIGluIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgZmFzaGlvbjoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPGluZm9ybWFsdGFibGU+CisgICAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlggZm9udDwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT4uLi53aWxsIHNob3cgdXAgYXMuLi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+RXh0cmFjdGVkIG5hbWU8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LS1pbnRlcm5hdGlvbmFsLS4uLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4tJmd0OzwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT4iSW50ZXJuYXRpb25hbCI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LWFkb2JlLWhlbHZldGljYS0uLi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+LSZndDs8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+IkhlbHZldGljYSI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LWFkb2JlLXV0b3BpYS0uLi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+LSZndDs8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+IlV0b3BpYSI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LW1pc2MtZml4ZWQtLi4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPi0mZ3Q7PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PiJGaXhlZCI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LS4uLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj4tJmd0OzwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+LXNvbnktZml4ZWQtLi4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPi0mZ3Q7PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PiJTb255IEZpeGVkIjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT4tLi4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPi0mZ3Q7PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICA8L3Rncm91cD4KKyAgICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIE5vdGUgdGhhdCBzaW5jZSA8bGl0ZXJhbD4tbWlzYy1maXhlZC08L2xpdGVyYWw+IGFuZAorICAgICAgICAgICAgICA8bGl0ZXJhbD4tc29ueS1maXhlZC08L2xpdGVyYWw+IGFyZSBkaWZmZXJlbnQgZm9udHMgV2luZQorICAgICAgICAgICAgICBtb2RpZmllZCB0aGUgc2Vjb25kIGV4dHJhY3RlZCBuYW1lIHRvIG1ha2Ugc3VyZSBXaW5kb3dzCisgICAgICAgICAgICAgIHByb2dyYW1zIGNhbiBkaXN0aW5ndWlzaCB0aGVtIGJlY2F1c2Ugb25seSBleHRyYWN0ZWQKKyAgICAgICAgICAgICAgbmFtZXMgYXBwZWFyIGluIHRoZSBmb250IHNlbGVjdGlvbiBkaWFsb2dzLiAKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAiTWFza2luZyIgYWxpYXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIGV4dHJhY3RlZCBuYW1lIHNvCisgICAgICAgICAgICAgIHRoYXQgaW4gdGhlICBleGFtcGxlIGNhc2Ugd2Ugd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgbWFwcGluZzoKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgorICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgIDxlbnRyeT5YIGZvbnQ8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Li4uaXMgbWFza2VkIHRvLi4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5PkV4dHJhY3RlZCBuYW1lPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pi0taW50ZXJuYXRpb25hbC0uLi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+LSZndDs8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICA8ZW50cnk+IlN5c3RlbSI8L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIk5vbm1hc2tpbmciIGFsaWFzZXMgYXJlIHRyYW5zcGFyZW50IHRvIHRoZSB1c2VyIGFuZAorICAgICAgICAgICAgICB0aGV5IGRvIG5vdCByZXBsYWNlIGV4dHJhY3RlZCBuYW1lcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBXaW5lIGRpc2NhcmRzIGFuIGFsaWFzIHdoZW4gaXQgc2VlcyB0aGF0IHRoZSBuYXRpdmUgWAorICAgICAgICAgICAgICBmb250IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIFdpbmRvd3MgZm9udHMgbWVudGlvbmVkIGluCisgICAgICAgICAgICAgIHRoZSBmaXJzdCAgcGFyYWdyYXBoIHlvdSBzaG91bGQgdHJ5IHRvIHN1YnN0aXR1dGUgdGhlCisgICAgICAgICAgICAgICJTeXN0ZW0iIGZvbnQgd2l0aCAgbm9ubWFza2luZyBhbGlhcy4gVGhlCisgICAgICAgICAgICAgIDxjb21tYW5kPnhmb250c2VsPC9jb21tYW5kPiBhcHBsaWNhdGlvbiB3aWxsIHNob3cgeW91CisgICAgICAgICAgICAgIHRoZSBmb250cyBhdmFpbGFibGUgdG8gWC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxzY3JlZW4+CitBbGlhcy4uID0gU3lzdGVtLCAuLi5ib2xkIGZvbnQgd2l0aG91dCBzZXJpZnMKKyAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbHNvLCBzb21lIFdpbmRvd3MgYXBwbGljYXRpb25zIHJlcXVlc3QgZm9udHMgd2l0aG91dAorICAgICAgICAgIHNwZWNpZnlpbmcgdGhlICB0eXBlZmFjZSBuYW1lIG9mIHRoZSBmb250LiBGb250IHRhYmxlIHN0YXJ0cworICAgICAgICAgIHdpdGggQXJpYWwgaW4gbW9zdCBXaW5kb3dzICBpbnN0YWxsYXRpb25zLCBob3dldmVyIFggZm9udAorICAgICAgICAgIHRhYmxlIHN0YXJ0cyB3aXRoIHdoYXRldmVyIGlzIHRoZSBmaXJzdCBsaW5lICBpbiB0aGUKKyAgICAgICAgICA8ZmlsZW5hbWU+Zm9udHMuZGlyPC9maWxlbmFtZT4uICBUaGVyZWZvcmUgV0lORSB1c2VzIHRoZQorICAgICAgICAgIGZvbGxvd2luZyBlbnRyeSB0byBkZXRlcm1pbmUgIHdoaWNoIGZvbnQgdG8gY2hlY2sgZmlyc3QuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRXhhbXBsZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorRGVmYXVsdCA9IC1hZG9iZS10aW1lcy0KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIENvbW1lbnRzOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEl0IGlzIGJldHRlciB0byBoYXZlIGEgc2NhbGFibGUgZm9udCBmYW1pbHkgKGJvbGRzIGFuZAorICAgICAgICAgIGl0YWxpY3MgaW5jbHVkZWQpICBhcyB0aGUgZGVmYXVsdCBjaG9pY2UgYmVjYXVzZSBtYXBwZXIKKyAgICAgICAgICBjaGVja3MgYWxsIGF2YWlsYWJsZSBmb250cyB1bnRpbCAgcmVxdWVzdGVkIGhlaWdodCBhbmQgb3RoZXIKKyAgICAgICAgICBhdHRyaWJ1dGVzIG1hdGNoIHBlcmZlY3RseSBvciB0aGUgZW5kIG9mIHRoZSAgZm9udCB0YWJsZSBpcworICAgICAgICAgIHJlYWNoZWQuIFR5cGljYWwgWCBpbnN0YWxsYXRpb25zIGhhdmUgc2NhbGFibGUgZm9udHMgaW4gdGhlCisgICAgICAgICAgPGZpbGVuYW1lPi4uL2ZvbnRzL1R5cGUxPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgPGZpbGVuYW1lPi4uL2ZvbnRzL1NwZWVkbzwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Ib3cgVG8gTWFuYWdlIENhY2hlZCBGb250IE1ldHJpY3M8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXSU5FIHN0b3JlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgZm9udHMgaW4KKyAgICAgICAgICB0aGUgPGZpbGVuYW1lPn4vLndpbmUvLmNhY2hlZG1ldHJpY3M8L2ZpbGVuYW1lPiBmaWxlLiBZb3UKKyAgICAgICAgICBjYW4gY29weSBpdCBlbHNld2hlcmUgYW5kIGFkZCB0aGlzIGVudHJ5IHRvIHRoZSBbZm9udHNdCisgICAgICAgICAgc2VjdGlvbiAgaW4geW91ciA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT46CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK0ZvbnRNZXRyaWNzID0gJmx0O2ZpbGUgd2l0aCBtZXRyaWNzJmd0OworICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgV0lORSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlIFggZm9udCBjb25maWd1cmF0aW9uIGl0IHdpbGwKKyAgICAgICAgICByZWJ1aWxkIGZvbnQgbWV0cmljcyBmcm9tIHNjcmF0Y2ggYW5kIHRoZW4gaXQgd2lsbCBvdmVyd3JpdGUKKyAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS8uY2FjaGVkbWV0cmljczwvZmlsZW5hbWU+IHdpdGggIHRoZSBuZXcKKyAgICAgICAgICBpbmZvcm1hdGlvbi4gVGhpcyBwcm9jZXNzIGNhbiB0YWtlIGEgd2hpbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRvbyBTbWFsbCBPciBUb28gTGFyZ2UgRm9udHM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaW5kb3dzIHByb2dyYW1zIG1heSBhc2sgV0lORSB0byByZW5kZXIgYSBmb250IHdpdGggdGhlCisgICAgICAgICAgaGVpZ2h0IHNwZWNpZmllZCBpbiBwb2ludHMuIEhvd2V2ZXIsIHBvaW50LXRvLXBpeGVsIHJhdGlvCisgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgcmVhbCBwaHlzaWNhbCBzaXplICBvZiB5b3VyIGRpc3BsYXkgKDE1IiwKKyAgICAgICAgICAxNyIsIGV0Yy4uLikuIFggdHJpZXMgdG8gcHJvdmlkZSBhbiBlc3RpbWF0ZSBvZiB0aGF0ICBidXQgaXQKKyAgICAgICAgICBjYW4gYmUgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIGFjdHVhbCBzaXplLiBZb3UgY2FuIGNoYW5nZQorICAgICAgICAgIHRoaXMgcmF0aW8gYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgZW50cnkgdG8gdGhlIFtmb250c10KKyAgICAgICAgICBzZWN0aW9uOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitSZXNvbHV0aW9uID0gJmx0O2ludGVnZXIgdmFsdWUmZ3Q7CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiBnZW5lcmFsLCBoaWdoZXIgbnVtYmVycyBnaXZlIHlvdSBsYXJnZXIgZm9udHMuIFRyeSB0bworICAgICAgICAgIGV4cGVyaW1lbnQgd2l0aCB2YWx1ZXMgaW4gdGhlIDYwIC0gMTIwIHJhbmdlLiA5NiBpcyBhIGdvb2QKKyAgICAgICAgICBzdGFydGluZyBwb2ludC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+IkZPTlRfSW5pdDogZmFpbGVkIHRvIGxvYWQgLi4uIiBNZXNzYWdlcyBPbiBTdGFydHVwPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG1vc3QgbGlrZWx5IGNhdXNlIGlzIGEgYnJva2VuCisgICAgICAgICAgPGZpbGVuYW1lPmZvbnRzLmRpcjwvZmlsZW5hbWU+IGZpbGUgaW4gb25lIG9mIHlvdXIgZm9udAorICAgICAgICAgIGRpcmVjdG9yaWVzLiBZb3UgbmVlZCB0byByZXJ1biA8Y29tbWFuZD5ta2ZvbnRkaXI8L2NvbW1hbmQ+CisgICAgICAgICAgdG8gcmVidWlsZCB0aGlzIGZpbGUuIFJlYWQgaXRzIG1hbnBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgSWYgeW91IGNhbid0IHJ1biA8Y29tbWFuZD5ta2ZvbnRkaXI8L2NvbW1hbmQ+IG9uIHRoaXMKKyAgICAgICAgICBtYWNoaW5lIGFzIHlvdSBhcmUgbm90IHJvb3QsIHVzZSA8Y29tbWFuZD54c2V0IC1mcAorICAgICAgICAgICAgeHh4PC9jb21tYW5kPiB0byByZW1vdmUgdGhlIGJyb2tlbiBmb250IHBhdGguCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0idHRmb250LXNlcnZlciI+CisgICAgPHRpdGxlPlNldHRpbmcgdXAgYSBUcnVlVHlwZSBGb250IFNlcnZlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSA/Pz8KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi90dGZzZXJ2ZXI8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvbGxvdyB0aGVzZSBpbnN0cnVjdGlvbnMgdG8gc2V0IHVwIGEgVHJ1ZVR5cGUgZm9udCBzZXJ2ZXIgb24geW91ciBzeXN0ZW0uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPkdldCA8ZmlsZW5hbWU+ZnJlZXR5cGUtMS4wLmZ1bGwudGFyLmd6PC9maWxlbmFtZT48L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5SZWFkIGRvY3MsIHVucGFjaywgY29uZmlndXJlIGFuZCBpbnN0YWxsPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+VGVzdCB0aGUgbGlicmFyeSwgZS5nLiA8Y29tbWFuZD5mdHZpZXcgMjAgL2Rvc2Mvd2luOTUvZm9udHMvdGltZXM8L2NvbW1hbmQ+PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+R2V0IDxmaWxlbmFtZT54ZnNmdC1iZXRhMWUubGludXgtaTU4NjwvZmlsZW5hbWU+PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbnN0YWxsIGl0IGFuZCBzdGFydCBpdCB3aGVuIGJvb3RpbmcsIGUuZy4gaW4gYW4KKyAgICAgICAgICAgIHJjLXNjcmlwdC4gIFRoZSBtYW5wYWdlIGZvciA8Y29tbWFuZD54ZnM8L2NvbW1hbmQ+CisgICAgICAgICAgICBhcHBsaWVzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPkZvbGxvdyB0aGUgaGludHMgZ2l2ZW4gYnkgPGVtYWlsPndpbGxpYW1jQGRhaS5lZC5hYy51azwvZW1haWw+PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJIGdvdCA8Y29tbWFuZD54ZnNmdDwvY29tbWFuZD4gZnJvbQorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5kY3MuZWQuYWMudWsvaG9tZS9qZWMvcHJvZ2luZGV4Lmh0bWwiPmh0dHA6Ly93d3cuZGNzLmVkLmFjLnVrL2hvbWUvamVjL3Byb2dpbmRleC5odG1sPC91bGluaz4uCisgICAgICAgICAgICBJIGhhdmUgaXQgcnVubmluZyBhbGwgdGhlIHRpbWUuICBIZXJlIGlzCisgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9YMTFSNi9saWIvWDExL2ZzL2NvbmZpZzwvZmlsZW5hbWU+OgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitjbG9uZS1zZWxmID0gb24KK3VzZS1zeXNsb2cgPSBvZmYKK2NhdGFsb2d1ZSA9IC9jL3dpbmRvd3MvZm9udHMKK2Vycm9yLWZpbGUgPSAvdXNyL1gxMVI2L2xpYi9YMTEvZnMvZnMtZXJyb3JzCitkZWZhdWx0LXBvaW50LXNpemUgPSAxMjAKK2RlZmF1bHQtcmVzb2x1dGlvbnMgPSA3NSw3NSwxMDAsMTAwCisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9idmlvdXNseSA8ZmlsZW5hbWU+L2Mvd2luZG93cy9mb250czwvZmlsZW5hbWU+IGlzIHdoZXJlCisgICAgICAgICAgICBteSBXaW5kb3dzIGZvbnRzIG9uIG15IFdpbjk1IDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPgorICAgICAgICAgICAgZHJpdmUgbGl2ZTsgY291bGQgYmUgZS5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPi9tbnQvZG9zQy93aW5kb3dzL3N5c3RlbTwvZmlsZW5hbWU+IGZvciBXaW4zMS4KKyAgICAgICAgICAgIEluIDxmaWxlbmFtZT4vYy93aW5kb3dzL2ZvbnRzL2ZvbnRzLnNjYWxlPC9maWxlbmFtZT4gSQorICAgICAgICAgICAgaGF2ZQorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisxNAorYXJpYWwudHRmIC1tb25vdHlwZS1hcmlhbC1tZWRpdW0tci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQorYXJpYWxiZC50dGYgLW1vbm90eXBlLWFyaWFsLWJvbGQtci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQorYXJpYWxiaS50dGYgLW1vbm90eXBlLWFyaWFsLWJvbGQtby1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQorYXJpYWxpLnR0ZiAtbW9ub3R5cGUtYXJpYWwtbWVkaXVtLW8tbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKK2NvdXIudHRmIC1tb25vdHlwZS1jb3VyaWVyLW1lZGl1bS1yLW5vcm1hbC0tMC0wLTAtMC1wLTAtaXNvODg1OS0xCitjb3VyYmQudHRmIC1tb25vdHlwZS1jb3VyaWVyLWJvbGQtci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQorY291cmJpLnR0ZiAtbW9ub3R5cGUtY291cmllci1ib2xkLW8tbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKK2NvdXJpLnR0ZiAtbW9ub3R5cGUtY291cmllci1tZWRpdW0tby1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQordGltZXMudHRmIC1tb25vdHlwZS10aW1lcy1tZWRpdW0tci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQordGltZXNiZC50dGYgLW1vbm90eXBlLXRpbWVzLWJvbGQtci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQordGltZXNiaS50dGYgLW1vbm90eXBlLXRpbWVzLWJvbGQtaS1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQordGltZXNpLnR0ZiAtbW9ub3R5cGUtdGltZXMtbWVkaXVtLWktbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKK3N5bWJvbC50dGYgLW1vbm90eXBlLXN5bWJvbC1tZWRpdW0tci1ub3JtYWwtLTAtMC0wLTAtcC0wLW1pY3Jvc29mdC1zeW1ib2wKK3dpbmdkaW5nLnR0ZiAtbWljcm9zb2Z0LXdpbmdkaW5ncy1tZWRpdW0tci1ub3JtYWwtLTAtMC0wLTAtcC0wLW1pY3Jvc29mdC1zeW1ib2wKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gPGZpbGVuYW1lPi9jL3dpbmRvd3MvZm9udHMvZm9udHMuZGlyPC9maWxlbmFtZT4gSSBoYXZlCisgICAgICAgICAgICBleGFjdGx5IHRoZSBzYW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIDxmaWxlbmFtZT4vdXNyL1gxMVI2L2xpYi9YMTEvWEY4NkNvbmZpZzwvZmlsZW5hbWU+IEkgaGF2ZQorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitGb250UGF0aCAidGNwL2xvY2FsaG9zdDo3MTAwIgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBpbiBmcm9udCBvZiB0aGUgb3RoZXIgPGxpdGVyYWw+Rm9udFBhdGg8L2xpdGVyYWw+IGxpbmVzLgorICAgICAgICAgICAgVGhhdCdzIGl0ISAgQXMgYW4gaW50ZXJlc3RpbmcgYnktcHJvZHVjdCBvZiBjb3Vyc2UsIGFsbAorICAgICAgICAgICAgdGhvc2Ugd2ViIHBhZ2VzIHdoaWNoIHNwZWNpZnkgQXJpYWwgY29tZSB1cCBpbiBBcmlhbCBpbgorICAgICAgICAgICAgTmV0c2NhcGUgLi4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaHV0IGRvd24gWCBhbmQgcmVzdGFydCAoYW5kIGRlYnVnIGVycm9ycyB5b3UgZGlkIHdoaWxlCisgICAgICAgICAgICBzZXR0aW5nIHVwIGV2ZXJ5dGhpbmcpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPlRlc3Qgd2l0aCBlLmcgPGNvbW1hbmQ+eGxzZm9udCB8IGdyZXAgYXJpYWw8L2NvbW1hbmQ+PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKworICAgICAgPHBhcmE+CisgICAgICAgIEhvcGUgdGhpcyBoZWxwcy4uLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydCBiL2RvY3VtZW50YXRpb24vaG93LXRvLXBvcnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMmUyM2QuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi1XaGF0IGlzIHRoaXM/Ci0tLS0tLS0tLS0tLS0KLQotVGhpcyBub3RlIGlzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YKLQotKiBIb3cgdG8gcG9ydCBXaW5lIHRvIHlvdXIgZmF2b3VyaXRlIG9wZXJhdGluZyBzeXN0ZW0KLSogV2h5IHlvdSBwcm9iYWJseSBzaG91bGRuJ3QgdXNlICIjaWZkZWYgTXlPUyIKLSogV2hhdCB0byBkbyBpbnN0ZWFkLgotCi1UaGlzIGRvY3VtZW50IGRvZXMgbm90IHNheSBhIHRoaW5nIGFib3V0IGhvdyB0byBwb3J0IFdpbmUgdG8gbm9uLTM4Ngotb3BlcmF0aW5nIHN5c3RlbXMsIHRob3VnaC4gIFlvdSB3b3VsZCBuZWVkIGEgQ1BVIGVtdWxhdG9yLiAgTGV0J3MgZ2V0Ci1XaW5lIGludG8gYSBiZXR0ZXIgc2hhcGUgb24gMzg2IGZpcnN0LCBPSz8KLQotCi0KLQotV2h5ICIjaWZkZWYgTXlPUyIgaXMgcHJvYmFibHkgYSBtaXN0YWtlLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU9wZXJhdGluZyBzeXN0ZW1zIGNoYW5nZS4gIE1heWJlIHlvdXJzIGRvZXNuJ3QgaGF2ZSB0aGUgImZvby5oIgotaGVhZGVyLCBidXQgbWF5YmUgYSBmdXR1cmUgdmVyc2lvbiB3aWxsIGhhdmUgaXQuICBJZiB5b3Ugd2FudAotdG8gIiNpbmNsdWRlIDxmb28uaD4iLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IG9wZXJhdGluZyBzeXN0ZW0KLXlvdSBhcmUgdXNpbmc7IGl0IG9ubHkgbWF0dGVycyB3aGV0aGVyICJmb28uaCIgaXMgdGhlcmUuCi0KLUZ1cnRoZXJtb3JlLCBvcGVyYXRpbmcgc3lzdGVtcyBjaGFuZ2UgbmFtZXMgb3IgImZvcmsiIGludG8KLXNldmVyYWwgb25lcy4gIEFuICIjaWZkZWYgTXlPcyIgd2lsbCBicmVhayBvdmVyIHRpbWUuCi0KLUlmIHlvdSB1c2UgdGhlIGZlYXR1cmUgb2YgQXV0b2NvbmYsIHRoZSBHbnUgYXV0by1jb25maWd1cmF0aW9uCi11dGlsaXR5IHdpc2VseSwgeW91IHdpbGwgaGVscCBmdXR1cmUgcG9ydGVycyBhdXRvbWF0aWNhbGx5Ci1iZWNhdXNlIHlvdXIgY2hhbmdlcyB3aWxsIHRlc3QgZm9yIF9mZWF0dXJlc18sIG5vdCBuYW1lcyBvZgotb3BlcmF0aW5nIHN5c3RlbXMuICBBIGZlYXR1cmUgY2FuIGJlIG1hbnkgdGhpbmdzOgotCi0qIGV4aXN0YW5jZSBvZiBhIGhlYWRlciBmaWxlCi0qIGV4aXN0YW5jZSBvZiBhIGxpYnJhcnkgZnVuY3Rpb24KLSogZXhpc3RhbmNlIG9mIGxpYnJhcmllcwotKiBidWdzIGluIGhlYWRlciBmaWxlcywgbGlicmFyeSBmdW5jdGlvbnMsIHRoZSBjb21waWxlciwgLi4uCi0qICh5b3UgbmFtZSBpdCkKLQotWW91IHdpbGwgbmVlZCBHbnUgQXV0b2NvbmYsIHdoaWNoIHlvdSBjYW4gZ2V0IGZyb20geW91cgotZnJpZW5kbHkgR251IG1pcnJvci4gIFRoaXMgcHJvZ3JhbSB0YWtlcyBXaW5lJ3MgImNvbmZpZ3VyZS5pbiIKLWZpbGUgYW5kIHByb2R1Y2VzIGEgImNvbmZpZ3VyZSIgc2hlbGwgc2NyaXB0IHRoYXQgdXNlcnMgdXNlIHRvCi1jb25maWd1cmUgV2luZSB0byB0aGVpciBzeXN0ZW0uCi0KLVRoZXJlIF9hcmVfIGV4Y2VwdGlvbnMgdG8gdGhlICJhdm9pZCAjaWZkZWYgTXlPUyIgcnVsZS4gIFdpbmUsCi1mb3IgZXhhbXBsZSwgbmVlZHMgdGhlIGludGVybmFscyBvZiB0aGUgc2lnbmFsIHN0YWNrIC0tIHRoYXQKLWNhbm5vdCBlYXNpbHkgYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mIGZlYXR1cmVzLgotCi1MZXQncyBub3cgdHVybiB0byBzcGVjaWZpYyBwb3J0aW5nIHByb2JsZW1zIGFuZCBob3cgdG8gc29sdmUKLXRoZW0uCi0KLQotCi1NeU9TIGRvZXNuJ3QgaGF2ZSB0aGUgYGZvby5oJyBoZWFkZXIhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBmaXJzdCBzdGVwIGlzIHRvIG1ha2UgQXV0b2NvbmYgY2hlY2sgZm9yIHRoaXMgaGVhZGVyLgotSW4gY29uZmlndXJlLmluIHlvdSBhZGQgYSBzZWdtZW50IGxpa2UgdGhpcyBpbiB0aGUgc2VjdGlvbgotdGhhdCBjaGVja3MgZm9yIGhlYWRlciBmaWxlcyAoc2VhcmNoIGZvciAiaGVhZGVyIGZpbGVzIik6Ci0KLSAgQUNfQ0hFQ0tfSEVBREVSKGZvby5oLCBBQ19ERUZJTkUoSEFWRV9GT09fSCkpCi0KLUlmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBhIGhlYWRlciBmaWxlIHdpdGggdGhlCi1zYW1lIGNvbnRlbnRzIGJ1dCBhIGRpZmZlcmVudCBuYW1lLCBzYXkgYmFyLmgsIGFkZCBhIGNoZWNrCi1mb3IgdGhhdCBhbHNvLgotCi1Ob3cgeW91IGNhbiBjaGFuZ2UKLQotICAjaW5jbHVkZSA8Zm9vLmg+Ci0KLXRvCi0KLSAgI2lmZGVmIEhBVkVfRk9PX0gKLSAgI2luY2x1ZGUgPGZvby5oPgotICAjZWxpZiBkZWZpbmVkIChIQVZFX0JBUl9IKQotICAjaW5jbHVkZSA8YmFyLmg+Ci0gICNlbmRpZgotCi1JZiB5b3VyIHN5c3RlbSBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlIGV2ZW4KLXRob3VnaCBpdCBoYXMgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGJlaW5nIHVzZWQsIHlvdSBtaWdodAotaGF2ZSB0byBhZGQgYW4gIiNlbHNlIiBzZWN0aW9uIHRvIHRoZSBjb25kaXRpb25hbC4gIEF2b2lkCi10aGlzIGlmIHlvdSBjYW4uCi0KLVlvdSB3aWxsIGFsc28gbmVlZCB0byBhZGQgIiN1bmRlZiBIQVZFX0ZPT19IIiAoZXRjLikgdG8KLWluY2x1ZGUvY29uZmlnLmguaW4KLQotRmluaXNoIHVwIHdpdGggIm1ha2UgY29uZmlndXJlIiBhbmQgIi4vY29uZmlndXJlIi4KLQotCi1NeU9TIGRvZXNuJ3QgaGF2ZSB0aGUgYGJhcicgZnVuY3Rpb24hCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgYG1lbW1vdmUnLiAgVG8gc29sdmUgdGhpcwotcHJvYmxlbSB5b3Ugd291bGQgYWRkIGBtZW1tb3ZlJyB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMKLXRoYXQgQXV0b2NvbmYgY2hlY2tzIGZvci4gIEluIGNvbmZpZ3VyZS5pbiB5b3Ugc2VhcmNoIGZvcgotQUNfQ0hFQ0tfRlVOQ1MgYW5kIGFkZCBgbWVtbW92ZScuICAoWW91IHdpbGwgbm90aWNlIHRoYXQKLXNvbWVvbmUgYWxyZWFkeSBkaWQgdGhpcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLikKLQotU2Vjb25kbHksIHlvdSB3aWxsIGFsc28gbmVlZCB0byBhZGQgIiN1bmRlZiBIQVZFX0JBUiIKLXRvIGluY2x1ZGUvY29uZmlnLmguaW4KLQotVGhlIG5leHQgc3RlcCBkZXBlbmRzIG9uIHRoZSBuYXR1cmUgb2YgdGhlIG1pc3NpbmcgZnVuY3Rpb24uCi0KLUNhc2UgMTogSXQncyBlYXN5IHRvIHdyaXRlIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCi0gIGZ1bmN0aW9uLiAgKGBtZW1tb3ZlJyBiZWxvbmdzIHRvIHRoaXMgY2FzZS4pCi0KLSAgWW91IGFkZCB5b3VyIGltcGxlbWVudGF0aW9uIGluIG1pc2MvcG9ydC5jIHN1cnJvdW5kZWQgYnkKLSAgIiNpZm5kZWYgSEFWRV9NRU1NT1ZFIiBhbmQgIiNlbmRpZiIuCi0KLSAgWW91IG1pZ2h0IGhhdmUgdG8gYWRkIGEgcHJvdG90eXBlIGZvciB5b3VyIGZ1bmN0aW9uLiAgSWYgc28sCi0gIGluY2x1ZGUvbWlzY2VtdS5oIG1pZ2h0IGJlIHRoZSBwbGFjZS4gIERvbid0IGZvcmdldCB0byBwcm90ZWN0Ci0gIHRoYXQgZGVmaW5pdGlvbiBieSAiI2lmbmRlZiBIQVZFX01FTU1PVkUiIGFuZCAiI2VuZGlmIiBhbHNvIQotCi1DYXNlIDI6IEEgZ2VuZXJhbCBpbXBsZW1lbnRhdGlvbiBpcyBoYXJkLCBidXQgV2luZSBpcyBvbmx5IHVzaW5nCi0gIGEgc3BlY2lhbCBjYXNlLgotCi0gIEFuIGV4YW1wbGUgaXMgdGhlIHZhcmlvdXMgIndhaXQiIGNhbGxzIHVzZWQgaW4gU0lHTkFMX2NoaWxkCi0gIGZyb20gbG9hZGVyL3NpZ25hbC5jLiAgSGVyZSB3ZSBoYXZlIGEgbXVsdGktYnJhbmNoIGNhc2Ugb24KLSAgZmVhdHVyZXM6Ci0KLSAgICAjaWZkZWYgSEFWRV9USElTCi0gICAgLi4uCi0gICAgI2VsaWYgZGVmaW5lZCAoSEFWRV9USEFUKQotICAgIC4uLgotICAgICNlbGlmIGRlZmluZWQgKEhBVkVfU09NRVRISU5HX0VMU0UpCi0gICAgLi4uCi0gICAgI2VuZGlmCi0KLSAgTm90ZSB0aGF0IHRoaXMgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB0ZXN0aW5nIG9uIG9wZXJhdGluZwotICBzeXN0ZW1zLiAgSWYgYSBuZXcgdmVyc2lvbiBvZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW1zIGNvbWVzCi0gIG91dCBhbmQgYWRkcyBhIG5ldyBmdW5jdGlvbiwgdGhpcyBjb2RlIHdpbGwgbWFnaWNhbGx5IHN0YXJ0Ci0gIHVzaW5nIGl0LgotCi1GaW5pc2ggdXAgd2l0aCAibWFrZSBjb25maWd1cmUiIGFuZCAiLi9jb25maWd1cmUiLgotCi0KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vaTE4bi5zZ21sIGIvZG9jdW1lbnRhdGlvbi9pMThuLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNGE4OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vaTE4bi5zZ21sCkBAIC0wLDAgKzEsMjAyIEBACisgIDxjaGFwdGVyIGlkPSJpMThuIj4KKyAgICA8dGl0bGU+SW50ZXJuYXRpb25hbGl6YXRpb248L3RpdGxlPgorCisgICAgPHNlY3QxIGlkPSJhZGRpbmctbGFuZ3VhZ2VzIj4KKyAgICAgIDx0aXRsZT5BZGRpbmcgTmV3IExhbmd1YWdlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IE1vcnRlbiBXZWxpbmRlciwgSmFudWFyeSAxOTk2LgorICAgICAgPC9wYXJhPgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+VGhlcmVhZnRlciByZXZpc2VkIEZlYnJ1YXJpIDE5OTkgYnkgS2xhYXMgdmFuIEdlbmQ8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5SZXZpc2VkIGFnYWluIE1heSAyMywgMTk5OSwgS2xhYXMgdmFuIEdlbmQ8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5VcGRhdGVkIE1heSAyNiwgMjAwMCwgWm9yYW4gRHplbGFqbGlqYTwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vbGFuZ3VhZ2VzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBuZWNlc3NhcnkgcHJvY2VkdXJlIGZvciBhZGRpbmcgYSBuZXcKKyAgICAgICAgbGFuZ3VhZ2UgdG8gdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRoYXQgV2luZSBjYW4gZGlzcGxheSBzeXN0ZW0KKyAgICAgICAgbWVudXMgYW5kIGZvcm1zIGluLiBDdXJyZW50bHkgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBsYW5ndWFnZXMKKyAgICAgICAgYXJlIHN0aWxsIG1pc3Npbmc6CisgICAgICAgIDxzaW1wbGVsaXN0IGNvbHVtbnM9IjUiIHR5cGU9Imhvcml6Ij4KKyAgICAgICAgICA8bWVtYmVyPkJ1bGdhcmlhbjwvbWVtYmVyPgorICAgICAgICAgIDxtZW1iZXI+Q2hpbmVzZTwvbWVtYmVyPgorICAgICAgICAgIDxtZW1iZXI+R3JlZWs8L21lbWJlcj4KKyAgICAgICAgICA8bWVtYmVyPkljZWxhbmRpYzwvbWVtYmVyPgorICAgICAgICAgIDxtZW1iZXI+SmFwYW5lc2U8L21lbWJlcj4KKyAgICAgICAgICA8bWVtYmVyPlJvbWFuaWFuPC9tZW1iZXI+CisgICAgICAgICAgPG1lbWJlcj5Dcm9hdGlhbjwvbWVtYmVyPgorICAgICAgICAgIDxtZW1iZXI+U2xvdmFrPC9tZW1iZXI+CisgICAgICAgICAgPG1lbWJlcj5UdXJraXNoPC9tZW1iZXI+CisgICAgICAgICAgPG1lbWJlcj5TbG92YW5pYW48L21lbWJlcj4KKyAgICAgICAgPC9zaW1wbGVsaXN0PgorICAgICAgPC9wYXJhPgorCisgICAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPkkgaG9wZSBJIGdvdCBhbGwgdGhlIHBsYWNlcyB3aGVyZSBjaGFuZ2VzIGFyZQorICAgICAgICAgICAgbmVlZGVkLiAgSWYgeW91IHNlZSBhbnkgcGxhY2UgbWlzc2luZyBmcm9tIHRoZSBsaXN0LAorICAgICAgICAgICAgc3VibWl0IGEgcGF0Y2ggdG8gdGhpcyBmaWxlIHBsZWFzZS4gQWxzbyBub3RlIHRoYXQKKyAgICAgICAgICAgIHJlLW9yZ2FuaXphdGlvbiBvZiB0aGUgc291cmNlIGNvZGUgbWlnaHQgY2hhbmdlIHRoZSBsaXN0IG9mCisgICAgICAgICAgICBwbGFjZXMuPC9lbXBoYXNpcz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9ub3RlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gYWRkIGEgbmV3IGxhbmd1YWdlIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gdHJhbnNsYXRlIHRoZQorICAgICAgICByZWxhdGl2ZWx5IGZldyB0ZXh0cywgb2YgY291cnNlLiAgWW91IHdpbGwgbmVlZCB2ZXJ5IGxpdHRsZQorICAgICAgICBrbm93bGVkZ2Ugb2YgcHJvZ3JhbW1pbmcsIHNvIHlvdSBoYXZlIGFsbW9zdCBubyBleGN1c2VzIGZvcgorICAgICAgICBub3QgYWRkaW5nIHlvdXIgbGFuZ3VhZ2UsIHJpZ2h0PyAgV2Ugc2hvdWxkIGVhc2lseSBiZSBhYmxlIHRvCisgICAgICAgIHN1cHBvcnQgMjAgbGFuZ3VhZ2VzIHdpdGhpbiBhIGZldyBtb250aHMsIGdldCBnb2luZyEgIEFwYXJ0CisgICAgICAgIGZyb20gcmUtY29tcGlsYXRpb24gaXQnbGwgdGFrZSB5b3UgYWJvdXQgYW4gaG91ciBvciB0d28uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gYWRkIGEgbmV3IGxhbmd1YWdlIHRvIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0aGF0IFdpbmUgY2FuCisgICAgICAgIGhhbmRsZSB5b3UgbXVzdC4uLgorICAgICAgPC9wYXJhPgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5GaW5kIHRoZSBsYW5ndWFnZSBJRCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGUvd2lubmxzLmg8L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExvb2sgaW4gPGZpbGVuYW1lPm9sZS9vbGUybmxzLmM8L2ZpbGVuYW1lPiBpZiB5b3VyCisgICAgICAgICAgICBsYW5ndWFnZSBpcyBhbHJlYWR5IGluY29ycG9yYXRlZCBpbiB0aGUgPHZhcm5hbWU+c3RhdGljCisgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBOTFNfbGFuZ2xvY2FsZTwvdmFybmFtZT4uIElmIG5vdDogZmluZCB0aGUKKyAgICAgICAgICAgIGFwcHJvcHJpYXRlIGVudHJpZXMgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlL3dpbm5scy5oPC9maWxlbmFtZT4gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVkaXQgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPm9sZS9ubHMvKi5ubHM8L2ZpbGVuYW1lPiB0byBmaXQgeW91ciBsb2NhbAorICAgICAgICAgICAgaGFiaXRzIGFuZCBsYW5ndWFnZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVkaXQgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vd2luZS5tYW4uaW48L2ZpbGVuYW1lPgorICAgICAgICAgICAgKHNlYXJjaCBmb3IgPHBhcmFtZXRlcj4tbGFuZ3VhZ2U8L3BhcmFtZXRlcj4pIHRvIHNob3cgdGhlCisgICAgICAgICAgICBuZXcgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWRpdCA8ZmlsZW5hbWU+bWlzYy9tYWluLmM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgPHZhcm5hbWU+TGFuZ3VhZ2VzPC92YXJuYW1lPiB0byBjb250YWluIHRoZSBuZXcgbGFuZ3VhZ2UKKyAgICAgICAgICAgIGFiYnJldmlhdGlvbiBhbmQgbGFuZ3VhZ2UgSUQuICBBbHNvIGVkaXQKKyAgICAgICAgICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCBvcHRpb25fdGFibGU8L3N0cnVjdG5hbWU+IGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWlzYy9vcHRpb25zLmM8L2ZpbGVuYW1lPiB0byBzaG93IHRoZSBuZXcKKyAgICAgICAgICAgIGFiYnJldmlhdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVkaXQgPGZpbGVuYW1lPmluY2x1ZGUvb3B0aW9ucy5oPC9maWxlbmFtZT4KKyAgICAgICAgICAgIDx0eXBlPmVudW08L3R5cGU+IDx2YXJuYW1lPldJTkVfTEFOR1VBR0U8L3Zhcm5hbWU+IHRvIGhhdmUKKyAgICAgICAgICAgIGEgbWVtYmVyIGNhbGxlZCA8bGl0ZXJhbD5MQU5HX1hYPC9saXRlcmFsPiB3aGVyZQorICAgICAgICAgICAgPGxpdGVyYWw+WFg8L2xpdGVyYWw+IGlzIHRoZSBuZXcgYWJicmV2aWF0aW9uLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IGZpbGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kbGxzL2NvbW1kbGcvY2RsZ19YWC5yYzwvZmlsZW5hbWU+ICh3aGVyZQorICAgICAgICAgICAgPGxpdGVyYWw+WFg8L2xpdGVyYWw+IGlzIHlvdXIgbGFuZ3VhZ2UgIGFiYnJldmlhdGlvbikKKyAgICAgICAgICAgIGNvbnRhaW5pbmcgYWxsIG1lbnVzLiBZb3VyIGJlc3QgYmV0IGlzIHRvIGNvcHkKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jZGxnX0VuLnJjPC9maWxlbmFtZT4gYW5kIHN0YXJ0IHRyYW5zbGF0aW5nLgorICAgICAgICAgICAgVGhlcmUgaXMgbm8gcmVhbCBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIG9mIHRoZSBmaWxlLCBhcyB5b3Ugb25seSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgdGV4dCB3aXRoaW4KKyAgICAgICAgICAgIHF1b3Rlcy4gCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gbWVudXMsIHRoZSBjaGFyYWN0ZXIgIiZhbXA7IiBtZWFucyB0aGF0IHRoZSBuZXh0CisgICAgICAgICAgICBjaGFyYWN0ZXIgd2lsbCBiZSBoaWdobGlnaHRlZCBhbmQgdGhhdCBwcmVzc2luZyB0aGF0CisgICAgICAgICAgICBsZXR0ZXIgd2lsbCBzZWxlY3QgdGhlIGl0ZW0uIFlvdSBzaG91bGQgcGxhY2UgdGhlc2UKKyAgICAgICAgICAgICImYW1wOyIgY2hhcmFjdGVycyBzdWl0YWJseSBmb3IgeW91ciBsYW5ndWFnZSwgbm90IGp1c3QKKyAgICAgICAgICAgIGNvcHkgdGhlIHBvc2l0aW9ucyBmcm9tIChzYXkpIEVuZ2xpc2guICBJbiBwYXJ0aWN1bGFyLAorICAgICAgICAgICAgaXRlbXMgd2l0aGluIG9uZSBtZW51IHNob3VsZCBoYXZlIGRpZmZlcmVudCBoaWdobGlnaHRlZAorICAgICAgICAgICAgbGV0dGVycy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVkaXQgPGZpbGVuYW1lPmRsbHMvY29tbWRsZy9yc3JjLnJjPC9maWxlbmFtZT4gdG8gY29udGFpbgorICAgICAgICAgICAgYW4gPHN5bWJvbD4jaW5jbHVkZTwvc3ltYm9sPiBzdGF0ZW1lbnQgZm9yIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jZGxnX1hYLnJjPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlcGVhdCBzdGVwcyA2IGFuZCA3IGFnYWluIGZvcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kbGxzL3NoZWxsMzIvc2hlbGwzMl9YWC5yYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNocmVzLnJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXNvdXJjZXMvc3lzcmVzX1hYLnJjPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlcjMyLnJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlLWNvbmZpZ3VyZSwgcmUtbWFrZSBkZXBlbmRlbmNpZXMsIGFuZCByZS1tYWtlIFdpbmUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGVjayB5b3VyIG5ldyBtZW51cyBhbmQgZm9ybXM7IHdoZW4gdGhleSdyZSBub3Qgb2ssIGdvCisgICAgICAgICAgICBiYWNrIHRvIDYpIGFuZCBhZGFwdCB0aGUgc2l6ZXMsIGV0Yy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNldmVyYWwgb2YgdGhlIHdpbmVsaWIgYmFzZWQgcHJvZ3JhbXMgaW4gdGhlIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgcHJvZ3JhbXMgYWxzbyBoYXZlIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQuIFNlZSB0aGUKKyAgICAgICAgICAgIGFwcHJvcHJpYXRlIGZpbGVzIHRoZXJlIGZvciByZWZlcmVuY2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+RWRpdAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vaW50ZXJuYXRpb25hbGlzYXRpb248L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgc2hvdyB0aGUgbmV3IHN0YXR1cy48L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN1Ym1pdCBwYXRjaGVzIGZvciBpbmNsdXNpb24gaW4gdGhlIG5leHQgV2luZSByZWxlYXNlLCBzZWUKKyAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPi4vQU5OT1VOQ0U8L2ZpbGVuYW1lPiBmb3IgZGV0YWlscyBhYm91dAorICAgICAgICAgICAgd2hlcmUgdG8gc3VibWl0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJwYXJ0IiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vaW1wbGVtZW50YXRpb24uc2dtbCBiL2RvY3VtZW50YXRpb24vaW1wbGVtZW50YXRpb24uc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk0MzNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9pbXBsZW1lbnRhdGlvbi5zZ21sCkBAIC0wLDAgKzEsNTM1IEBACisgIDxjaGFwdGVyIGlkPSJpbXBsZW1lbnRhdGlvbiI+CisgICAgPHRpdGxlPkxvdy1sZXZlbCBJbXBsZW1lbnRhdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+RGV0YWlscyBvZiBXaW5lJ3MgTG93LWxldmVsIEltcGxlbWVudGF0aW9uLi4uPC9wYXJhPgorCisgICAgPHNlY3QxIGlkPSJidWlsdGluLWRsbHMiPgorICAgICAgPHRpdGxlPkJ1aWx0aW4gRExMczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ICZsdDtqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBzb21lIHBvaW50cyB5b3Ugc2hvdWxkIGtub3cgYmVmb3JlCisgICAgICAgIGltcGxlbWVudGluZyB0aGUgaW50ZXJuYWwgY291bnRlcnBhcnRzIHRvIGV4dGVybmFsIERMTCdzLgorICAgICAgICBPbmx5IDMyIGJpdCBETEwncyBhcmUgY29uc2lkZXJlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+MS4gVGhlIExpYk1haW4gZnVuY3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgdGhlIHdheSB0byBkbyBzb21lIGluaXRpYWxpemluZyB3aGVuIGEgcHJvY2VzcyBvcgorICAgICAgICAgIHRocmVhZCBpcyBhdHRhY2hlZCB0byB0aGUgZGxsLiBUaGUgZnVuY3Rpb24gbmFtZSBpcyB0YWtlbgorICAgICAgICAgIGZyb20gYSA8ZmlsZW5hbWU+Ki5zcGVjPC9maWxlbmFtZT4gZmlsZSBsaW5lOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2luaXQgICAgWW91ckZ1bmN0aW9uTmFtZQorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVuLCB5b3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9uOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0JPT0wzMiBXSU5BUEkgWW91ckxpYk1haW4oSElOU1RBTkNFMzIgaGluc3RETEwsCisJCQkgRFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCit7IGlmIChmZHdSZWFzb249PURMTF9QUk9DRVNTX0FUVEFDSCkKKyAgeyAuLi4KKyAgfSAKKyAgLi4uLgorfQorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Mi4gVXNpbmcgZnVuY3Rpb25zIGZyb20gb3RoZXIgYnVpbHQtaW4gRExMJ3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBwcm9ibGVtIGhlcmUgaXMsIHRoYXQgeW91IGNhbid0IGtub3cgaWYgeW91IGhhdmUgdG8gY2FsbAorICAgICAgICAgIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbnRlcm5hbCBvciB0aGUgZXh0ZXJuYWwgRExMLiBJZiB5b3UKKyAgICAgICAgICBqdXN0IGNhbGwgdGhlIGZ1bmN0aW9uIHlvdSB3aWxsIGdldCB0aGUgaW50ZXJuYWwKKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIGV4dGVybmFsIERMTCBpcyBsb2FkZWQgdGhlIGV4ZWN1dGVkCisgICAgICAgICAgcHJvZ3JhbSB3aWxsIHVzZSB0aGUgZXh0ZXJuYWwgRExMIGFuZCB5b3UgdGhlIGludGVybmFsIG9uZS4KKyAgICAgICAgICBXaGVuIHlvdSAtYXMgYW4gZXhhbXBsZS0gZmlsbCBhbiBpY29ubGlzdCBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgaW50ZXJuYWwgRExMIHRoZSBhcHBsaWNhdGlvbiB3b24ndCBnZXQgdGhlIGljb25zIGZyb20gdGhlCisgICAgICAgICAgZXh0ZXJuYWwgRExMLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBhIHBvaW50ZXIgdG8gY2FsbAorICAgICAgICAgIHN1Y2ggZnVuY3Rpb25zOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKy8qIGRlZmluaXRpb24gb2YgdGhlIHBvaW50ZXIgdHlwZSovCit2b2lkIChDQUxMQkFDSyogcERMTEluaXRDb21jdGwpKCk7CisKKy8qIGdldHRpbmcgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgIHRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCisgTGliTWFpbiBmdW5jdGlvbiB3aGVuIGNhbGxlZCB3aXRoIERMTF9QUk9DRVNTX0FUVEFDSCovCisgCitCT09MMzIgV0lOQVBJIFNoZWxsMzJMaWJNYWluKEhJTlNUQU5DRTMyIGhpbnN0RExMLCBEV09SRCBmZHdSZWFzb24sCisJCQkJCQkJIExQVk9JRCBscHZSZXNlcnZlZCkKK3sgSElOU1RBTkNFMzIgaENvbWN0bDMyOworICBpZiAoZmR3UmVhc29uPT1ETExfUFJPQ0VTU19BVFRBQ0gpCisgIHsgLyogbG9hZCB0aGUgZXh0ZXJuYWwgLyBpbnRlcm5hbCBETEwqLworICAgIGhDb21jdGwzMiA9IExvYWRMaWJyYXJ5MzJBKCJDT01DVEwzMi5ETEwiKTsgCisgICAgaWYgKGhDb21jdGwzMikKKyAgICB7IC8qIGdldCB0aGUgZnVuY3Rpb24gcG9pbnRlciAqLworICAgICAgcERMTEluaXRDb21jdGw9R2V0UHJvY0FkZHJlc3MzMihoQ29tY3RsMzIsIkluaXRDb21tb25Db250cm9sc0V4Iik7CisKKwkgIC8qIGNoZWNrIGl0ICovCisgICAgICBpZiAocERMTEluaXRDb21jdGwpCisgICAgICB7IC8qIHVzZSBpdCAqLworICAgICAgICBwRExMSW5pdENvbWN0bCgpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBmcmVlIHRoZSBETEwgLyBkZWNyZWFzZSB0aGUgcmVmIGNvdW50ICovCisgICAgICBGcmVlTGlicmFyeTMyKGhDb21jdGwzMik7CisgICAgfQorICAgIGVsc2UKKyAgICB7IC8qIGRvIHNvbWUgcGFuaWMqLworICAgICAgRVJSKHNoZWxsLCJQIEEgTiBJIEMgZXJyb3IgZ2V0dGluZyBmdW5jdGlvbnBvaW50ZXJzXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgfQorIC4uLi4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPjMuIEdldHRpbmcgcmVzb3VyY2VzIGZyb20gYSA8ZmlsZW5hbWU+Ki5yYzwvZmlsZW5hbWU+IGZpbGUgbGlua2VkIHRvIHRoZSBETEw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICZsdDsgSWYgeW91IGtub3cgaG93LCB3cml0ZSBzb21lIGxpbmVzJmd0OworICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9ImFjY2VsLWltcGwiPgorICAgICAgPHRpdGxlPkFjY2VsZXJhdG9yczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGaW5kaW5ncyByZXNlYXJjaGVkIGJ5IFV3ZSBCb25uZXMsIFVscmljaCBXZWlnYW5kIGFuZCBNYXJjdXMgTWVpc3NuZXIuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vYWNjZWxlcmF0b3JzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIG5vdGVzIGNvbmNlcm5pbmcgYWNjZWxlcmF0b3JzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSA8ZW1waGFzaXM+dGhyZWU8L2VtcGhhc2lzPiBkaWZmZXJlbnRseSBzaXplZAorICAgICAgICBhY2NlbGVyYXRvciBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdGhlIHVzZXIuIFRoZSBnZW5lcmFsIGxheW91dAorICAgICAgICBpczoKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0JZVEUgICBmVmlydDsKK1dPUkQgICBrZXk7CitXT1JEICAgY21kOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBXZSBub3cgaGF2ZSB0aHJlZSBkaWZmZXJlbnQgYXBwZWFyYW5jZXM6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWNjZWxlcmF0b3JzIGluIE5FIHJlc291cmNlcy4gVGhlc2UgaGF2ZSBhIHNpemUgb2YgNSBieXRlCisgICAgICAgICAgICBhbmQgZG8gbm90IGhhdmUgYW55IHBhZGRpbmcuIFRoaXMgaXMgYWxzbyB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgIGxheW91dCBvZiB0aGUgZ2xvYmFsIGhhbmRsZSA8dHlwZT5IQUNDRUw8L3R5cGU+ICgxNiBhbmQKKyAgICAgICAgICAgIDMyKSBpbiBXaW5kb3dzIDk1IGFuZCBXSU5FLiBFeHBvc2VkIHRvIHRoZSB1c2VyIGFzIFdpbjE2CisgICAgICAgICAgICBnbG9iYWwgaGFuZGxlcyA8dHlwZT5IQUNDRUwxNjwvdHlwZT4gYW5kCisgICAgICAgICAgICA8dHlwZT5IQUNDRUwzMjwvdHlwZT4gYnkgdGhlIFdpbjE2L1dpbjMyIEFQSS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFjY2VsZXJhdG9ycyBpbiBQRSByZXNvdXJjZXMuIFRoZXNlIGhhdmUgYSBzaXplIG9mIDggYnl0ZS4KKyAgICAgICAgICAgIExheW91dCBpczoKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQllURSAgIGZWaXJ0OworQllURSAgIHBhZDA7CitXT1JEICAga2V5OworV09SRCAgIGNtZDsKK1dPUkQgICBwYWQxOworICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGV5IGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIG9ubHkgYnkgZGlyZWN0IGFjY2Vzc2luZyBQRQorICAgICAgICAgICAgcmVzb3VyY2VzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWNjZWxlcmF0b3JzIGluIHRoZSBXaW4zMiBBUEkuIFRoZXNlIGhhdmUgYSBzaXplIG9mIDYKKyAgICAgICAgICAgIGJ5dGVzLiBMYXlvdXQgaXM6CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0JZVEUgICBmVmlydDsKK0JZVEUgICBwYWQwOworV09SRCAgIGtleTsKK1dPUkQgICBjbWQ7CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXNlIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGJ5IHRoZQorICAgICAgICAgICAgPGZ1bmN0aW9uPkNvcHlBY2NlbGVyYXRvclRhYmxlPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgICA8ZnVuY3Rpb24+Q3JlYXRlQWNjZWxlcmF0b3JUYWJsZTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBpbgorICAgICAgICAgICAgdGhlIFdpbjMyIEFQSS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2h5IHR3byB0eXBlcyBvZiBhY2NlbGVyYXRvcnMgaW4gdGhlIFdpbjMyIEFQST8gV2UgY2FuIG9ubHkKKyAgICAgICAgZ3Vlc3MsIGJ1dCBteSBiZXN0IGJldCBpcyB0aGF0IHRoZSBXaW4zMiByZXNvdXJjZSBjb21waWxlcgorICAgICAgICBjYW4vZG9lcyBub3QgaGFuZGxlIHN0cnVjdCBwYWNraW5nLiBXaW4zMiA8dHlwZT5BQ0NFTDwvdHlwZT4KKyAgICAgICAgaXMgZGVmaW5lZCB1c2luZyA8ZnVuY3Rpb24+I3ByYWdtYSgyKTwvZnVuY3Rpb24+IGZvciB0aGUKKyAgICAgICAgY29tcGlsZXIgYnV0IHdpdGhvdXQgYW55IHBhY2tpbmcgZm9yIFJDLCBzbyBpdCB3aWxsIGFzc3VtZQorICAgICAgICA8ZnVuY3Rpb24+I3ByYWdtYSg0KTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iZmlsZS1oYW5kbGVzIj4KKyAgICAgIDx0aXRsZT5GaWxlIEhhbmRsZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSAoPz8/KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2ZpbGVoYW5kbGVzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBET1MgdHJlYXRzIHRoZSBmaXJzdCA1IGZpbGUgaGFuZGxlcyBhcyBzcGVjaWFsIGNhc2VzLiAgVGhleQorICAgICAgICBtYXAgZGlyZWN0bHkgdG8gPGZpbGVuYW1lPnN0ZGluPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5zdGRvdXQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+c3RkYXV4PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zdGRwcm48L2ZpbGVuYW1lPi4KKyAgICAgICAgV2luZG93cyAxNiBpbmhlcml0cyB0aGlzIGJlaGF2aW9yLCBhbmQgaW4gZmFjdCwgd2luMTYgaGFuZGxlcworICAgICAgICBhcmUgaW50ZXJjaGFuZ2FibGUgd2l0aCBET1MgaGFuZGxlcy4gU29tZSBuYXN0eSB3aW5kb3dzCisgICAgICAgIHByb2dyYW1zIGV2ZW4gZG8gdGhpcyEKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBXaW5kb3dzMzIgaXNzdWVzIGZpbGUgaGFuZGxlcyBzdGFydGluZyBmcm9tCisgICAgICAgIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCBvbiB0aGUgZ3JvdW5kcyB0aGF0IG1vc3QgR1VJIHByb2Nlc3NlcworICAgICAgICBkb24ndCBuZWVkIGEgPGZpbGVuYW1lPnN0ZGluPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5zdGRvdXQ8L2ZpbGVuYW1lPiwgZXRjLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBXaW5lIGhhbmRsZSBjb2RlIGlzIGltcGxlbWVudGVkIGluIHRoZSBXaW4zMiBzdHlsZSwgYW5kCisgICAgICAgIHRoZSBXaW4xNiBmdW5jdGlvbnMgdXNlIHR3byBtYWNyb3MgdG8gY29udmVydCB0byBhbmQgZnJvbSB0aGUKKyAgICAgICAgdHdvIHR5cGVzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1hY3JvcyBhcmUgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+ZmlsZS5oPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgSEZJTEUxNl9UT19IRklMRTMyKGhhbmRsZSkgXAorKCgoaGFuZGxlKT09MCkgPyBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkgOiBcCisgKChoYW5kbGUpPT0xKSA/IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSkgOiBcCisgKChoYW5kbGUpPT0yKSA/IEdldFN0ZEhhbmRsZShTVERfRVJST1JfSEFORExFKSA6IFwKKyAoKGhhbmRsZSk+MHg0MDApID8gaGFuZGxlIDogXAorIChoYW5kbGUpLTUpCisKKyNkZWZpbmUgSEZJTEUzMl9UT19IRklMRTE2KGhhbmRsZSkgKHsgSEZJTEUzMiBobmQ9aGFuZGxlOyBcCisgICAgICAoKGhuZD09SEZJTEVfRVJST1IzMikgPyBIRklMRV9FUlJPUjE2IDogXAorICAgICAgKChoYW5kbGU+MHg0MDApID8gaGFuZGxlIDogXAorICAgICAgIChIRklMRTE2KWhuZCs1KTsgfSkKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDx3YXJuaW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCZSBjYXJlZnVsIG5vdCB0byB1c2UgdGhlIG1hY3JvCisgICAgICAgICAgPGZ1bmN0aW9uPkhGSUxFMTZfVE9fSEZJTEUzMjwvZnVuY3Rpb24+IG9uIGZ1bmN0aW9ucyB3aXRoCisgICAgICAgICAgc2lkZS1lZmZlY3RzLCBhcyBpdCB3aWxsIGNhdXNlIHRoZW0gdG8gYmUgZXZhbHVhdGVkIHNldmVyYWwKKyAgICAgICAgICB0aW1lcy4gIFRoaXMgY291bGQgYmUgY29uc2lkZXJlZCBhIGJ1ZywgYnV0IHRoZSB1c2Ugb2YgdGhpcworICAgICAgICAgIG1hY3JvIGlzIGxpbWl0ZWQgZW5vdWdoIG5vdCB0byBuZWVkIGEgcmV3cml0ZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC93YXJuaW5nPgorICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSA8bGl0ZXJhbD4weDQwMDwvbGl0ZXJhbD4gc3BlY2lhbCBjYXNlIGFib3ZlIGRlYWxzIHdpdGgKKyAgICAgICAgICBMWlcgZmlsZWhhbmRsZXMgKHNlZSA8ZmlsZW5hbWU+bWlzYy9semV4cGFuZC5jPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L25vdGU+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0iaGFyZHdhcmUtdHJhY2UiPgorICAgICAgPHRpdGxlPkRvaW5nIEEgSGFyZHdhcmUgVHJhY2UgSW4gV2luZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IEpvbmF0aGFuIEJ1enphcmQgJmx0O2phYkBoZXgucHJlc3RlbC5jby51az4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHM8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwcmltYXJ5IHJlYXNvbiB0byBkbyB0aGlzIGlzIHRvIHJldmVyc2UgZW5naW5lZXIgYQorICAgICAgICBoYXJkd2FyZSBkZXZpY2UgZm9yIHdoaWNoIHlvdSBkb24ndCBoYXZlIGRvY3VtZW50YXRpb24sIGJ1dAorICAgICAgICBjYW4gZ2V0IHRvIHdvcmsgdW5kZXIgV2luZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGxvdCBpcyBhaW1lZCBhdCBwYXJhbGxlbCBwb3J0IGRldmljZXMsIGFuZCBpbiBwYXJ0aWN1bGFyCisgICAgICAgIHBhcmFsbGVsIHBvcnQgc2Nhbm5lcnMgd2hpY2ggYXJlIG5vdyBzbyBjaGVhcCB0aGV5IGFyZQorICAgICAgICB2aXJ0dWFsbHkgYmVpbmcgZ2l2ZW4gYXdheS4gVGhlIHByb2JsZW0gaXMgdGhhdCBmZXcKKyAgICAgICAgbWFudWZhY3R1cmVzIHdpbGwgcmVsZWFzZSBhbnkgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gd2hpY2gKKyAgICAgICAgcHJldmVudHMgZHJpdmVycyBiZWluZyB3cml0dGVuIGZvciBTYW5lLCBhbmQgdGhlIHRyYWRpdGlvbmFsCisgICAgICAgIHRlY2huaXF1ZSBvZiB1c2luZyBET1NlbXUgdG8gcHJvZHVjZSB0aGUgdHJhY2VzIGRvZXMgbm90IHdvcmsKKyAgICAgICAgYXMgdGhlIHNjYW5uZXJzIGludmFyaWFibHkgb25seSBoYXZlIGRyaXZlcnMgZm9yIFdpbmRvd3MuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGxlYXNlIG5vdGUgdGhhdCBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byBnZXQgbXkgc2Nhbm5lcgorICAgICAgICB3b3JraW5nIHByb3Blcmx5IChhIFVNQVggQXN0cmEgNjAwUCksIGJ1dCBhIGNvdXBsZSBvZiBwZW9wbGUKKyAgICAgICAgaGF2ZSByZXBvcnRlZCBzdWNjZXNzIHdpdGggYXQgbGVhc3QgdGhlIEFydGVjIEFTNmUgc2Nhbm5lci4gSQorICAgICAgICBhbSBub3QgaW4gdGhlIHByb2Nlc3Mgb2YgZGV2ZWxvcGluZyBhbnkgZHJpdmVyIG5vciBkbyBJIGludGVuZAorICAgICAgICB0bywgc28gZG9uJ3QgYnVnIG1lIGFib3V0IGl0LiBNeSB0aW1lIGlzIG5vdyBzcGVudCB3cml0aW5nCisgICAgICAgIHByb2dyYW1zIHRvIHNldCB0aGluZ3MgbGlrZSBiYXR0ZXJ5IHNhdmUgb3B0aW9ucyB1bmRlciBMaW51eAorICAgICAgICBvbiBUb3NoaWJhIGxhcHRvcHMsIGFuZCBhcyBzdWNoIEkgZG9uJ3QgaGF2ZSBhbnkgc3BhcmUgdGltZQorICAgICAgICBmb3Igd3JpdGluZyBhIGRyaXZlciBmb3IgYSBwYXJhbGxlbCBwb3J0IHNjYW5uZXIgZXRjLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFByZXN1bWluZyB0aGF0IHlvdSBoYXZlIGNvbXBpbGVkIGFuZCBpbnN0YWxsZWQgd2luZSB0aGUgZmlyc3QKKyAgICAgICAgdGhpbmcgdG8gZG8gaXMgaXMgdG8gZW5hYmxlIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MgdG8geW91cgorICAgICAgICBwYXJhbGxlbCBwb3J0LiBUbyBkbyB0aGlzIGVkaXQgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICh1c3VhbGx5IGluIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+KSBhbmQgaW4gdGhlCisgICAgICAgIHBvcnRzIHNlY3Rpb24gYWRkIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzCisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CityZWFkPTB4Mzc4LDB4Mzc5LDB4MzdhLDB4MzdjLDB4NzdhCit3cml0ZT0weDM3OCx4Mzc5LDB4MzdhLDB4MzdjLDB4NzdhCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgYWRkcyB0aGUgbmVjZXNzYXJ5IGFjY2VzcyByZXF1aXJlZCBmb3IgU1BQL1BTMi9FUFAvRUNQCisgICAgICAgIHBhcmFsbGVsIHBvcnQgb24gTFBUMS4gWW91IHdpbGwgbmVlZCB0byBhZGp1c3QgdGhlc2UgbnVtYmVyCisgICAgICAgIGFjY29yZGluZ2x5IGlmIHlvdXIgcGFyYWxsZWwgcG9ydCBpcyBvbiBMUFQyIG9yIExQVDAuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBzdGFydGluZyB3aW5lIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSwgd2hlcmUKKyAgICAgICAgPGxpdGVyYWw+WFhYWDwvbGl0ZXJhbD4gaXMgdGhlIHByb2dyYW0geW91IG5lZWQgdG8gcnVuIGluCisgICAgICAgIG9yZGVyIHRvIGFjY2VzcyB5b3VyIHNjYW5uZXIsIGFuZCA8bGl0ZXJhbD5ZWVlZPC9saXRlcmFsPiBpcworICAgICAgICB0aGUgZmlsZSB5b3VyIHRyYWNlIHdpbGwgYmUgc3RvcmVkIGluOgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgord2luZSAtZGVidWdtc2cgK2lvIFhYWFggMiZndDsgJmd0OyhzZWQgJ3MvXlteOl0qOmlvOlteIF0qIC8vJyAmZ3Q7IFlZWVkpCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+CisgICAgICAgIFlvdSB3aWxsIG5lZWQgbGFyZ2UgYW1vdW50cyBvZiBoYXJkIGRpc2sgc3BhY2UgKHJlYWQgaHVuZHJlZHMKKyAgICAgICAgb2YgbWVnYWJ5dGVzIGlmIHlvdSBkbyBhIGZ1bGwgcGFnZSBzY2FuKSwgYW5kIGZvciByZWFzb25hYmxlCisgICAgICAgIHBlcmZvcm1hbmNlIGEgcmVhbGx5IGZhc3QgcHJvY2Vzc29yIGFuZCBsb3RzIG9mIFJBTS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgbWlnaHQgd2VsbCBmaW5kIHRoZSBsb2cgY29tcHJlc3Npb24gcHJvZ3JhbSB0aGF0IDxlbWFpbD5EYXZpZAorICAgICAgICBDYW1wYmVsbCBjYW1wYmVsbEB0b3JxdWUubmV0PC9lbWFpbD4gd3JvdGUgaGVscGZ1bCBpbgorICAgICAgICByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgbG9nIGZpbGVzLiBUaGlzIGNhbiBiZSBvYnRhaW5lZCBieQorICAgICAgICB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzaCBpb3BvcnQtdHJhY2UtaGludHMKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzaG91bGQgZXh0cmFjdCA8ZmlsZW5hbWU+c2hyaW5rLmM8L2ZpbGVuYW1lPiAod2hpY2ggaXMKKyAgICAgICAgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gQ29tcGlsZSB0aGUgbG9nIGNvbXByZXNzaW9uCisgICAgICAgIHByb2dyYW0gYnk6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitjYyBzaHJpbmsuYyAtbyBzaHJpbmsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgVXNlIHRoZSA8Y29tbWFuZD5zaHJpbms8L2NvbW1hbmQ+IHByb2dyYW0gdG8gcmVkdWNlIHRoZQorICAgICAgICBwaHlzaWNhbCBzaXplIG9mIHRoZSByYXcgbG9nIGFzIGZvbGxvd3M6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitjYXQgbG9nIHwgc2hyaW5rICZndDsgbG9nMgorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdHJhY2UgaGFzIHRoZSBiYXNpYyBmb3JtIG9mCisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitYWFhYICZndDsgWVkgQCBaWlpaOlpaWloKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgd2hlcmUgPGxpdGVyYWw+WFhYWDwvbGl0ZXJhbD4gaXMgdGhlIHBvcnQgaW4gaGV4aWRlY2ltYWwgYmVpbmcKKyAgICAgICAgYWNjZXNzZWQsIDxsaXRlcmFsPllZPC9saXRlcmFsPiBpcyB0aGUgZGF0YSB3cml0dGVuIChvciByZWFkKQorICAgICAgICBmcm9tIHRoZSBwb3J0LCBhbmQgPGxpdGVyYWw+WlpaWjpaWlpaPC9saXRlcmFsPiBpcyB0aGUgYWRkcmVzcworICAgICAgICBpbiBtZW1vcnkgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgYWNjZXNzZWQgdGhlIHBvcnQuIFRoZQorICAgICAgICBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXRhIHdhcyB3cml0dGVuCisgICAgICAgIG9yIHJlYWQgZnJvbSB0aGUgcG9ydC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyZndDsgZGF0YSB3YXMgd3JpdHRlbiB0byB0aGUgcG9ydAorJmx0OyBkYXRhIHdhcyByZWFkIGZyb20gdGhlIHBvcnQKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgTXkgYmFzaWMgdGlwIGZvciBpbnRlcnBlcmF0aW5nIHRoZXNlIGxvZ3MgaXMgdG8gcGF5IGNsb3NlCisgICAgICAgIGF0dGVudGlvbiB0byB0aGUgYWRkcmVzc2VzIG9mIHRoZSBJTyBpbnN0cnVjdGlvbnMuIFRoZWlyCisgICAgICAgIGdyb3VwaW5nIGFuZCBzb21ldGltZXMgcHJveGltaXR5IHNob3VsZCByZXZlYWwgdGhlIHByZXNlbmNlIG9mCisgICAgICAgIHN1YnJvdXRpbmVzIGluIHRoZSBkcml2ZXIuIEJ5IHN0dWR5aW5nIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMKKyAgICAgICAgeW91IHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgdGhlbSBvdXQuIEZvciBleGFtcGxlIGNvbnNpZGVyIHRoZQorICAgICAgICBmb2xsb3dpbmcgc2VjdGlvbiBvZiB0cmFjZSBmcm9tIG15IFVNQVggQXN0cmEgNjAwUAorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorMHgzNzggJmd0OyA1NSBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorMHgzNzggJmd0OyBhYSBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorMHgzNzggJmd0OyAwMCBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorMHgzNzggJmd0OyAwMCBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorMHgzNzggJmd0OyAwMCBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorMHgzNzggJmd0OyAwMCBAIDAyOTc6MDFlYworMHgzN2EgJmd0OyAwNSBAIDAyOTc6MDFmNQorMHgzNzkgJmx0OyA4ZiBAIDAyOTc6MDFmYQorMHgzN2EgJmd0OyAwNCBAIDAyOTc6MDIxMQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBBcyB5b3UgY2FuIHNlZSB0aGVpciBpcyBhIHJlcGVhdGluZyBzdHJ1Y3R1cmUgc3RhcnRpbmcgYXQKKyAgICAgICAgYWRkcmVzcyA8bGl0ZXJhbD4wMjk3OjAxZWM8L2xpdGVyYWw+IHRoYXQgY29uc2lzdHMgb2YgZm91ciBpbworICAgICAgICBhY2Nlc3NlcyBvbiB0aGUgcGFyYWxsZWwgcG9ydC4gTG9va2luZyBhdCBpdCB0aGUgZmlyc3QgaW8KKyAgICAgICAgYWNjZXNzIHdyaXRlcyBhIGNoYW5naW5nIGJ5dGUgdG8gdGhlIGRhdGEgcG9ydCB0aGUgc2Vjb25kCisgICAgICAgIGFsd2F5cyB3cml0ZXMgdGhlIGJ5dGUgPGxpdGVyYWw+MHgwNTwvbGl0ZXJhbD4gdG8gdGhlIGNvbnRyb2wKKyAgICAgICAgcG9ydCwgdGhlbiBhIHZhbHVlIHdoaWNoIGFsd2F5cyBzZWVtcyB0bworICAgICAgICA8bGl0ZXJhbD4weDhmPC9saXRlcmFsPiBpcyByZWFkIGZyb20gdGhlIHN0YXR1cyBwb3J0IGF0IHdoaWNoCisgICAgICAgIHBvaW50IGEgYnl0ZSA8bGl0ZXJhbD4weDA0PC9saXRlcmFsPiBpcyB3cml0dGVuIHRvIHRoZSBjb250cm9sCisgICAgICAgIHBvcnQuIEJ5IHN0dWR5aW5nIHRoaXMgYW5kIG90aGVyIHNlY3Rpb25zIG9mIHRoZSB0cmFjZSB3ZSBjYW4KKyAgICAgICAgd3JpdGUgYSBDIHJvdXRpbmUgdGhhdCBlbXVsYXRlcyB0aGlzLCBzaG93biBiZWxvdyB3aXRoIHNvbWUKKyAgICAgICAgbWFjcm9zIHRvIG1ha2UgcmVhZGluZy93cml0aW5nIG9uIHRoZSBwYXJhbGxlbCBwb3J0IGVhc2llciB0bworICAgICAgICByZWFkLgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorI2RlZmluZSByX2R0cih4KSAgICAgICAgaW5iKHgpCisjZGVmaW5lIHJfc3RyKHgpICAgICAgICBpbmIoeCsxKQorI2RlZmluZSByX2N0cih4KSAgICAgICAgaW5iKHgrMikKKyNkZWZpbmUgd19kdHIoeCx5KSAgICAgIG91dGIoeSwgeCkKKyNkZWZpbmUgd19zdHIoeCx5KSAgICAgIG91dGIoeSwgeCsxKQorI2RlZmluZSB3X2N0cih4LHkpICAgICAgb3V0Yih5LCB4KzIpCisKKy8qCisgKiBTZWVtcyB0byBiZSBzZW5kaW5nIGEgY29tbWFuZCBieXRlIHRvIHRoZSBzY2FubmVyCisgKgorICovCitpbnQgdWRwcF9wdXQoaW50IHVkcHBfYmFzZSwgdW5zaWduZWQgY2hhciBjb21tYW5kKQoreworICAgICAgICBpbnQgbG9vcCx2YWx1ZTsKKworICAgICAgICB3X2R0cih1ZHBwX2Jhc2UsIGNvbW1hbmQpOworICAgICAgICB3X2N0cih1ZHBwX2Jhc2UsIDB4MDUpOworCisgICAgICAgIGZvciAobG9vcD0wO2xvb3AmbHQ7MTA7bG9vcCsrKQorICAgICAgICAgICAgICAgIGlmICgoKHZhbHVlPXJfc3RyKHVkcHBfYmFzZSkpICYgMHg4MCkhPTB4MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdfY3RyKHVkcHBfYmFzZSwgMHgwNCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgJiAweGY4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgIHJldHVybiAodmFsdWUgJiAweGY4KSB8IDB4MDE7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgVU1BWCBBc3RyYSA2MDBQIG9ubHkgc2V2ZW4gc3VjaCByb3V0aW5lcyBleGlzdCAod2VsbAorICAgICAgICAxNCByZWFsbHksIHNldmVuIGZvciBTUFAgYW5kIHNldmVuIGZvciBFUFApLiBXaGV0aGVyIHlvdQorICAgICAgICBjaG9vc2UgdG8gZGlzYXNzZW1ibGUgdGhlIGRyaXZlciBhdCB0aGlzIHBvaW50IHRvIHZlcmlmeSB0aGUKKyAgICAgICAgcm91dGluZXMgaXMgeW91ciBvd24gY2hvaWNlLiBJZiB5b3UgZG8sIHRoZSBhZGRyZXNzIGZyb20gdGhlCisgICAgICAgIHRyYWNlIHNob3VsZCBoZWxwIGluIGxvY2F0aW5nIHRoZW0gaW4gdGhlIGRpc2Fzc2VtYmx5LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFlvdSB3aWxsIHByb2JhYmx5IHRoZW4gZmluZCBpdCB1c2VmdWwgdG8gd3JpdGUgYSBzY3JpcHQvcGVybC9DCisgICAgICAgIHByb2dyYW0gdG8gYW5hbHlzZSB0aGUgbG9nZmlsZSBhbmQgZGVjb2RlIHRoZW0gZnV0aGVyIGFzIHRoaXMKKyAgICAgICAgY2FuIHJldmVhbCBoaWdoZXIgbGV2ZWwgZ3JvdXBpbmcgb2YgdGhlIGxvdyBsZXZlbCByb3V0aW5lcy4KKyAgICAgICAgRm9yIGV4YW1wbGUgZnJvbSB0aGUgbG9ncyBmcm9tIG15IFVNQVggQXN0cmEgNjAwUCB3aGVuIGRlY29kZWQKKyAgICAgICAgZnV0aGVyIHJldmVhbCAodGhpcyBpcyBhIHNtYWxsIHNuaXBwZXQpCisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGFydDoKK3B1dDogNTUgOGYKK3B1dDogYWEgOGYKK3B1dDogMDAgOGYKK3B1dDogMDAgOGYKK3B1dDogMDAgOGYKK3B1dDogYzIgOGYKK3dhaXQ6IGZmCitnZXQ6IGFmLDg3Cit3YWl0OiBmZgorZ2V0OiBhZiw4NworZW5kOiBjYworc3RhcnQ6CitwdXQ6IDU1IDhmCitwdXQ6IGFhIDhmCitwdXQ6IDAwIDhmCitwdXQ6IDAzIDhmCitwdXQ6IDA1IDhmCitwdXQ6IDg0IDhmCit3YWl0OiBmZgorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBGcm9tIHRoaXMgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCA8dmFybmFtZT5wdXQ8L3Zhcm5hbWU+CisgICAgICAgIHJvdXRpbmUgaXMgb2Z0ZW4gZ3JvdXBlZCB0b2dldGhlciBpbiBmaXZlIHN1Y2Nlc3NpdmUgY2FsbHMKKyAgICAgICAgc2VuZGluZyBpbmZvcm1hdGlvbiB0byB0aGUgc2Nhbm5lci4gT25jZSB0aGVzZSBhcmUgdW5kZXJzdG9vZAorICAgICAgICBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcHJvY2VzcyB0aGUgbG9ncyBmdXJ0aGVyIHRvIHNob3cgdGhlCisgICAgICAgIGhpZ2hlciBsZXZlbCByb3V0aW5lcyBpbiBhbiBlYXN5IHRvIHNlZSBmb3JtYXQuIE9uY2UgdGhlCisgICAgICAgIGhpZ2hlc3QgbGV2ZWwgZm9ybWF0IHRoYXQgeW91IGNhbiBkZXJpdmUgZnJvbSB0aGlzIHByb2Nlc3MgaXMKKyAgICAgICAgdW5kZXJzdG9vZCwgeW91IHRoZW4gbmVlZCB0byBwcm9kdWNlIGEgc2VyaWVzIG9mIHNjYW5zIHZhcnlpbmcKKyAgICAgICAgb25seSBvbmUgcGFyYW1ldGVyIGJldHdlZW4gdGhlbSwgc28geW91IGNhbiBkaXNjb3ZlciBob3cgdG8KKyAgICAgICAgc2V0IHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgZm9yIHRoZSBzY2FubmVyLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBpcyB0aGUgPGZpbGVuYW1lPnNocmluay5jPC9maWxlbmFtZT4gcHJvZ3JhbS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorY2F0ICZndDsgc2hyaW5rLmMgJmx0OyZsdDtFT0YKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworCit2b2lkIAorbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZmWzI1Nl0sIGxhc3RsaW5lWzI1Nl07CisgIGludCBjb3VudDsKKworICBjb3VudCA9IDA7CisgIGxhc3RsaW5lWzBdID0gMDsKKworICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAgICB7CisgICAgICBmZ2V0cyAoYnVmZiwgc2l6ZW9mIChidWZmKSwgc3RkaW4pOworICAgICAgaWYgKHN0cmNtcCAoYnVmZiwgbGFzdGxpbmUpID09IDApCisJeworCSAgY291bnQrKzsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGNvdW50ICZndDsgMSkKKwkgICAgZnByaW50ZiAoc3Rkb3V0LCAiIyBMYXN0IGxpbmUgcmVwZWF0ZWQgJWkgdGltZXMgI1xuIiwgY291bnQpOworCSAgZnByaW50ZiAoc3Rkb3V0LCAiJXMiLCBidWZmKTsKKwkgIHN0cmNweSAobGFzdGxpbmUsIGJ1ZmYpOworCSAgICBjb3VudCA9IDE7CisJfQorICAgIH0KK30KK0VPRgorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L3NlY3QxPgorCisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2luc3RhbGxpbmcuc2dtbCBiL2RvY3VtZW50YXRpb24vaW5zdGFsbGluZy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZWQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2luc3RhbGxpbmcuc2dtbApAQCAtMCwwICsxLDc1MSBAQAorICA8Y2hhcHRlciBpZD0iaW5zdGFsbGluZyI+CisgICAgPHRpdGxlPkluc3RhbGxpbmcgV2luZTwvdGl0bGU+CisgICAgPHBhcmE+SG93IHRvIGluc3RhbGwgV2luZS4uLjwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0icmVwbGFjZS13aW5kb3dzIj4KKyAgICAgIDx0aXRsZT5XV04gIzUyIEZlYXR1cmU6IFJlcGxhY2luZyBXaW5kb3dzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdyaXR0ZW4gYnkgT3ZlIEvldmVuIDxlbWFpbD5vdmVrQHdpbmVocS5jb208L2VtYWlsPgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JbnN0YWxsYXRpb24gT3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgV2luZG93cyBpbnN0YWxsYXRpb24gY29uc2lzdHMgb2YgbWFueSBkaWZmZXJlbnQgcGFydHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBSZWdpc3RyeS4gTWFueSBrZXlzIGFyZSBzdXBwb3NlZCB0byBleGlzdCBhbmQgY29udGFpbgorICAgICAgICAgICAgICBtZWFuaW5nZnVsIGRhdGEsIGV2ZW4gaW4gYSBuZXdseS1pbnN0YWxsZWQgV2luZG93cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlLiBBcHBsaWNhdGlvbnMgZXhwZWN0IHRvIGZpbmQgYW5kL29yCisgICAgICAgICAgICAgIGluc3RhbGwgdGhpbmdzIGluIHNwZWNpZmljIHByZWRldGVybWluZWQgbG9jYXRpb25zLiBNb3N0CisgICAgICAgICAgICAgIG9mIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBleHBlY3RlZCB0byBleGlzdC4gQnV0IHVubGlrZQorICAgICAgICAgICAgICBVbml4IGRpcmVjdG9yeSBzdHJ1Y3R1cmVzLCBtb3N0IG9mIHRoZXNlIGxvY2F0aW9ucyBhcmUKKyAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCwgYW5kIGNhbiBiZSBxdWVyaWVkIHZpYSB0aGUgV2luZG93cyBBUEkKKyAgICAgICAgICAgICAgYW5kIHRoZSByZWdpc3RyeS4gVGhpcyBwbGFjZXMgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgb24KKyAgICAgICAgICAgICAgYSBXaW5lIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBTeXN0ZW0gRExMcy4gSW4gV2luZG93cywgdGhlc2UgdXN1YWxseSByZXNpZGUgaW4gdGhlCisgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW08L2ZpbGVuYW1lPiAob3IKKyAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbTMyPC9maWxlbmFtZT4pIGRpcmVjdG9yaWVzLiBTb21lIFdpbmRvd3MKKyAgICAgICAgICAgICAgYXBwbGljYXRpb25zIGNoZWNrIGZvciB0aGVpciBleGlzdGVuY2UgaW4gdGhlc2UKKyAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gbG9hZCB0aGVtLiBXaGlsZSBXaW5lCisgICAgICAgICAgICAgIGlzIGFibGUgdG8gbG9hZCBpdHMgb3duIGludGVybmFsIERMTHMKKyAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcykgd2hlbiB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgYXNrcyBmb3IgYSBETEwsIFdpbmUgZG9lcyBub3Qgc2ltdWxhdGUgdGhlIGV4aXN0ZW5jZSBvZgorICAgICAgICAgICAgICBub25leGlzdGluZyBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGlsZSB0aGUgdXNlcnMgYXJlIG9mIGNvdXJzZSBmcmVlIHRvIHNldCB1cCBldmVyeXRoaW5nCisgICAgICAgICAgdGhlbXNlbHZlcywgdGhlIFdpbmUgdGVhbSB3aWxsIG1ha2UgdGhlIGF1dG9tYXRlZCBXaW5lCisgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdCwgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4sCisgICAgICAgICAgZG8gZXZlcnl0aGluZyB3ZSBmaW5kIG5lY2Vzc2FyeSB0byBkbzsgcnVubmluZyB0aGUKKyAgICAgICAgICBjb252ZW50aW9uYWwgPGNvbW1hbmQ+Y29uZmlndXJlICYmIG1ha2UgZGVwZW5kICYmIG1ha2UgJiYgbWFrZQorICAgICAgICAgICAgaW5zdGFsbDwvY29tbWFuZD4gY3ljbGUgaXMgdGh1cyBub3QgcmVjb21tZW5kZWQsIHVubGVzcworICAgICAgICAgIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiBBdCB0aGUgbW9tZW50LAorICAgICAgICAgIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IGlzIGFibGUgdG8gY3JlYXRlIGEKKyAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIGluc3RhbGwgdGhlIHJlZ2lzdHJ5LCBhbmQgY3JlYXRlIHRoZQorICAgICAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaXRzZWxmLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5UaGUgUmVnaXN0cnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgZGVmYXVsdCByZWdpc3RyeSBpcyBpbiB0aGUgZmlsZQorICAgICAgICAgIDxmaWxlbmFtZT53aW5lZGVmYXVsdC5yZWc8L2ZpbGVuYW1lPi4gSXQgY29udGFpbnMgZGlyZWN0b3J5CisgICAgICAgICAgcGF0aHMsIGNsYXNzIElEcywgYW5kIG1vcmU7IGl0IG11c3QgYmUgaW5zdGFsbGVkIGJlZm9yZSBtb3N0CisgICAgICAgICAgPGZpbGVuYW1lPklOU1RBTEwuRVhFPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICA8ZmlsZW5hbWU+U0VUVVAuRVhFPC9maWxlbmFtZT4gYXBwbGljYXRpb25zIHdpbGwgd29yay4gVGhlCisgICAgICAgICAgcmVnaXN0cnkgaXMgY292ZXJlZCBpbiBtb3JlIGRldGFpbCBpbiBhbiBlYXJsaWVyIGFydGljbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkRpcmVjdG9yeSBTdHJ1Y3R1cmU8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBIZXJlJ3MgdGhlIGZ1bmRhbWVudGFsIGxheW91dCB0aGF0IFdpbmRvd3MgYXBwbGljYXRpb25zIGFuZAorICAgICAgICAgIGluc3RhbGxlcnMgZXhwZWN0LiBXaXRob3V0IGl0LCB0aGV5IHNlbGRvbSBvcGVyYXRlCisgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorICAgICAgICAgIDx0Z3JvdXAgY29scz0iNSI+CisgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PkM6XDwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PlJvb3QgZGlyZWN0b3J5IG9mIHByaW1hcnkgZGlzayBkcml2ZTwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5XaW5kb3dzXDwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+PGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PldpbmRvd3MgZGlyZWN0b3J5LCBjb250YWluaW5nIC5JTkkgZmlsZXMsIGFjY2Vzc29yaWVzLCBldGM8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnkgdmFsaWduPSJtaWRkbGUiPlN5c3RlbVw8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT48bGl0ZXJhbGxheW91dD5XaW4zLngvOTUvOTgvTUUgZGlyZWN0b3J5IGZvciBjb21tb24gRExMcworV2luTlQvMjAwMCBkaXJlY3RvcnkgZm9yIGNvbW1vbiAxNi1iaXQgRExMczwvbGl0ZXJhbGxheW91dD48L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT48ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+U3lzdGVtMzJcPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+V2luTlQvMjAwMCBkaXJlY3RvcnkgZm9yIGNvbW1vbiAzMi1iaXQgRExMczwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5TdGFydCBNZW51XDwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICAgICAgPGVudHJ5PlByb2dyYW0gbGF1bmNoZXIgZGlyZWN0b3J5IHN0cnVjdHVyZTwvZW50cnk+CisgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5Qcm9ncmFtc1w8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5Qcm9ncmFtIGxhdW5jaGVyIGxpbmtzICguTE5LIGZpbGVzKSB0byBhcHBsaWNhdGlvbnM8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8ZW50cnk+UHJvZ3JhbSBGaWxlc1w8L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PjxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgICAgIDxlbnRyeT5BcHBsaWNhdGlvbiBiaW5hcmllcyAoLkVYRSBhbmQgLkRMTCBmaWxlcyk8L2VudHJ5PgorICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaW5lIGVtdWxhdGVzIGRyaXZlcyBieSBwbGFjaW5nIHRoZWlyIHZpcnR1YWwgZHJpdmUgcm9vdHMgdG8KKyAgICAgICAgICB1c2VyLWNvbmZpZ3VyYWJsZSBwb2ludHMgaW4gdGhlIFVuaXggZmlsZXN5c3RlbSwgc28gaXQncworICAgICAgICAgIHlvdXIgY2hvaWNlIHdoZXJlIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPidzIHJvb3Qgc2hvdWxkCisgICAgICAgICAgYmUgKDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IHdpbGwgZXZlbiBhc2sKKyAgICAgICAgICB5b3UpLiBJZiB5b3UgY2hvb3NlLCBzYXksIDxmaWxlbmFtZT4vdmFyL3dpbmU8L2ZpbGVuYW1lPiwgYXMKKyAgICAgICAgICB0aGUgcm9vdCBvZiB5b3VyIHZpcnR1YWwgZHJpdmUgPG1lZGlhbGFiZWw+QzwvbWVkaWFsYWJlbD4sCisgICAgICAgICAgdGhlbiB5b3UnZCBwdXQgdGhpcyBpbiB5b3VyIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1tEcml2ZSBDXQorUGF0aD0vdmFyL3dpbmUKK1R5cGU9aGQKK0xhYmVsPU1TLURPUworRmlsZXN5c3RlbT13aW45NQorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpdGggdGhpcyBjb25maWd1cmF0aW9uLCB3aGF0IHdpbmRvd3MgYXBwcyB0aGluayBvZiBhcworICAgICAgICAgICJjOlx3aW5kb3dzXHN5c3RlbSIgd291bGQgbWFwIHRvCisgICAgICAgICAgPGZpbGVuYW1lPi92YXIvd2luZS93aW5kb3dzL3N5c3RlbTwvZmlsZW5hbWU+IGluIHRoZSBVTklYCisgICAgICAgICAgZmlsZXN5c3RlbS4gTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICAgICA8bGl0ZXJhbD5GaWxlc3lzdGVtPXdpbjk1PC9saXRlcmFsPiwgTk9UCisgICAgICAgICAgPGxpdGVyYWw+RmlsZXN5c3RlbT11bml4PC9saXRlcmFsPiwgdG8gbWFrZSBXaW5lIHNpbXVsYXRlIGEKKyAgICAgICAgICBXaW5kb3dzLWNvbXBhdGlibGUgKGNhc2UtaW5zZW5zaXRpdmUpIGZpbGVzeXN0ZW0sIG90aGVyd2lzZQorICAgICAgICAgIG1vc3QgYXBwcyB3b24ndCB3b3JrLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5TeXN0ZW0gRExMczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBXaW5lIHRlYW0gaGFzIGRldGVybWluZWQgdGhhdCBpdCBpcyBuZWNlc3NhcnkgdG8gY3JlYXRlCisgICAgICAgICAgZmFrZSBETEwgZmlsZXMgdG8gdHJpY2sgbWFueSBhcHBsaWNhdGlvbnMgdGhhdCBjaGVjayBmb3IKKyAgICAgICAgICBmaWxlIGV4aXN0ZW5jZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgZmVhdHVyZQorICAgICAgICAgIChzdWNoIGFzIFdpbnNvY2sgYW5kIGl0cyBUQ1AvSVAgbmV0d29ya2luZykgaXMgYXZhaWxhYmxlLiBJZgorICAgICAgICAgIHRoaXMgaXMgYSBwcm9ibGVtIGZvciB5b3UsIHlvdSBjYW4gY3JlYXRlIGVtcHR5IGZpbGVzIGluIHRoZQorICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdG8gbWFrZSB0aGUKKyAgICAgICAgICBhcHBsaWNhdGlvbiB0aGluayBpdCdzIHRoZXJlLCBhbmQgV2luZSdzIGJ1aWx0LWluIERMTCB3aWxsCisgICAgICAgICAgYmUgbG9hZGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGFjdHVhbGx5IGFza3MgZm9yIGl0LgorICAgICAgICAgIChVbmZvcnR1bmF0ZWx5LCA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBkb2VzCisgICAgICAgICAgbm90IGNyZWF0ZSBzdWNoIGVtcHR5IGZpbGVzIGl0c2VsZi4pCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXBwbGljYXRpb25zIHNvbWV0aW1lcyBhbHNvIHRyeSB0byBpbnNwZWN0IHRoZSB2ZXJzaW9uCisgICAgICAgICAgcmVzb3VyY2VzIGZyb20gdGhlIHBoeXNpY2FsIGZpbGVzIChmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgdGhlIERpcmVjdFggdmVyc2lvbikuIEVtcHR5IGZpbGVzIHdpbGwgbm90IGRvIGluIHRoaXMgY2FzZSwKKyAgICAgICAgICBpdCBpcyByYXRoZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgZmlsZXMgd2l0aCBjb21wbGV0ZQorICAgICAgICAgIHZlcnNpb24gcmVzb3VyY2VzLiBUaGlzIHByb2JsZW0gaXMgY3VycmVudGx5IGJlaW5nIHdvcmtlZAorICAgICAgICAgIG9uLiBJbiB0aGUgbWVhbnRpbWUsIHlvdSBtYXkgc3RpbGwgbmVlZCB0byBncmFiIHNvbWUgcmVhbAorICAgICAgICAgIERMTCBmaWxlcyB0byBmb29sIHRoZXNlIGFwcHMgd2l0aC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbmQgdGhlcmUgYXJlIG9mIGNvdXJzZSBETExzIHRoYXQgd2luZSBkb2VzIG5vdCBjdXJyZW50bHkKKyAgICAgICAgICBpbXBsZW1lbnQgdmVyeSB3ZWxsIChvciBhdCBhbGwpLiBJZiB5b3UgZG8gbm90IGhhdmUgYSByZWFsCisgICAgICAgICAgV2luZG93cyB5b3UgY2FuIHN0ZWFsIG5lY2Vzc2FyeSBETExzIGZyb20sIHlvdSBjYW4gYWx3YXlzCisgICAgICAgICAgZ2V0IHNvbWUgZnJvbSBhIERMTCBhcmNoaXZlIHN1Y2ggYXMKKyAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc29sby5hYmFjLmNvbS9kbGxhcmNoaXZlLyI+aHR0cDovL3NvbG8uYWJhYy5jb20vZGxsYXJjaGl2ZS88L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJuby13aW5kb3dzIj4KKyAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIFdpbmUgV2l0aG91dCBXaW5kb3dzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ID8/PworICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL25vLXdpbmRvd3M8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEEgbWFqb3IgZ29hbCBvZiBXaW5lIGlzIHRvIGFsbG93IHVzZXJzIHRvIHJ1biBXaW5kb3dzIHByb2dyYW1zCisgICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIGluc3RhbGwgV2luZG93cyBvbiB0aGVpciBtYWNoaW5lLiBXaW5lCisgICAgICAgIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1haW4gRExMJ3MgdXN1YWxseQorICAgICAgICBwcm92aWRlZCB3aXRoIFdpbmRvd3MuIFRoZXJlZm9yZSwgb25jZSBXaW5lIGlzIGZpbmlzaGVkLCB5b3UKKyAgICAgICAgd2lsbCBub3QgbmVlZCB0byBoYXZlIHdpbmRvd3MgaW5zdGFsbGVkIHRvIHVzZSBXaW5lLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFdpbmUgaGFzIGFscmVhZHkgbWFkZSBlbm91Z2ggcHJvZ3Jlc3MgdGhhdCBpdCBtYXkgYmUgcG9zc2libGUKKyAgICAgICAgdG8gcnVuIHlvdXIgdGFyZ2V0IGFwcGxpY2F0aW9ucyB3aXRob3V0IFdpbmRvd3MgaW5zdGFsbGVkLiBJZgorICAgICAgICB5b3Ugd2FudCB0byB0cnkgaXQsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGUgZW1wdHkgPGZpbGVuYW1lPkM6XHdpbmRvd3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5DOlx3aW5kb3dzXHN5c3RlbTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPkM6XHdpbmRvd3NcU3RhcnQgTWVudTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5DOlx3aW5kb3dzXFN0YXJ0IE1lbnVcUHJvZ3JhbXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3JpZXMuIERvIG5vdCBwb2ludCBXaW5lIHRvIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5XaW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZ1bGwgb2Ygb2xkCisgICAgICAgICAgICBpbnN0YWxsYXRpb25zIGFuZCBhIG1lc3N5IHJlZ2lzdHJ5LiAoV2luZSBjcmVhdGVzIGEKKyAgICAgICAgICAgIHNwZWNpYWwgcmVnaXN0cnkgaW4geW91ciA8ZmlsZW5hbWUgPmhvbWU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5LCBpbiA8ZmlsZW5hbWU+JEhPTUUvLndpbmUvKi5yZWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFBlcmhhcHMgeW91IGhhdmUgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzKS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFBvaW50IDxtZWRpYWxhYmVsPltEcml2ZSBDXTwvbWVkaWFsYWJlbD4gaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPiB0byB3aGVyZSB5b3Ugd2FudAorICAgICAgICAgICAgPGZpbGVuYW1lPkM6PC9maWxlbmFtZT4gdG8gYmUuIFJlZmVyIHRvIHRoZSBXaW5lIG1hbiBwYWdlCisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gUmVtZW1iZXIgdG8gdXNlCisgICAgICAgICAgICA8dXNlcmlucHV0PmZpbGVzeXN0ZW09d2luOTU8L3VzZXJpbnB1dD4hCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gdG8gY29tcGlsZSBXaW5lCisgICAgICAgICAgICBhbmQgaW5zdGFsbCB0aGUgZGVmYXVsdCByZWdpc3RyeS4gT3IgaWYgeW91IHByZWZlciB0byBkbworICAgICAgICAgICAgaXQgeW91cnNlbGYsIGNvbXBpbGUgPGZpbGVuYW1lPnByb2dyYW1zL3JlZ2FwaTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIHJ1bjogICA8Y29tbWFuZD5wcm9ncmFtcy9yZWdhcGkvcmVnYXBpIHNldFZhbHVlICZsdDsKKyAgICAgICAgICAgIHdpbmVkZWZhdWx0LnJlZzwvY29tbWFuZD4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1biBhbmQvb3IgaW5zdGFsbCB5b3VyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSBXaW5lIGlzIG5vdCB5ZXQgY29tcGxldGUsIHNvbWUgcHJvZ3JhbXMgd2lsbCB3b3JrCisgICAgICAgIGJldHRlciB3aXRoIG5hdGl2ZSBXaW5kb3dzIERMTCdzIHRoYW4gd2l0aCBXaW5lJ3MKKyAgICAgICAgcmVwbGFjZW1lbnRzLiBXaW5lIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG1ha2UgdGhpcyBwb3NzaWJsZS4KKyAgICAgICAgSGVyZSBhcmUgc29tZSB0aXBzIGJ5IEp1ZXJnZW4gU2NobWllZCAoYW5kIG90aGVycykgb24gaG93IHRvCisgICAgICAgIHByb2NlZWQuIFRoaXMgYXNzdW1lcyB0aGF0IHlvdXIKKyAgICAgICAgPGZpbGVuYW1lPkM6XHdpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgZmlsZSBkb2VzIG5vdCBwb2ludCB0byBhIG5hdGl2ZSBXaW5kb3dzIGluc3RhbGxhdGlvbiBidXQgaXMgaW4KKyAgICAgICAgYSBzZXBhcmF0ZSBVbml4IGZpbGUgc3lzdGVtLiAoRm9yIGluc3RhbmNlLCA8cXVvdGU+Qzpcd2luZG93czwvcXVvdGU+IGlzCisgICAgICAgIHJlYWxseSBzdWJkaXJlY3RvcnkgPHF1b3RlPndpbmRvd3M8L3F1b3RlPiBsb2NhdGVkIGluCisgICAgICAgIDxxdW90ZT4vaG9tZS9lZ28vd2luZS9kcml2ZXMvYzwvcXVvdGU+KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbiB3aXRoIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZworICAgICAgICAgICAgICArbW9kdWxlLCtmaWxlPC9wYXJhbWV0ZXI+IHRvIGZpbmQgb3V0IHdoaWNoIGZpbGVzIGFyZQorICAgICAgICAgICAgbmVlZGVkLiBDb3B5IHRoZSByZXF1aXJlZCBETEwncyBvbmUgYnkgb25lIHRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPkM6XHdpbmRvd3Ncc3lzdGVtPC9maWxlbmFtZT4gZGlyZWN0b3J5LiBEbyBub3QKKyAgICAgICAgICAgIGNvcHkgS0VSTkVML0tFUk5FTDMyLCBHREkvR0RJMzIsIG9yIFVTRVIvVVNFUjMyLiBUaGVzZQorICAgICAgICAgICAgaW1wbGVtZW50IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFdpbmRvd3MgQVBJLCBhbmQKKyAgICAgICAgICAgIHRoZSBXaW5lIGludGVybmFsIHZlcnNpb25zIG11c3QgYmUgdXNlZC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVkaXQgdGhlIDxxdW90ZT5bRGxsT3ZlcnJpZGVzXTwvcXVvdGU+IHNlY3Rpb24gb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPiB0byBzcGVjaWZ5CisgICAgICAgICAgICA8cXVvdGU+bmF0aXZlPC9xdW90ZT4gYmVmb3JlIDxxdW90ZT5idWlsdGluPC9xdW90ZT4gZm9yCisgICAgICAgICAgICB0aGUgV2luZG93cyBETEwncyB5b3Ugd2FudCB0byB1c2UuIEZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBhYm91dCB0aGlzLCBzZWUgdGhlIFdpbmUgbWFucGFnZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCBzb21lIG5ldHdvcmsgRExMJ3MgYXJlIG5vdCBuZWVkZWQgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgIFdpbmUgaXMgbG9va2luZyBmb3IgdGhlbS4gVGhlIFdpbmRvd3MKKyAgICAgICAgICAgIDxmaWxlbmFtZT5NUFIuRExMPC9maWxlbmFtZT4gY3VycmVudGx5IGRvZXMgbm90IHdvcms7IHlvdQorICAgICAgICAgICAgbXVzdCB1c2UgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29weSBTSEVMTC9TSEVMTDMyIGFuZCBDT01ETEcvQ09NRExHMzIgQ09NTUNUUkwvQ09NQ1RMMzIKKyAgICAgICAgICAgIG9ubHkgYXMgcGFpcnMgdG8geW91ciBXaW5lIGRpcmVjdG9yeSAodGhlc2UgRExMJ3MgYXJlCisgICAgICAgICAgICA8cXVvdGU+Y2xlYW48L3F1b3RlPiB0byB1c2UpLiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZXNlCisgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIDxxdW90ZT5bRGxsUGFpcnNdPC9xdW90ZT4gc2VjdGlvbiBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9yIC53aW5lcmMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZSBjb25zaXN0ZW50OiBVc2Ugb25seSBETEwncyBmcm9tIHRoZSBzYW1lIFdpbmRvd3MgdmVyc2lvbgorICAgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQdXQgPGZpbGVuYW1lPnJlZ2VkaXQuZXhlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Qzpcd2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgKDxhcHBsaWNhdGlvbj5vZmZpY2U5NTwvYXBwbGljYXRpb24+IGltcG9ydHMgYQorICAgICAgICAgICAgPGZpbGVuYW1lPioucmVnPC9maWxlbmFtZT4gZmlsZSB3aGVuIGl0IHJ1bnMgd2l0aCBhIGVtcHR5CisgICAgICAgICAgICByZWdpc3RyeSwgZG9uJ3Qga25vdyBhYm91dAorICAgICAgICAgICAgPGFwcGxpY2F0aW9uPm9mZmljZTk3PC9hcHBsaWNhdGlvbj4pLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbyBhZGQgPGZpbGVuYW1lPndpbmhlbHAuZXhlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2luaGxwMzIuZXhlPC9maWxlbmFtZT4gaWYgeW91IHdhbnQgdG8gYmUgYWJsZQorICAgICAgICAgICAgdG8gYnJvd3NlIHRocm91Z2ggeW91ciBwcm9ncmFtcycgaGVscCBmdW5jdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJ2ZmF0Ij4KKyAgICAgIDx0aXRsZT5EZWFsaW5nIFdpdGggRkFUL1ZGQVQgUGFydGl0aW9uczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgd3JpdHRlbiBieSBTdGV2ZW4gRWxsaW90dCAoZWxsaW90c2xAbWluZHNwcmluZy5jb20pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vbGludXgtZmF0LXBlcm1pc3Npb25zPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IEZBVCBhbmQKKyAgICAgICAgVkZBVCBmaWxlIHN5c3RlbSBwZXJtaXNzaW9ucyB3b3JrIGluIExpbnV4CisgICAgICAgIHdpdGggYSBmb2N1cyBvbiBjb25maWd1cmluZyB0aGVtIGZvciBXaW5lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBMaW51eCBpcyBhYmxlIHRvIGFjY2VzcyBET1MgYW5kIFdpbmRvd3MgZmlsZSBzeXN0ZW1zIHVzaW5nCisgICAgICAgICAgZWl0aGVyIHRoZSBGQVQgKG9sZGVyIDguMyBET1MgZmlsZXN5c3RlbXMpIG9yIFZGQVQgKG5ld2VyCisgICAgICAgICAgV2luZG93cyA5NSBvciBsYXRlciBsb25nIGZpbGVuYW1lIGZpbGVzeXN0ZW1zKSBtb2R1bGVzLgorICAgICAgICAgIE1vdW50ZWQgRkFUIG9yIFZGQVQgZmlsZXN5c3RlbXMgcHJvdmlkZSB0aGUgcHJpbWFyeSBtZWFucworICAgICAgICAgIGZvciB3aGljaCBleGlzdGluZyBhcHBsaWNhdGlvbnMgYW5kIHRoZWlyIGRhdGEgYXJlIGFjY2Vzc2VkCisgICAgICAgICAgdGhyb3VnaCBXaW5lIGZvciBkdWFsIGJvb3QgKExpbnV4ICsgV2luZG93cykgc3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaW5lIG1hcHMgbW91bnRlZCBGQVQgZmlsZXN5c3RlbXMsIHN1Y2ggYXMKKyAgICAgICAgICA8ZmlsZW5hbWU+L2M8L2ZpbGVuYW1lPiwgdG8gZHJpdmVyIGxldHRlcnMsIHN1Y2ggYXMKKyAgICAgICAgICA8cXVvdGU+Yzo8L3F1b3RlPiwgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLiAgVGhlIGZvbGxvd2luZyBleGNlcnB0CisgICAgICAgICAgZnJvbSBhIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGRvZXMgdGhpczoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitbRHJpdmUgQ10KK1BhdGg9L2MKK1R5cGU9aGQKKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWx0aG91Z2ggVkZBVCBmaWxlc3lzdGVtcyBhcmUgcHJlZmVyYWJsZSB0byBGQVQgZmlsZXN5c3RlbXMKKyAgICAgICAgICBmb3IgdGhlaXIgbG9uZyBmaWxlbmFtZSBzdXBwb3J0IHRoZSB0ZXJtIDxxdW90ZT5GQVQ8L3F1b3RlPgorICAgICAgICAgIHdpbGwgYmUgdXNlZCB0aHJvdWdob3V0IHRoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCB0bworICAgICAgICAgIHJlZmVyIHRvIEZBVCBmaWxlc3lzdGVtcyBhbmQgdGhlaXIgZGVyaXZhdGl2ZXMuIEFsc28sCisgICAgICAgICAgPHF1b3RlPi9jPC9xdW90ZT4gd2lsbCBiZSB1c2VkIGFzIHRoZSBGQVQgbW91bnQgcG9pbnQgaW4KKyAgICAgICAgICBleGFtcGxlcyB0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTW9zdCBtb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucyBlaXRoZXIgZGV0ZWN0IG9yIGFsbG93CisgICAgICAgICAgZXhpc3RpbmcgRkFUIGZpbGUgc3lzdGVtcyB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgY2FuIGJlCisgICAgICAgICAgbW91bnRlZCwgaW4gYSBsb2NhdGlvbiBzdWNoIGFzIDxmaWxlbmFtZT4vYzwvZmlsZW5hbWU+LAorICAgICAgICAgIGVpdGhlciBwZXJzaXN0ZW50bHkgKG9uIGJvb3R1cCkgb3Igb24gYW4gYXMgbmVlZGVkIGJhc2lzLiBJbgorICAgICAgICAgIGVpdGhlciBjYXNlLCBieSBkZWZhdWx0LCB0aGUgcGVybWlzc2lvbnMgd2lsbCBwcm9iYWJseSBiZQorICAgICAgICAgIGNvbmZpZ3VyZWQgc28gdGhhdCB0aGV5IGxvb2sgc29tZXRoaW5nIGxpa2U6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmNkIC9jPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KKzxjb21wdXRlcm91dHB1dD4tcnd4ci14ci14ICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0Cistcnd4ci14ci14ICAgMSByb290ICAgICByb290ICAgICAgICAgIDI0NSBPY3QgMTAgMTc6NTggY29uZmlnLnN5cworZHJ3eHIteHIteCAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgd2hlcmUgYWxsIHRoZSBmaWxlcyBhcmUgb3duZWQgYnkgInJvb3QiLCBhcmUgaW4gdGhlICJyb290IgorICAgICAgICAgIGdyb3VwIGFuZCBhcmUgb25seSB3cml0YWJsZSBieSAicm9vdCIKKyAgICAgICAgICAoPGxpdGVyYWw+NzU1PC9saXRlcmFsPiBwZXJtaXNzaW9ucykuIFRoaXMgaXMgcmVzdHJpY3RpdmUgaW4KKyAgICAgICAgICB0aGF0IGl0IHJlcXVpcmVzIHRoYXQgV2luZSBiZSBydW4gYXMgcm9vdCBpbiBvcmRlciBmb3IKKyAgICAgICAgICBhcHBsaWNhdGlvbnMgdG8gYmUgYWJsZSB0byB3cml0ZSB0byBhbnkgcGFydCBvZiB0aGUKKyAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZXJlIHRocmVlIG1ham9yIGFwcHJvYWNoZXMgdG8gb3ZlcmNvbWluZyB0aGUgcmVzdHJpY3RpdmUKKyAgICAgICAgICBwZXJtaXNzaW9ucyBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaDoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFJ1biA8YXBwbGljYXRpb24+V2luZTwvYXBwbGljYXRpb24+IGFzIHJvb3QKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBNb3VudCB0aGUgRkFUIGZpbGVzeXN0ZW0gd2l0aCBsZXNzIHJlc3RyaWN0aXZlCisgICAgICAgICAgICAgIHBlcm1pc3Npb25zCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgU2hhZG93IHRoZSBGQVQgZmlsZXN5c3RlbSBieSBjb21wbGV0ZWx5IG9yIHBhcnRpYWxseQorICAgICAgICAgICAgICBjb3B5aW5nIGl0CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWFjaCBhcHByb2FjaCB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5SdW5uaW5nIFdpbmUgYXMgcm9vdDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFJ1bm5pbmcgV2luZSBhcyByb290IGlzIHRoZSBlYXNpZXN0IGFuZCBtb3N0IHRob3JvdWdoIHdheSBvZiBnaXZpbmcKKyAgICAgICAgICBhcHBsaWNhdGlvbnMgdGhhdCBXaW5lIHJ1bnMgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBGQVQgZmlsZXMgc3lzdGVtcy4KKyAgICAgICAgICBSdW5uaW5nIHdpbmUgYXMgcm9vdCBhbHNvIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gZG8gdGhpbmdzIHVucmVsYXRlZAorICAgICAgICAgIHRvIEZBVCBmaWxlc3lzdGVtcywgc3VjaCBhcyBsaXN0ZW5pbmcgdG8gcG9ydHMgdGhhdCBhcmUgbGVzcyB0aGFuCisgICAgICAgICAgMTAyNC4gIFJ1bm5pbmcgV2luZSBhcyByb290IGlzIGRhbmdlcm91cyBzaW5jZSB0aGVyZSBpcyBubyBsaW1pdCB0bworICAgICAgICAgIHdoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBkbyB0byB0aGUgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5Nb3VudGluZyBGQVQgZmlsZXN5c3RlbXM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgRkFUIGZpbGVzeXN0ZW0gY2FuIGJlIG1vdW50ZWQgd2l0aCBwZXJtaXNzaW9ucyBsZXNzIHJlc3RyaWN0aXZlCisgICAgICAgICAgdGhhbiB0aGUgZGVmYXVsdC4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgZWl0aGVyIGNoYW5naW5nIHRoZSB1c2VyIHRoYXQKKyAgICAgICAgICBtb3VudHMgdGhlIEZBVCBmaWxlc3lzdGVtIG9yIGJ5IGV4cGxpY2l0bHkgY2hhbmdpbmcgdGhlIHBlcm1pc3Npb25zCisgICAgICAgICAgdGhhdCB0aGUgRkFUIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoLiAgVGhlIHBlcm1pc3Npb25zIGFyZQorICAgICAgICAgIGluaGVyaXRlZCBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbS4gIFNpbmNlIHRoZQorICAgICAgICAgIHByb2Nlc3MgdGhhdCBtb3VudHMgdGhlIEZBVCBmaWxlc3lzdGVtIGlzIHVzdWFsbHkgYSBzdGFydHVwIHNjcmlwdAorICAgICAgICAgIHJ1bm5pbmcgYXMgcm9vdCB0aGUgRkFUIGZpbGVzeXN0ZW0gaW5oZXJpdHMgcm9vdCdzIHBlcm1pc3Npb25zLiAgVGhpcworICAgICAgICAgIHJlc3VsdHMgaW4gdGhlIGZpbGVzIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBoYXZpbmcgcGVybWlzc2lvbnMgc2ltaWxhcgorICAgICAgICAgIHRvIGZpbGVzIGNyZWF0ZWQgYnkgcm9vdC4gIEZvciBleGFtcGxlOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cis8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD53aG9hbWk8L3VzZXJpbnB1dD4KKzxjb21wdXRlcm91dHB1dD5yb290PC9jb21wdXRlcm91dHB1dD4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnRvdWNoIHJvb3RfZmlsZTwvdXNlcmlucHV0PgorPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWwgcm9vdF9maWxlPC91c2VyaW5wdXQ+Cis8Y29tcHV0ZXJvdXRwdXQ+PC9jb21wdXRlcm91dHB1dD4tcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBEZWMgMTAgMDA6MjAgcm9vdF9maWxlCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB3aGljaCBtYXRjaGVzIHRoZSBvd25lciwgZ3JvdXAgYW5kIHBlcm1pc3Npb25zIG9mIGZpbGVzIHNlZW4KKyAgICAgICAgICBvbiB0aGUgRkFUIGZpbGVzeXN0ZW0gZXhjZXB0IGZvciB0aGUgbWlzc2luZyAneCdzLiAgVGhlCisgICAgICAgICAgcGVybWlzc2lvbnMgb24gdGhlIEZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjaGFuZ2VkIGJ5IGNoYW5naW5nCisgICAgICAgICAgcm9vdCdzIHVtYXNrICh1bnNldCBwZXJtaXNzaW9ucyBiaXRzKS4gIEZvciBleGFtcGxlOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+Cis8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD51bW91bnQgL2M8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtYXNrPC91c2VyaW5wdXQ+Cis8Y29tcHV0ZXJvdXRwdXQ+MDIyPC9jb21wdXRlcm91dHB1dD4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtYXNrIDA3MzwvdXNlcmlucHV0PgorPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bW91bnQgL2M8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmNkIC9jPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KKzxjb21wdXRlcm91dHB1dD4tcnd4LS0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0Cistcnd4LS0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgIDI0NSBPY3QgMTAgMTc6NTggY29uZmlnLnN5cworZHJ3eC0tLXItLSAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTW91bnRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtIHdpdGggYSB1bWFzayBvZgorICAgICAgICAgIDxsaXRlcmFsPjAwMDwvbGl0ZXJhbD4gZ2l2ZXMgYWxsIHVzZXJzIGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgorICAgICAgICAgIGl0LiBFeHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBGQVQKKyAgICAgICAgICBmaWxlc3lzdGVtIHdoZW4gaXQgaXMgbW91bnRlZCBwcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRyb2wuCisgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIG1vdW50IG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gRkFUCisgICAgICAgICAgcGVybWlzc2lvbnM6IDxsaXRlcmFsPnVpZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPmdpZDwvbGl0ZXJhbD4KKyAgICAgICAgICBhbmQgPGxpdGVyYWw+dW1hc2s8L2xpdGVyYWw+LiAgVGhleSBjYW4gZWFjaCBiZSBzcGVjaWZpZWQKKyAgICAgICAgICB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1hbnVhbGx5IG1vdW50ZWQuICBGb3IgZXhhbXBsZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dW1vdW50IC9jPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5tb3VudCAtbyB1aWQ9NTAwIC1vIGdpZD01MDAgLW8gdW1hc2s9MDAyIC9jPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvYzwvdXNlcmlucHV0PgorPHByb21wdD4vYz48L3Byb21wdD48dXNlcmlucHV0PmxzIC1sPC91c2VyaW5wdXQ+Cis8Y29tcHV0ZXJvdXRwdXQ+LXJ3eHJ3eHIteCAgIDEgc2xlICAgICAgc2xlICAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAorLXJ3eHJ3eHIteCAgIDEgc2xlICAgICAgc2xlICAgICAgICAgICAyNDUgT2N0IDEwIDE3OjU4IGNvbmZpZy5zeXMKK2Ryd3hyd3hyLXggIDQxIHNsZSAgICAgIHNsZSAgICAgICAgIDE2Mzg0IERlYyAzMCAgMTk5OCB3aW5kb3dzPC9jb21wdXRlcm91dHB1dD4KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHdoaWNoIGdpdmVzICJzbGUiIGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgorICAgICAgICAgIDxmaWxlbmFtZT4vYzwvZmlsZW5hbWU+LiAgVGhlIG9wdGlvbnMgbGlzdGVkIGFib3ZlIGNhbiBiZQorICAgICAgICAgIG1hZGUgcGVybWFuZW50IGJ5IGFkZGluZyB0aGVtIHRvIHRoZQorICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Z3JlcCAvYyAvZXRjL2ZzdGFiPC91c2VyaW5wdXQ+Cis8Y29tcHV0ZXJvdXRwdXQ+L2Rldi9oZGExICAvYyAgdmZhdCAgdWlkPTUwMCxnaWQ9NTAwLHVtYXNrPTAwMixleGVjLGRldixzdWlkLHJ3IDEgMTwvY29tcHV0ZXJvdXRwdXQ+CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3RlIHRoYXQgdGhlIHVtYXNrIG9mIDxsaXRlcmFsPjAwMjwvbGl0ZXJhbD4gaXMgY29tbW9uIGluCisgICAgICAgICAgdGhlIHVzZXIgcHJpdmF0ZSBncm91cCBmaWxlIHBlcm1pc3Npb24gc2NoZW1lLiAgT24gRkFUIGZpbGUKKyAgICAgICAgICBzeXN0ZW1zIHRoaXMgdW1hc2sgYXNzdXJlcyB0aGF0IGFsbCBmaWxlcyBhcmUgZnVsbHkKKyAgICAgICAgICBhY2Nlc3NpYmxlIGJ5IGFsbCB1c2VycyBpbiB0aGUgc3BlY2lmaWVkIGdyb3VwCisgICAgICAgICAgKDxsaXRlcmFsPmdpZDwvbGl0ZXJhbD4pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5TaGFkb3dpbmcgRkFUIGZpbGVzeXN0ZW1zPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU2hhZG93aW5nIHByb3ZpZGVzIGEgZmluZXIgZ3JhbnVsYXJpdHkgb2YgY29udHJvbC4gIFBhcnRzIG9mCisgICAgICAgICAgdGhlIG9yaWdpbmFsIEZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjb3BpZWQgc28gdGhhdCB0aGUKKyAgICAgICAgICBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IHdvcmsgd2l0aCB0aG9zZSBjb3BpZWQgcGFydHMgd2hpbGUKKyAgICAgICAgICB0aGUgYXBwbGljYXRpb24gY29udGludWUgdG8gZGlyZWN0bHkgcmVhZCB0aGUgcmVtYWluaW5nCisgICAgICAgICAgcGFydHMuICBUaGlzIGlzIGRvbmUgd2l0aCBzeW1ib2xpYyBsaW5rcy4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgY29uc2lkZXIgYSBzeXN0ZW0gd2hlcmUgYW4gYXBwbGljYXRpb24gbmFtZWQKKyAgICAgICAgICA8YXBwbGljYXRpb24+QW5BcHA8L2FwcGxpY2F0aW9uPiBtdXN0IGJlIGFibGUgdG8gcmVhZCBhbmQKKyAgICAgICAgICB3cml0ZSB0byB0aGUgPGZpbGVuYW1lPmM6XHdpbmRvd3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICA8ZmlsZW5hbWU+YzpcQW5BcHA8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcyB3ZWxsIGFzIGhhdmUKKyAgICAgICAgICByZWFkIGFjY2VzcyB0byB0aGUgZW50aXJlIEZBVCBmaWxlc3lzdGVtLiAgT24gdGhpcyBzeXN0ZW0KKyAgICAgICAgICB0aGUgRkFUIGZpbGVzeXN0ZW0gaGFzIGRlZmF1bHQgcGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIG5vdAorICAgICAgICAgIGJlIGNoYW5nZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgb3IgY2FuIG5vdCBiZSBjaGFuZ2VkIGR1ZSB0bworICAgICAgICAgIGxhY2sgb2Ygcm9vdCBhY2Nlc3MuICBPbiB0aGlzIHN5c3RlbSBhIHNoYWRvdyBkaXJlY3RvcnkKKyAgICAgICAgICBtaWdodCBiZSBzZXQgdXAgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KKzxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmNkIC88L3VzZXJpbnB1dD4KKzxwcm9tcHQ+Lz48L3Byb21wdD48dXNlcmlucHV0Pm1rZGlyIGNfc2hhZG93PC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi8+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCBjX3NoYWRvdzwvdXNlcmlucHV0PgorPHByb21wdD4vY19zaGFkb3c+PC9wcm9tcHQ+PHVzZXJpbnB1dD5sbiAtcyAvY18vKiAuPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PnJtIHdpbmRvd3MgQW5BcHA8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y3AgLVIgL2NfL3t3aW5kb3dzLEFuQXBwfSAuPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PmNobW9kIC1SIDc3NyB3aW5kb3dzIEFuQXBwPC91c2VyaW5wdXQ+Cis8cHJvbXB0Pi9jX3NoYWRvdz48L3Byb21wdD48dXNlcmlucHV0PnBlcmwgLXAgLWkgLWUgJ3N8L2MkfC9jX3NoYWRvd3xnJyAvdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmY8L3VzZXJpbnB1dD4KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBhYm92ZSBnaXZlcyBldmVyeW9uZSBjb21wbGV0ZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8KKyAgICAgICAgICB0aGUgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICA8ZmlsZW5hbWU+QW5BcHA8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyB3aGlsZSBvbmx5IHJvb3QgaGFzCisgICAgICAgICAgd3JpdGUgYWNjZXNzIHRvIGFsbCBvdGhlciBkaXJlY3Rvcmllcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4gICAgCisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0ic2NzaS1zdXBwb3J0Ij4KKyAgICAgIDx0aXRsZT5TQ1NJIFN1cHBvcnQ8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgQnJ1Y2UgTWlsbmVyOyBBZGRpdGlvbnMgYnkgQW5kcmVhcyBNb2hyCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vYXNwaTwvZmlsZW5hbWU+KQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBmaWxlIGRlc2NyaWJlcyBzZXR0aW5nIHVwIHRoZSBXaW5kb3dzIEFTUEkgaW50ZXJmYWNlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPHdhcm5pbmc+CisgICAgICAgICAgPHRpdGxlPldhcm5pbmcvV2FybmluZy9XYXJuaW5nISEhISEhPC90aXRsZT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxzY3JlZW4+CitUSElTIE1BWSBUUkFTSCBZT1VSIFNZU1RFTSBJRiBVU0VEIElOQ09SUkVDVExZCitUSElTIE1BWSBUUkFTSCBZT1VSIFNZU1RFTSBJRiBVU0VEIENPUlJFQ1RMWQorICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3dhcm5pbmc+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgdGhhdCBJIGhhdmUgc2FpZCB0aGF0LiBBU1BJIGlzIGEgZGlyZWN0IGxpbmsgdG8gU0NTSSBkZXZpY2VzIGZyb20KKyAgICAgICAgd2luZG93cyBwcm9ncmFtcy4gQVNQSSBqdXN0IGZvcndhcmRzIHRoZSBTQ1NJIGNvbW1hbmRzIHRoYXQgcHJvZ3JhbXMgc2VuZAorICAgICAgICB0byBpdCB0byB0aGUgU0NTSSBidXMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHVzZSB0aGUgd3Jvbmcgc2NzaSBkZXZpY2UgaW4geW91ciBzZXR1cCBmaWxlLCB5b3UgY2FuIHNlbmQKKyAgICAgICAgY29tcGxldGVseSBib2d1cyBjb21tYW5kcyB0byB0aGUgd3JvbmcgZGV2aWNlIC0gQW4gZXhhbXBsZSB3b3VsZCBiZQorICAgICAgICBmb3JtYXR0aW5nIHlvdXIgaGFyZCBkcml2ZXMgKGFzc3VtaW5nIHRoZSBkZXZpY2UgZ2F2ZSB5b3UgcGVybWlzc2lvbiAtCisgICAgICAgIGlmIHlvdSdyZSBydW5uaW5nIGFzIHJvb3QsIGFsbCBiZXRzIGFyZSBvZmYpLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvIHBsZWFzZSBtYWtlIHN1cmUgdGhhdCAqKmFsbCoqIFNDU0kgZGV2aWNlcyBub3QgbmVlZGVkIGJ5IHRoZSBwcm9ncmFtIAorICAgICAgICBoYXZlIHRoZWlyIHBlcm1pc3Npb25zIHNldCBhcyByZXN0cmljdGVkIGFzIHBvc3NpYmxlICEgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBDb29rYm9vayBmb3Igc2V0dGluZyB1cCBzY2FubmVyOiAoQXQgbGVhc3QgaG93IG1pbmUgaXMgdG8gd29yaykKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+V2luZG93cyByZXF1aXJlbWVudHM8L3RpdGxlPgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoZSBzY2FubmVyIHNvZnR3YXJlIG5lZWRzIHRvIHVzZSB0aGUgIkFkYXB0ZWMiCisgICAgICAgICAgICAgIGNvbXBhdGlibGUgZHJpdmVycyAoQVNQSSkuIEF0IGxlYXN0IHdpdGggTXVzdGVrLCB0aGV5CisgICAgICAgICAgICAgIGFsbG93IHlvdSB0aGUgY2hvaWNlIG9mIHVzaW5nIHRoZSBidWlsdGluIGNhcmQgb3IgdGhlCisgICAgICAgICAgICAgICJBZGFwdGVjIChBSEEpIiBjb21wYXRpYmxlIGRyaXZlcnMuIFRoaXMgd2lsbCBub3Qgd29yaworICAgICAgICAgICAgICBhbnkgb3RoZXIgd2F5LiBTb2Z0d2FyZSB0aGF0IGFjY2Vzc2VzIHRoZSBzY2FubmVyIHZpYSBhCisgICAgICAgICAgICAgIERPUyBBU1BJIGRyaXZlciAoZS5nLiBBU1BJMkRPUykgaXMgc3VwcG9ydGVkLCB0b28uIFtBTV0KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBZb3UgcHJvYmFibHkgbmVlZCBhIHJlYWwgd2luZG93cyBpbnN0YWxsIG9mIHRoZSBzb2Z0d2FyZQorICAgICAgICAgICAgICB0byBzZXQgdGhlIExVTidzL1NDU0kgaWQncyB1cCBjb3JyZWN0bHkuIEknbSBub3QgZXhhY3RseQorICAgICAgICAgICAgICBzdXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5MSU5VWCByZXF1aXJlbWVudHM6PC90aXRsZT4KKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBZb3VyIHNjc2kgY2FyZCBtdXN0IGJlIHN1cHBvcnRlZCB1bmRlciBsaW51eC4gVGhpcyB3aWxsCisgICAgICAgICAgICAgIG5vdCB3b3JrIHdpdGggYW4gdW5rbm93biBzY3NpIGNhcmQuIEV2ZW4gZm9yIGNoZWFwJ24KKyAgICAgICAgICAgICAgY3JhcHB5ICJzY2FubmVyIG9ubHkiIGNvbnRyb2xsZXJzIHNvbWUgc3BlY2lhbCBMaW51eAorICAgICAgICAgICAgICBkcml2ZXJzIGV4aXN0IG9uIHRoZSBuZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ29tcGlsZSBnZW5lcmljIHNjc2kgZHJpdmVycyBpbnRvIHlvdXIga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIExpbnV4IGJ5IGRlZmF1bHQgdXNlcyBzbWFsbGVyIHNjc2kgYnVmZmVycyB0aGFuIFdpbmRvd3MuCisgICAgICAgICAgICAgIFRoZXJlIGlzIGEga2VybmVsIGJ1aWxkIGRlZmluZSA8bGl0ZXJhbD5TR19CSUdfQlVGRjwvbGl0ZXJhbD4gKGluCisgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZy5oPC9maWxlbmFtZT4pIHRoYXQgaXMgYnkgZGVmYXVsdCBzZXQgdG9vCisgICAgICAgICAgICAgIGxvdy4gVGhlIFNBTkUgcHJvamVjdCByZWNvbW1lbmRzCisgICAgICAgICAgICAgIDxsaXRlcmFsPjEzMDU2MDwvbGl0ZXJhbD4gYW5kIHRoaXMgc2VlbXMgdG8gd29yayBqdXN0CisgICAgICAgICAgICAgIGZpbmUuIFRoaXMgZG9lcyByZXF1aXJlIGEga2VybmVsIHJlYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgTWFrZSB0aGUgZGV2aWNlcyBmb3IgdGhlIHNjYW5uZXIgKGdlbmVyaWMgc2NzaSBkZXZpY2VzKQorICAgICAgICAgICAgICAtIGxvb2sgYXQgdGhlIHNjc2kgcHJvZ3JhbW1pbmcgaG93LXRvIGZvciBkZXZpY2UKKyAgICAgICAgICAgICAgbnVtYmVyaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEkgd291bGQgcmVjb21tZW5kIG1ha2luZyB0aGUgc2Nhbm5lciBkZXZpY2Ugd3JpdGFibGUgYnkKKyAgICAgICAgICAgICAgYSBncm91cC4gSSBtYWRlIGEgZ3JvdXAgY2FsbGVkCisgICAgICAgICAgICAgIDxsaXRlcmFsPnNjYW5uZXI8L2xpdGVyYWw+IGFuZCBhZGRlZCBteXNlbGYgdG8gaXQuCisgICAgICAgICAgICAgIFJ1bm5pbmcgYXMgcm9vdCBpbmNyZWFzZXMgeW91ciByaXNrIG9mIHNlbmRpbmcgYmFkIHNjc2kKKyAgICAgICAgICAgICAgY29tbWFuZHMgdG8gdGhlIHdyb25nIGRldmljZS4gV2l0aCBhIHJlZ3VsYXIgdXNlciwgeW91CisgICAgICAgICAgICAgIGFyZSBiZXR0ZXIgcHJvdGVjdGVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEFkZCBhIHNjc2kgZGV2aWNlIGVudHJ5IGZvciB5b3VyIHBhcnRpY3VsYXIgc2Nhbm5lciB0bworICAgICAgICAgICAgICB3aW5lLmNvbmYuIFRoZSBmb3JtYXQgaXMgPGxpdGVyYWw+W3Njc2kKKyAgICAgICAgICAgICAgICBjQ3RUZERdPC9saXRlcmFsPiB3aGVyZQorICAgICAgICAgICAgICA8bGl0ZXJhbD5DPWNvbnRyb2xsZXI8L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8bGl0ZXJhbD5UPXRhcmdldDwvbGl0ZXJhbD4sIDxsaXRlcmFsPkQ9TFVOPC9saXRlcmFsPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBJIHNldCBtaW5lIHVwIGFzICBjb250cm9sbGVyIDxsaXRlcmFsPjA8L2xpdGVyYWw+LAorICAgICAgICAgICAgICBUYXJnZXQgPGxpdGVyYWw+NjwvbGl0ZXJhbD4sIExVTiA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorW3Njc2kgYzB0NmQwXQorRGV2aWNlPS9kZXYvc2dpCisgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgIFlvdXJzIHdpbGwgdmFyeSB3aXRoIHlvdXIgcGFydGljdWxhciBTQ1NJIHNldHVwLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5HZW5lcmFsIEluZm9ybWF0aW9uPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG11c3RlayBzY2FubmVyIEkgaGF2ZSB3YXMgc2hpcHBlZCB3aXRoIGEgcGFja2FnZQorICAgICAgICAgICJpcHBsdXMiLiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgVFdBSU4gZHJpdmVyIHNwZWNpZmljYXRpb24KKyAgICAgICAgICB0byBhY2Nlc3Mgc2Nhbm5lcnMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgKFRXQUlOIE1BTkFHRVIpCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoraXBwbHVzLmV4ZSAmbHQ7LS0tPiAoVFdBSU4gSU5URVJGQUNFKSAmbHQ7LS0tPiAoVFdBSU4gREFUQSBTT1VSQ0UgLiBBU1BJKSAtPiBXSU5BU1BJCisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Tk9URVMvQlVHUzwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBiaWdnZXN0IGlzIHRoYXQgaXQgb25seSB3b3JrcyB1bmRlciBsaW51eCBhdCB0aGUgbW9tZW50LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBBU1BJIGNvZGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aDoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBhIE11c3RlayA4MDBTUCB3aXRoIGEgQnVzbG9naWMgY29udHJvbGxlciB1bmRlciBMaW51eCBbQk1dCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgYSBTaWVtZW5zIE5peGRvcmYgOTAzNiB3aXRoIEFkYXB0ZWMgQVZBLTE1MDUgdW5kZXIgTGludXgKKyAgICAgICAgICAgICAgYWNjZXNzZWQgdmlhIERPU0FTUEkuIE5vdGUgdGhhdCBJIGhhZCBjb2xvciBwcm9ibGVtcywKKyAgICAgICAgICAgICAgdGhvdWdoIChiYXJlbHkgcmVhZGFibGUgcmVzdWx0KSBbQU1dCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgYSBGdWppdHN1IE0yNTEzQSBNTyBkcml2ZSAoNjQwTUIpIHVzaW5nIGdlbmVyaWMgc2NzaQorICAgICAgICAgICAgICBkcml2ZXJzLiBGb3JtYXR0aW5nIGFuZCBlamVjdGluZyB3b3JrZWQgcGVyZmVjdGx5LgorICAgICAgICAgICAgICBUaGFua3MgdG8gVXdlIEJvbm5lcyBmb3IgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSAhIFtBTV0KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSSBtYWtlIG5vIHdhcnJhbnR5IHRvIHRoZSBhc3BpIGNvZGUuIEl0IG1ha2VzIG15IHNjYW5uZXIKKyAgICAgICAgICB3b3JrLiBZb3VyIGRldmljZXMgbWF5IGV4cGxvZGUuIEkgaGF2ZSBubyB3YXkgb2YgZGV0ZXJtaW5pbmcKKyAgICAgICAgICB0aGlzLiBJIHRha2UgemVybyByZXNwb25zaWJpbGl0eSEKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCis8L2NoYXB0ZXI+CisKKzwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJ3aW5lLWRvYy5zZ21sIiAiYm9vayIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2ludGVybmFsLWRsbCBiL2RvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzM3ZGUwLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgc29tZSBwb2ludHMgeW91IHNob3VsZCBrbm93IGJlZm9yZSBpbXBsZW1lbnRpbmcgCi10aGUgaW50ZXJuYWwgY291bnRlcnBhcnRzIHRvIGV4dGVybmFsIERMTCdzLiBPbmx5IDMyICBiaXQgRExMJ3MKLWFyZSBjb25zaWRlcmVkLgotCi0xLiBUaGUgTGliTWFpbiBmdW5jdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgaXMgdGhlIHdheSB0byBkbyBzb21lIGluaXRpYWxpemluZyB3aGVuIGEgcHJvY2VzcyBvciB0aHJlYWQgaXMgYXR0YWNoZWQKLXRvIHRoZSBkbGwuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHRha2VuIGZyb20gYSAqLnNwZWMgZmlsZSBsaW5lOgotCi1pbml0ICAgIFlvdXJGdW5jdGlvbk5hbWUKLQotdGhlbiwgeW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBmdW5jdGlvbjoKLQotCi1CT09MMzIgV0lOQVBJIFlvdXJMaWJNYWluKEhJTlNUQU5DRTMyIGhpbnN0RExMLAotCQkJIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoteyBpZiAoZmR3UmVhc29uPT1ETExfUFJPQ0VTU19BVFRBQ0gpCi0gIHsgLi4uCi0gIH0gCi0gIC4uLi4KLX0KLQotCi0yLiBVc2luZyBmdW5jdGlvbnMgZnJvbSBvdGhlciBidWlsdC1pbiBETEwncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBwcm9ibGVtIGhlcmUgaXMsIHRoYXQgeW91IGNhbid0IGtub3cgaWYgeW91IGhhdmUgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZnJvbQotdGhlIGludGVybmFsIG9yIHRoZSBleHRlcm5hbCBETEwuIElmIHlvdSBqdXN0IGNhbGwgdGhlIGZ1bmN0aW9uIHlvdSB3aWxsIGdldAotdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uLiBJZiB0aGUgZXh0ZXJuYWwgRExMIGlzIGxvYWRlZCB0aGUgZXhlY3V0ZWQgcHJvZ3JhbQotd2lsbCB1c2UgdGhlIGV4dGVybmFsIERMTCBhbmQgeW91IHRoZSBpbnRlcm5hbCBvbmUuIAotV2hlbiB5b3UgLWFzIGFuIGV4YW1wbGUtIGZpbGwgYW4gaWNvbmxpc3QgcGxhY2VkIGluIHRoZSBpbnRlcm5hbCBETEwgdGhlCi1hcHBsaWNhdGlvbiB3b24ndCBnZXQgdGhlIGljb25zIGZyb20gdGhlIGV4dGVybmFsIERMTC4KLQotVG8gd29yayBhcm91bmQgdGhpcywgeW91IHNob3VsZCBhbHdheXMgdXNlIGEgcG9pbnRlciB0byBjYWxsIHN1Y2ggZnVuY3Rpb25zOgotCi0vKiBkZWZpbml0aW9uIG9mIHRoZSBwb2ludGVyIHR5cGUqLwotdm9pZCAoQ0FMTEJBQ0sqIHBETExJbml0Q29tY3RsKSgpOwotCi0vKiBnZXR0aW5nIHRoZSBmdW5jdGlvbiBhZGRyZXNzICB0aGlzIHNob3VsZCBiZSBkb25lIGluIHRoZQotIExpYk1haW4gZnVuY3Rpb24gd2hlbiBjYWxsZWQgd2l0aCBETExfUFJPQ0VTU19BVFRBQ0gqLwotIAotQk9PTDMyIFdJTkFQSSBTaGVsbDMyTGliTWFpbihISU5TVEFOQ0UzMiBoaW5zdERMTCwgRFdPUkQgZmR3UmVhc29uLAotCQkJCQkJCSBMUFZPSUQgbHB2UmVzZXJ2ZWQpCi17IEhJTlNUQU5DRTMyIGhDb21jdGwzMjsKLSAgaWYgKGZkd1JlYXNvbj09RExMX1BST0NFU1NfQVRUQUNIKQotICB7IC8qIGxvYWQgdGhlIGV4dGVybmFsIC8gaW50ZXJuYWwgRExMKi8KLSAgICBoQ29tY3RsMzIgPSBMb2FkTGlicmFyeTMyQSgiQ09NQ1RMMzIuRExMIik7IAotICAgIGlmIChoQ29tY3RsMzIpCi0gICAgeyAvKiBnZXQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgICAgIHBETExJbml0Q29tY3RsPUdldFByb2NBZGRyZXNzMzIoaENvbWN0bDMyLCJJbml0Q29tbW9uQ29udHJvbHNFeCIpOwotCi0JICAvKiBjaGVjayBpdCAqLwotICAgICAgaWYgKHBETExJbml0Q29tY3RsKQotICAgICAgeyAvKiB1c2UgaXQgKi8KLSAgICAgICAgcERMTEluaXRDb21jdGwoKTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgLyogZnJlZSB0aGUgRExMIC8gZGVjcmVhc2UgdGhlIHJlZiBjb3VudCAqLwotICAgICAgRnJlZUxpYnJhcnkzMihoQ29tY3RsMzIpOwotICAgIH0KLSAgICBlbHNlCi0gICAgeyAvKiBkbyBzb21lIHBhbmljKi8KLSAgICAgIEVSUihzaGVsbCwiUCBBIE4gSSBDIGVycm9yIGdldHRpbmcgZnVuY3Rpb25wb2ludGVyc1xuIik7Ci0gICAgICBleGl0ICgxKTsKLSAgICB9Ci0gIH0KLSAuLi4uCi0KLTMuIEdldHRpbmcgcmVzb3VyY2VzIGZyb20gYSAqLnJjIGZpbGUgbGlua2VkIHRvIHRoZSBETEwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTwgSWYgeW91IGtub3cgaG93LCB3cml0ZSBzb21lIGxpbmVzPgotCi0KLQotLS0tLS0tLS0tLQotPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vaW50ZXJuYWxzIGIvZG9jdW1lbnRhdGlvbi9pbnRlcm5hbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2JiNjYuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi9pbnRlcm5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTAgKzAsMCBAQAotS0VSTkVMIE1PRFVMRQotPT09PT09PT09PT09PQotCi0uLi4KLQotR0RJIE1PRFVMRQotPT09PT09PT09PQotCi0xLiBYIFdpbmRvd3MgU3lzdGVtIGludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIFggbGlicmFyaWVzIHVzZWQgdG8gaW1wbGVtZW50IFggY2xpZW50cyAoc3VjaCBhcyBXaW5lKSBkbyBub3Qgd29yawotcHJvcGVybHkgaWYgbXVsdGlwbGUgdGhyZWFkcyBhY2Nlc3MgdGhlIHNhbWUgZGlzcGxheSBjb25jdXJyZW50bHkuIEl0IGlzCi1wb3NzaWJsZSB0byBjb21waWxlIHRoZSBYIGxpYnJhcmllcyB0byBwZXJmb3JtIHRoZWlyIG93biBzeW5jaHJvbml6YXRpb24KLShpbml0aWF0ZWQgYnkgY2FsbGluZyBYSW5pdFRocmVhZHMoKSkuIEhvd2V2ZXIsIFdpbmUgZG9lcyBub3QgdXNlIHRoaXMKLWFwcHJvYWNoLiBJbnN0ZWFkIFdpbmUgcGVyZm9ybXMgaXRzIG93biBzeW5jaHJvbml6YXRpb24gcHkgcHV0dGluZyBhCi13cmFwcGVyIGFyb3VuZCBldmVyeSBYIGNhbGwgdGhhdCBpcyB1c2VkLiBUaGlzIHdyYXBwZXIgcHJvdGVjdHMgbGlicmFyeQotYWNjZXNzIHdpdGggYSBjcml0aWNhbCBzZWN0aW9uLCBhbmQgYWxzbyBhcnJhbmdlcyB0aGluZ3Mgc28gdGhhdCBYCi1saWJyYXJpZXMgY29tcGlsZWQgd2l0aG91dCAtRF9SRUVOVFJBTlQgKGVnLiB3aXRoIGdsb2JhbCBlcnJubyB2YXJpYWJsZSkKLXdpbGwgd29yayB3aXRoIFdpbmUuCi0KLVRvIG1ha2UgdGhpcyBzY2hlbWUgd29yaywgYWxsIGNhbGxzIHRvIFggbXVzdCB1c2UgdGhlIHByb3BlciB3cmFwcGVyCi1mdW5jdGlvbnMgKG9yIGRvIHRoZWlyIG93biBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCi13cmFwcGVycykuIFRoZSB3cmFwcGVyIGZvciBhIGZ1bmN0aW9uIFguLi4oKSBpcyBjYWxsZXMgVFNYLi4uKCkgKGZvcgotIlRocmVhZCBTYWZlIFggLi4uIikuIFNvIGZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIGNhbGxpbmcgWE9wZW5EaXNwbGF5KCkKLWluIHRoZSBjb2RlLCBUU1hPcGVuRGlzcGxheSgpIG11c3QgYmUgdXNlZC4gTGlrZXdpc2UsIFggaW5jbHVkZSBmaWxlcwotdGhhdCBjb250YWluIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIHdyYXBwZWQsIHNvIHRoYXQgZWcuICJ0c194dXRpbC5oIgotbXVzdCBiZSBpbmNsdWRlZCByYXRoZXIgdGhhbiA8WDExL1h1dGlsLmg+LiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzCi1zY2hlbWUgaXMgdXNlZCBldmVyeXdoZXJlIHRvIGF2b2lkIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygbm9uZGV0ZXJtaW5pc3RpYwotYW5kIGhhcmQtdG8tZmluZCBlcnJvcnMgaW4gV2luZS4KLQotVGhlIGNvZGUgZm9yIHRoZSB0aHJlYWQgc2FmZSBYIHdyYXBwZXJzIGlzIGNvbnRhaW5lZCBpbiB0aGUgdHN4MTEvCi1kaXJlY3RvcnkgYW5kIGluIGluY2x1ZGUvdHMqLmguIFRvIHVzZSBhIG5ldyAoaWUuIG5vdCBwcmV2aW91c2x5IHVzZWQpIFgKLWZ1bmN0aW9uIGluIFdpbmUsIGEgbmV3IHdyYXBwZXIgbXVzdCBiZSBjcmVhdGVkLiBUaGUgd3JhcHBlcnMgYXJlCi1nZW5lcmF0ZWQgKHNlbWktKWF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgWDExUjYgaW5jbHVkZXMgdXNpbmcgdGhlCi10b29scy9tYWtlX1gxMXdyYXBwZXJzIHBlcmwgc2NyaXB0LiBJbiBzaW1wbGUgY2FzZXMgaXQgc2hvdWxkIGJlIGVub3VnaAotdG8gYWRkIHRoZSBuYW1lIG9mIHRoZSBuZXcgZnVuY3Rpb24gdG8gdGhlIGxpc3QgaW4gdHN4MTEvWDExX2NhbGxzOyBpZgotdGhpcyBkb2VzIG5vdCB3b3JrIHRoZSB3cmFwcGVyIG11c3QgYmUgYWRkZWQgbWFudWFsbHkgdG8gdGhlCi1tYWtlX1gxMXdyYXBwZXJzIHNjcmlwdC4gU2VlIGNvbW1lbnRzIGluIHRzeDExL1gxMV9jYWxscyBhbmQKLXRvb2xzL21ha2VfWDExd3JhcHBlcnMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KLQotCi1VU0VSIE1PRFVMRQotPT09PT09PT09PT0KLQotVVNFUiBpbXBsZW1lbnRzIHdpbmRvd2luZyBhbmQgbWVzc2FnaW5nIHN1YnN5c3RlbXMuIEl0IGFsc28gCi1jb250YWlucyBjb2RlIGZvciBjb21tb24gY29udHJvbHMgYW5kIGZvciBvdGhlciBtaXNjZWxsYW5lb3VzIAotc3R1ZmYgKHJlY3RhbmdsZXMsIGNsaXBib2FyZCwgV05ldCwgZXRjKS4gV2luZSBVU0VSIGNvZGUgaXMgCi1sb2NhdGVkIGluIHdpbmRvd3MvLCBjb250cm9scy8sIGFuZCBtaXNjLyBkaXJlY3Rvcmllcy4KLQotMS4gV2luZG93aW5nIHN1YnN5c3RlbQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICB3aW5kb3dzL3dpbi5jCi0gICB3aW5kb3dzL3dpbnBvcy5jCi0KLSAgIFdpbmRvd3MgYXJlIGFycmFuZ2VkIGludG8gcGFyZW50L2NoaWxkIGhpZXJhcmNoeSB3aXRoIG9uZQotICAgY29tbW9uIGFuY2VzdG9yIGZvciBhbGwgd2luZG93cyAoZGVza3RvcCB3aW5kb3cpLiBFYWNoIHdpbmRvdwotICAgc3RydWN0dXJlIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgaW1tZWRpYXRlIGFuY2VzdG9yIChwYXJlbnQgCi0gICB3aW5kb3cgaWYgV1NfQ0hJTEQgc3R5bGUgYml0IGlzIHNldCksIGEgcG9pbnRlciB0byB0aGUgc2libGluZyAKLSAgIChyZXR1cm5lZCBieSBHZXRXaW5kb3coLi4uLCBHV19ORVhUKSksIGEgcG9pbnRlciB0byB0aGUgb3duZXIgCi0gICB3aW5kb3cgKHNldCBvbmx5IGZvciBwb3B1cCB3aW5kb3cgaWYgaXQgd2FzIGNyZWF0ZWQgd2l0aCB2YWxpZCAKLSAgIGh3bmRQYXJlbnQgcGFyYW1ldGVyKSwgYW5kIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hpbGQKLSAgIHdpbmRvdyAoR2V0V2luZG93KC4uLCBHV19DSElMRCkpLiBBbGwgcG9wdXAgYW5kIG5vbi1jaGlsZCB3aW5kb3dzCi0gICBhcmUgdGhlcmVmb3JlIHBsYWNlZCBpbiB0aGUgZmlyc3QgbGV2ZWwgb2YgdGhpcyBoaWVyYXJjaHkgYW5kIHRoZWlyCi0gICBhbmNlc3RvciBsaW5rICh3bmQtPnBhcmVudCkgcG9pbnRzIHRvIHRoZSBkZXNrdG9wIHdpbmRvdy4KLQotICAgRGVza3RvcCB3aW5kb3cJCQktIHJvb3Qgd2luZG93Ci0gICAgfCAgICAgXCAgICAgIGAtLgotICAgIHwgICAgICBcICAgICAgICBgLS4KLSAgIHBvcHVwIC0+IHduZDEgIC0+ICB3bmQyCQktIHRvcCBsZXZlbCB3aW5kb3dzICAgIAotICAgIHwgICAgICAgXCAgIGAtLiAgICAgIGAtLgotICAgIHwgICAgICAgIFwgICAgIGAtLiAgICAgIGAtLgotICAgY2hpbGQxICBjaGlsZDIgLT4gY2hpbGQzICBjaGlsZDQgICAgIC0gY2hpbGQgd2luZG93cwotICAKLSAgIEhvcml6b250YWwgYXJyb3dzIGRlbm90ZSBzaWJsaW5nIHJlbGF0aW9uc2hpcCwgdmVydGljYWwgbGluZXMKLSAgIC0gYW5jZXN0b3IvY2hpbGQuIFRvIHN1bW1hcml6ZSwgYWxsIHdpbmRvd3Mgd2l0aCB0aGUgc2FtZSBpbW1lZGlhdGUgCi0gICBhbmNlc3RvciBhcmUgc2libGluZyB3aW5kb3dzLCBhbGwgd2luZG93cyB3aGljaCBkbyBub3QgaGF2ZSBkZXNrdG9wIAotICAgYXMgdGhlaXIgaW1tZWRpYXRlIGFuY2VzdG9yIGFyZSBjaGlsZCB3aW5kb3dzLiBQb3B1cCB3aW5kb3dzIGJlaGF2ZQotICAgYXMgdG9wbW9zdCB0b3AtbGV2ZWwgd2luZG93cyB1bmxlc3MgdGhleSBhcmUgb3duZWQuIEluIHRoaXMgY2FzZSB0aGUKLSAgIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGV5IG11c3QgcHJlY2VkZSB0aGVpciBvd25lcnMgaW4gdGhlIHRvcC1sZXZlbCAKLSAgIHNpYmxpbmcgbGlzdCAodGhleSBhcmUgbm90IHRvcG1vc3QpLiBDaGlsZCB3aW5kb3dzIGFyZSBjb25maW5lZCB0byB0aGUKLSAgIGNsaWVudCBhcmVhIG9mIHRoZWlyIHBhcmVudCB3aW5kb3dzIChjbGllbnQgYXJlYSBpcyB3aGVyZSB3aW5kb3cgZ2V0cwotICAgdG8gZG8gaXRzIG93biBkcmF3aW5nLCBub24tY2xpZW50IGFyZWEgY29uc2lzdHMgb2YgY2FwdGlvbiwgbWVudSwgYm9yZGVycywKLSAgIGludHJpbnNpYyBzY3JvbGxiYXJzLCBhbmQgbWluaW1pemUvbWF4aW1pemUvY2xvc2UvaGVscCBidXR0b25zKS4gCi0gIAotICAgQW5vdGhlciBmYWlybHkgaW1wb3J0YW50IGNvbmNlcHQgaXMgInotb3JkZXIiLiBJdCBpcyBkZXJpdmVkIGZyb20KLSAgIHRoZSBhbmNlc3Rvci9jaGlsZCBoaWVyYXJjaHkgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lICJhYm92ZS9iZWxvdyIKLSAgIHJlbGF0aW9uc2hpcC4gRm9yIGluc3RhbmNlLCBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgei1vcmRlciBpcwotICAgY2hpbGQxLT5wb3B1cC0+Y2hpbGQyLT5jaGlsZDMtPnduZDEtPmNoaWxkNC0+d25kMi0+ZGVza3RvcC4gQ3VycmVudCAKLSAgIGFjdGl2ZSB3aW5kb3cgKCJmb3JlZ3JvdW5kIHdpbmRvdyIgaW4gV2luMzIpIGlzIG1vdmVkIHRvIHRoZSBmcm9udAotICAgb2Ygei1vcmRlciB1bmxlc3MgaXRzIHRvcC1sZXZlbCBhbmNlc3RvciBvd25zIHBvcHVwIHdpbmRvd3MuCi0KLSAgIEFsbCB0aGVzZSBpc3N1ZXMgYXJlIGRlYWx0IHdpdGggKG9yIHN1cHBvc2VkIHRvIGJlKSBpbiB3aW5kb3dzL3dpbnBvcy5jIAotICAgd2l0aCBTZXRXaW5kb3dQb3MoKSBiZWluZyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgdG8gdGhlIHdpbmRvdyBtYW5hZ2VyLgotCi0gICBXaW5lIHNwZWNpZmljczogaW4gZGVmYXVsdCBhbmQgbWFuYWdlZCBtb2RlIGVhY2ggdG9wLWxldmVsIHdpbmRvdwotICAgZ2V0cyBpdHMgb3duIFggY291bnRlcnBhcnQgd2l0aCBkZXNrdG9wIHdpbmRvdyBiZWluZyBiYXNpY2FsbHkgYSAKLSAgIGZha2Ugc3R1Yi4gSW4gZGVza3RvcCBtb2RlLCBob3dldmVyLCBvbmx5IGRlc2t0b3Agd2luZG93IGhhcyBhbiBYCi0gICB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIGl0LiBBbHNvLCBTZXRXaW5kb3dQb3MoKSBzaG91bGQgZXZlbnR1YWxseSBiZQotICAgaW1wbGVtZW50ZWQgdmlhIEJlZ2luL0VuZC9EZWZlcldpbmRvd1BvcygpIGNhbGxzIGFuZCBub3QgdGhlIG90aGVyIHdheQotICAgYXJvdW5kLgotCi0gICAxLjEgVmlzaWJsZSByZWdpb24sIGNsaXBwaW5nIHJlZ2lvbiBhbmQgdXBkYXRlIHJlZ2lvbgotCi0gICB3aW5kb3dzL2RjZS5jCi0gICB3aW5kb3dzL3dpbnBvcy5jCi0gICB3aW5kb3dzL3BhaW50aW5nLmMKLQotICAgIF9fX19fX19fX19fX19fX19fX19fX19fXwotICAgfF9fX19fX19fXyAgICAgICAgICAgICAgIHwgIEEgYW5kIEIgYXJlIGNoaWxkIHdpbmRvd3Mgb2YgQwotICAgfCAgICBBICAgIHxfX19fX18gICAgICAgIHwgCi0gICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgfAotICAgfC0tLS0tLS0tLScgICAgICB8ICAgICAgIHwKLSAgIHwgICB8ICAgICAgQiAgICAgfCAgICAgICB8Ci0gICB8ICAgfCAgICAgICAgICAgIHwgICAgICAgfAotICAgfCAgIGAtLS0tLS0tLS0tLS0nICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgQyAgICB8Ci0gICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotCi0gICBWaXNpYmxlIHJlZ2lvbiBkZXRlcm1pbmVzIHdoaWNoIHBhcnQgb2YgdGhlIHdpbmRvdyBpcyBub3Qgb2JzY3VyZWQKLSAgIGJ5IG90aGVyIHdpbmRvd3MuIElmIGEgd2luZG93IGhhcyB0aGUgV1NfQ0xJUENISUxEUkVOIHN0eWxlIHRoZW4gYWxsCi0gICBhcmVhcyBiZWxvdyBpdHMgY2hpbGRyZW4gYXJlIGNvbnNpZGVyZWQgaW52aXNpYmxlLiBTaW1pbGFyaWx5LCBpZgotICAgdGhlIFdTX0NMSVBTSUJMSU5HUyBiaXQgaXMgaW4gZWZmZWN0IHRoZW4gYWxsIGFyZWFzIG9ic2N1cmVkIGJ5IGl0cwotICAgc2libGluZ3MgYXJlIGludmlzaWJsZS4gQ2hpbGQgd2luZG93cyBhcmUgYWx3YXlzIGNsaXBwZWQgYnkgdGhlIAotICAgYm91bmRhcmllcyBvZiB0aGVpciBwYXJlbnQgd2luZG93cy4KLQotICAgQiBoYXMgYSBXU19DTElQU0lCTElOR1Mgc3R5bGU6Ci0gICAuICAgICAgICAgIF9fX19fXyAKLSAgIDogICAgICAgICB8ICAgICAgfAotICAgfCAgICwtLS0tLScgICAgICB8Ci0gICB8ICAgfCAgICAgIEIgICAgIHwgLSB2aXNpYmxlIHJlZ2lvbiBvZiBCCi0gICB8ICAgfCAgICAgICAgICAgIHwKLSAgIDogICBgLS0tLS0tLS0tLS0tJwotICAgIAotICAgV2hlbiB0aGUgcHJvZ3JhbSByZXF1ZXN0cyBhIGRpc3BsYXkgY29udGV4dCAoREMpIGZvciBhIHdpbmRvdyBpdCAKLSAgIGNhbiBzcGVjaWZ5IGFuIG9wdGlvbmFsIGNsaXBwaW5nIHJlZ2lvbiB0aGF0IGZ1cnRoZXIgcmVzdHJpY3RzIHRoZSAKLSAgIGFyZWEgd2hlcmUgdGhlIGdyYXBoaWNzIG91dHB1dCBjYW4gYXBwZWFyLiBUaGlzIGFyZWEgaXMgY2FsY3VsYXRlZCAKLSAgIGFzIGFuIGludGVyc2VjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWdpb24gYW5kIGEgY2xpcHBpbmcgcmVnaW9uLiAKLQotICAgUHJvZ3JhbSBhc2tlZCBmb3IgYSBEQyB3aXRoIGEgY2xpcHBpbmcgcmVnaW9uOgotICAgICAgICAgIF9fX19fXwotICAgICAgLC0tfC0tLiAgIHwgICAgIC4gICAgLC0tLiAKLSAgICwtLSstLScgIHwgICB8ICAgICA6ICAgXzogIHwKLSAgIHwgIHwgICBCIHwgICB8ICA9PiB8ICB8ICAgIHwgLSBEQyByZWdpb24gd2hlcmUgdGhlIHBhaW50aW5nIHdpbGwKLSAgIHwgIHwgICAgIHwgICB8ICAgICB8ICB8ICAgIHwgICBiZSB2aXNpYmxlCi0gICBgLS18LS0tLS18LS0tJyAgICAgOiAgYC0tLS0nCi0gICAgICBgLS0tLS0nCi0KLSAgIFdoZW4gdGhlIHdpbmRvdyBtYW5hZ2VyIGRldGVjdHMgdGhhdCBzb21lIHBhcnQgb2YgdGhlIHdpbmRvdyAKLSAgIGJlY2FtZSB2aXNpYmxlIGl0IGFkZHMgdGhpcyBhcmVhIHRvIHRoZSB1cGRhdGUgcmVnaW9uIG9mIHRoaXMKLSAgIHdpbmRvdyBhbmQgdGhlbiBnZW5lcmF0ZXMgV01fRVJBU0VCS0dORCBhbmQgV01fUEFJTlQgbWVzc2FnZXMuIAotICAgSW4gYWRkaXRpb24sIFdNX05DUEFJTlQgbWVzc2FnZSBpcyBzZW50IHdoZW4gdGhlIHVuY292ZXJlZCBhcmVhIAotICAgaW50ZXJzZWN0cyBhIG5vbmNsaWVudCBwYXJ0IG9mIHRoZSB3aW5kb3cuIEFwcGxpY2F0aW9uIG11c3QgcmVwbHkgCi0gICB0byB0aGUgV01fUEFJTlQgbWVzc2FnZSBieSBjYWxsaW5nIEJlZ2luUGFpbnQoKS9FbmRQYWludCgpIHBhaXIgb2YKLSAgIGZ1bmN0aW9ucy4gQmVnaW5QYWludCgpIHJldHVybnMgYSBEQyB0aGF0IHVzZXMgYWNjdW11bGF0ZWQgdXBkYXRlIAotICAgcmVnaW9uIGFzIGEgY2xpcHBpbmcgcmVnaW9uLiBUaGlzIG9wZXJhdGlvbiBjbGVhbnMgdXAgaW52YWxpZGF0ZWQKLSAgIGFyZWEgYW5kIHRoZSB3aW5kb3cgd2lsbCBub3QgcmVjZWl2ZSBhbm90aGVyIFdNX1BBSU5UIHVudGlsIHRoZQotICAgd2luZG93IG1hbmFnZXIgY3JlYXRlcyBhIG5ldyB1cGRhdGUgcmVnaW9uLgotCi0gICBBIHdhcyBtb3ZlZCB0byB0aGUgbGVmdDoKLSAgICBfX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgLi4uICAgICAgICAgIC8gQyB1cGRhdGUgcmVnaW9uCi0gICB8X19fX19fICAgICAgICAgICAgICAgICAgfCAgICAgOiAgICAgIC5fX18gLwotICAgfCBBICAgIHxfX19fX19fX18gICAgICAgIHwgID0+IHwgICAuLi58X19ffC4uCi0gICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgfCAgICAgfCAgIDogIHwgICB8Ci0gICB8LS0tLS0tJyAgICAgICAgIHwgICAgICAgfCAgICAgfCAgIDogICctLS0nIAotICAgfCAgIHwgICAgICBCICAgICB8ICAgICAgIHwgICAgIHwgICA6ICAgICAgXAotICAgfCAgIHwgICAgICAgICAgICB8ICAgICAgIHwgICAgIDogICAgICAgICAgICBcCi0gICB8ICAgYC0tLS0tLS0tLS0tLScgICAgICAgfCAgICAgICAgICAgICAgICAgICAgQiB1cGRhdGUgcmVnaW9uCi0gICB8ICAgICAgICAgICAgICAgICAgIEMgICAgfAotICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotCi0gICBXaW5kb3dzIG1haW50YWlucyBhIGRpc3BsYXkgY29udGV4dCBjYWNoZSBjb25zaXN0aW5nIG9mIGVudHJpZXMgdGhhdCAKLSAgIGluY2x1ZGUgREMgaXRzZWxmLCB3aW5kb3cgdG8gd2hpY2ggaXQgYmVsb25ncywgYW5kIGFuIG9wdGlvbmFsIGNsaXBwaW5nIAotICAgcmVnaW9uICh2aXNpYmxlIHJlZ2lvbiBpcyBzdG9yZWQgaW4gdGhlIERDIGl0c2VsZikuIFdoZW4gYW4gQVBJIGNhbGwgCi0gICBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93IHRyZWUsIHdpbmRvdyBtYW5hZ2VyIGhhcyB0byBnbyB0aHJvdWdoIAotICAgdGhlIERDIGNhY2hlIHRvIHJlY2FsY3VsYXRlIHZpc2libGUgcmVnaW9ucyBmb3IgZW50cmllcyB3aG9zZSB3aW5kb3dzIAotICAgd2VyZSBpbnZvbHZlZCBpbiB0aGUgb3BlcmF0aW9uLiBEQyBlbnRyaWVzIChEQ0UpIGNhbiBiZSBlaXRoZXIgcHJpdmF0ZQotICAgdG8gdGhlIHdpbmRvdywgb3IgcHJpdmF0ZSB0byB0aGUgd2luZG93IGNsYXNzLCBvciBzaGFyZWQgYmV0d2VlbiBhbGwgCi0gICB3aW5kb3dzIChXaW5kb3dzIDMuMSBsaW1pdHMgdGhlIG51bWJlciBvZiBzaGFyZWQgRENFcyB0byA1KS4KLQotICAgMS4yCi0KLTIuIE1lc3NhZ2luZyBzdWJzeXN0ZW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgd2luZG93cy9xdWV1ZS5jCi0gICB3aW5kb3dzL21lc3NhZ2UuYwotCi0gICBFYWNoIFdpbmRvd3MgdGFzay90aHJlYWQgaGFzIGl0cyBvd24gbWVzc2FnZSBxdWV1ZSAtIHRoaXMgaXMgd2hlcmUKLSAgIGl0IGdldHMgbWVzc2FnZXMgZnJvbS4gTWVzc2FnZXMgY2FuIGJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5Ci0gICAoV01fUEFJTlQsIFdNX05DUEFJTlQsIFdNX1RJTUVSKSwgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgc3lzdGVtCi0gICAoaGFyZHdhcmUgbWVzc2FnZXMpLCB0aGV5IGNhbiBiZSBwb3N0ZWQgYnkgb3RoZXIgdGFza3MvdGhyZWFkcwotICAgKFBvc3RNZXNzYWdlKSwgb3IgdGhleSBjYW4gYmUgc2VudCBieSBvdGhlciB0YXNrcy90aHJlYWRzIChTZW5kTWVzc2FnZSkuCi0gICAKLSAgIE1lc3NhZ2UgcHJpb3JpdHk6Ci0KLSAgIEZpcnN0IHRoZSBzeXN0ZW0gbG9va3MgZm9yIHNlbnQgbWVzc2FnZXMsIHRoZW4gZm9yIHBvc3RlZCBtZXNzYWdlcywKLSAgIHRoZW4gZm9yIGhhcmR3YXJlIG1lc3NhZ2VzLCB0aGVuIGl0IGNoZWNrcyBpZiB0aGUgcXVldWUgaGFzIHRoZQotICAgImRpcnR5IHdpbmRvdyIgYml0IHNldCwgYW5kLCBmaW5hbGx5LCBpdCBjaGVja3MgZm9yIGV4cGlyZWQKLSAgIHRpbWVycy4gU2VlIHdpbmRvd3MvbWVzc2FnZS5jLgotCi0gICBGcm9tIGFsbCB0aGVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMsIG9ubHkgcG9zdGVkIG1lc3NhZ2VzIGdvCi0gICBkaXJlY3RseSBpbnRvIHRoZSBwcml2YXRlIG1lc3NhZ2UgcXVldWUuIFN5c3RlbSBtZXNzYWdlcyAoZXZlbiBpbgotICAgV2luOTUpIGFyZSBmaXJzdCBjb2xsZWN0ZWQgaW4gdGhlIHN5c3RlbSBtZXNzYWdlIHF1ZXVlIGFuZCB0aGVuCi0gICB0aGV5IGVpdGhlciBzaXQgdGhlcmUgdW50aWwgR2V0L1BlZWtNZXNzYWdlIGdldHMgdG8gcHJvY2VzcyB0aGVtCi0gICBvciwgYXMgaW4gV2luOTUsIGlmIHN5c3RlbSBxdWV1ZSBpcyBnZXR0aW5nIGNsb2JiZXJlZCwgYSBzcGVjaWFsCi0gICB0aHJlYWQgKCJyYXcgaW5wdXQgdGhyZWFkIikgYXNzaWducyB0aGVtIHRvIHRoZSBwcml2YXRlCi0gICBxdWV1ZXMuIFNlbnQgbWVzc2FnZXMgYXJlIHF1ZXVlZCBzZXBhcmF0ZWx5IGFuZCB0aGUgc2VuZGVyIHNsZWVwcwotICAgdW50aWwgaXQgZ2V0cyBhIHJlcGx5LiBTcGVjaWFsIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQgb24gdGhlIGZseQotICAgZGVwZW5kaW5nIG9uIHRoZSB3aW5kb3cvcXVldWUgc3RhdGUuIElmIHRoZSB3aW5kb3cgdXBkYXRlIHJlZ2lvbiBpcwotICAgbm90IGVtcHR5LCB0aGUgc3lzdGVtIHNldHMgdGhlIFFTX1BBSU5UIGJpdCBpbiB0aGUgb3duaW5nIHF1ZXVlIGFuZAotICAgZXZlbnR1YWxseSB0aGlzIHdpbmRvdyByZWNlaXZlcyBhIFdNX1BBSU5UIG1lc3NhZ2UgKFdNX05DUEFJTlQgdG9vCi0gICBpZiB0aGUgdXBkYXRlIHJlZ2lvbiBpbnRlcnNlY3RzIHdpdGggdGhlIG5vbi1jbGllbnQgYXJlYSkuIEEgdGltZXIKLSAgIGV2ZW50IGlzIHJhaXNlZCB3aGVuIG9uZSBvZiB0aGUgcXVldWUgdGltZXJzIGV4cGlyZS4gRGVwZW5kaW5nIG9uCi0gICB0aGUgdGltZXIgcGFyYW1ldGVycyBEaXNwYXRjaE1lc3NhZ2UgZWl0aGVyIGNhbGxzIHRoZSBjYWxsYmFjawotICAgZnVuY3Rpb24gb3IgdGhlIHdpbmRvdyBwcm9jZWR1cmUuIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBwZW5kaW5nCi0gICB0aGUgdGFzay90aHJlYWQgc2xlZXBzIHVudGlsIG1lc3NhZ2VzIGFwcGVhci4KLQotICAgVGhlcmUgYXJlIHNldmVyYWwgdHJpY2t5IG1vbWVudHMgKG9wZW4gZm9yIGRpc2N1c3Npb24pIC0gCi0KLSAgICBhKSBTeXN0ZW0gbWVzc2FnZSBvcmRlciBoYXMgdG8gYmUgaG9ub3JlZCBhbmQgbWVzc2FnZXMgc2hvdWxkIGJlCi0gICAgICAgcHJvY2Vzc2VkIHdpdGhpbiBjb3JyZWN0IHRhc2svdGhyZWFkIGNvbnRleHQuIFRoZXJlZm9yZSB3aGVuCi0gICAgICAgR2V0L1BlZWtNZXNzYWdlIGVuY291bnRlcnMgdW5hc3NpZ25lZCBzeXN0ZW0gbWVzc2FnZSBhbmQgdGhpcwotICAgICAgIG1lc3NhZ2UgYXBwZWFycyBub3QgdG8gYmUgZm9yIHRoZSBjdXJyZW50IHRhc2svdGhyZWFkIGl0IHNob3VsZAotICAgICAgIGVpdGhlciBza2lwIGl0IChvciBnZXQgcmlkIG9mIGl0IGJ5IG1vdmluZyBpdCBpbnRvIHRoZSBwcml2YXRlCi0gICAgICAgbWVzc2FnZSBxdWV1ZSBvZiB0aGUgdGFyZ2V0IHRhc2svdGhyZWFkIC0gV2luOTUsIEFGQUlLKSBhbmQKLSAgICAgICBsb29rIGZ1cnRoZXIgb3Igcm9sbCBiYWNrIGFuZCB0aGVuIHlpZWxkIHVudGlsIHRoaXMgbWVzc2FnZQotICAgICAgIGdldHMgcHJvY2Vzc2VkIHdoZW4gc3lzdGVtIHN3aXRjaGVzIHRvIHRoZSBjb3JyZWN0IGNvbnRleHQKLSAgICAgICAoV2luMTYpLiBJbiB0aGUgZmlyc3QgY2FzZSB3ZSBsb3NlIGNvcnJlY3QgbWVzc2FnZSBvcmRlcmluZywgaW4KLSAgICAgICB0aGUgc2Vjb25kIGNhc2Ugd2UgaGF2ZSB0aGUgaW5mYW1vdXMgc3luY2hyb25vdXMgc3lzdGVtIG1lc3NhZ2UKLSAgICAgICBxdWV1ZS4gSGVyZSBpcyBhIHBvc3QgdG8gb25lIG9mIHRoZSBPUy8yIG5ld3Nncm91cCBJIGZvdW5kIHRvCi0gICAgICAgYmUgcmVsZXZhbnQ6Ci0KLQkiIEhlcmUncyB0aGUgcHJvYmxlbSBpbiBhIG51dHNoZWxsLCBhbmQgdGhlcmUgaXMgbm8gZ29vZCBzb2x1dGlvbi4KLQlFdmVyeSBwb3NzaWJsZSBzb2x1dGlvbiBjcmVhdGVzIGEgZGlmZmVyZW50IHByb2JsZW0uCi0KLQlXaXRoIGEgd2luZG93aW5nIHN5c3RlbSwgZXZlbnRzIGNhbiBnbyB0byBtYW55IGRpZmZlcmVudCB3aW5kb3dzLgotCU1vc3QgYXJlIHNlbnQgYnkgYXBwbGljYXRpb25zIG9yIGJ5IHRoZSBPUyB3aGVuIHRoaW5ncyByZWxhdGluZyB0bwotCXRoYXQgd2luZG93IGhhcHBlbiAobGlrZSByZXBhaW50aW5nLCB0aW1lcnMsIGV0Yy4pCi0KLQlNb3VzZSBpbnB1dCBldmVudHMgZ28gdG8gdGhlIHdpbmRvdyB5b3UgY2xpY2sgb24gKHVubGVzcyBzb21lIHdpbmRvdwotCWNhcHR1cmVzIHRoZSBtb3VzZSkuCi0KLQlTbyBmYXIsIG5vIHByb2JsZW0uICBXaGVuZXZlciBhbiBldmVudCBoYXBwZW5zLCB5b3UgcHV0IGEgbWVzc2FnZSBvbgotCXRoZSB0YXJnZXQgd2luZG93J3MgbWVzc2FnZSBxdWV1ZS4gIEV2ZXJ5IHByb2Nlc3MgaGFzIGEgbWVzc2FnZQotCXF1ZXVlLiAgSWYgdGhlIHByb2Nlc3MgcXVldWUgZmlsbHMgdXAsIHRoZSBtZXNzYWdlcyBiYWNrIHVwIG9udG8gdGhlCi0Jc3lzdGVtIHF1ZXVlLgotCi0JVGhpcyBpcyB0aGUgZmlyc3QgY2F1c2Ugb2YgYXBwcyBoYW5naW5nIHRoZSBHVUkuICBJZiBhbiBhcHAgZG9lc24ndAotCWhhbmRsZSBtZXNzYWdlcyBhbmQgdGhleSBiYWNrIHVwIGludG8gdGhlIHN5c3RlbSBxdWV1ZSwgb3RoZXIgYXBwcwotCWNhbid0IGdldCBhbnkgbW9yZSBtZXNzYWdlcy4gIFRoZSByZWFzb24gaXMgdGhhdCB0aGUgbmV4dCBtZXNzYWdlIGluCi0JbGluZSBjYW4ndCBnbyBhbnl3aGVyZSwgYW5kIHRoZSBzeXN0ZW0gd29uJ3Qgc2tpcCBvdmVyIGl0LgotCQotCVRoaXMgY2FuIGJlIGZpeGVkIGJ5IG1ha2luZyBhcHBzIGhhdmUgYmlnZ2VyIHByaXZhdGUgbWVzc2FnZSBxdWV1ZXMuCi0JVGhlIFNJUSBmaXggZG9lcyB0aGlzLiAgUE1RU0laRSBkb2VzIHRoaXMgZm9yIHN5c3RlbXMgd2l0aG91dCB0aGUgU0lRCi0JZml4LiAgQXBwbGljYXRpb25zIGNhbiBhbHNvIHJlcXVlc3QgbGFyZ2UgcXVldWVzIG9uIHRoZWlyIG93bi4KLQotCUFub3RoZXIgc291cmNlIG9mIHRoZSBwcm9ibGVtLCBob3dldmVyLCBoYXBwZW5zIHdoZW4geW91IGluY2x1ZGUKLQlrZXlib2FyZCBldmVudHMuICBXaGVuIHlvdSBwcmVzcyBhIGtleSwgdGhlcmUncyBubyBlYXN5IHdheSB0byBrbm93Ci0Jd2hhdCB3aW5kb3cgdGhlIGtleXN0cm9rZSBtZXNzYWdlIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8uCi0KLQlNb3N0IHdpbmRvd2luZyBzeXN0ZW1zIHVzZSBhIGNvbmNlcHQga25vd24gYXMgImZvY3VzIi4gIFRoZSB3aW5kb3cKLQl3aXRoIGZvY3VzIGdldHMgYWxsIGluY29taW5nIGtleWJvYXJkIG1lc3NhZ2VzLiAgRm9jdXMgY2FuIGJlIGNoYW5nZWQKLQlmcm9tIHdpbmRvdyB0byB3aW5kb3cgYnkgYXBwcyBvciBieSB1c2VycyBjbGlja2luZyBvbiB3aW5vZHdzLgotCi0JVGhpcyBpcyB0aGUgc2Vjb25kIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4gIFN1cHBvc2Ugd2luZG93IEEgaGFzIGZvY3VzLgotCVlvdSBjbGljayBvbiB3aW5kb3cgQiBhbmQgc3RhcnQgdHlwaW5nIGJlZm9yZSB0aGUgd2luZG93IGdldHMgZm9jdXMuCi0JV2hlcmUgc2hvdWxkIHRoZSBrZXlzdHJva2VzIGdvPyAgT24gdGhlIG9uZSBoYW5kLCB0aGV5IHNob3VsZCBnbyB0byBBCi0JdW50aWwgdGhlIGZvY3VzIGFjdHVhbGx5IGNoYW5nZXMgdG8gQi4gIE9uIHRoZSBvdGhlciBoYW5kLCB5b3UKLQlwcm9iYWJseSB3YW50IHRoZSBrZXlzdHJva2VzIHRvIGdvIHRvIEIsIHNpbmNlIHlvdSBjbGlja2VkIHRoZXJlCi0JZmlyc3QuCi0KLQlPUy8yJ3Mgc29sdXRpb24gaXMgdGhhdCB3aGVuIGEgZm9jdXMtY2hhbmdpbmcgZXZlbnQgaGFwcGVucyAobGlrZQotCWNsaWNraW5nIG9uIGEgd2luZG93KSwgT1MvMiBob2xkcyBhbGwgbWVzc2FnZXMgaW4gdGhlIHN5c3RlbSBxdWV1ZQotCXVudGlsIHRoZSBmb2N1cyBjaGFuZ2UgYWN0dWFsbHkgaGFwcGVucy4gIFRoaXMgd2F5LCBzdWJzZXF1ZW50Ci0Ja2V5c3Ryb2tlcyBnbyB0byB0aGUgd2luZG93IHlvdSBjbGlja2VkIG9uLCBldmVuIGlmIGl0IHRha2VzIGEgd2hpbGUKLQlmb3IgdGhhdCB3aW5kb3cgdG8gZ2V0IGZvY3VzLgotCi0JVGhlIGRvd25zaWRlIGlzIHRoYXQgaWYgdGhlIHdpbmRvdyB0YWtlcyBhIHJlYWwgbG9uZyB0aW1lIHRvIGdldCBmb2N1cwotCShtYXliZSBpdCdzIG5vdCBoYW5kbGluZyBldmVudHMsIG9yIG1heWJlIHRoZSB3aW5kb3cgbG9zaW5nIGZvY3VzCi0JaXNuJ3QgaGFuZGxpbmcgZXZlbnRzKSwgZXZlcnl0aGluZyBiYWNrcyB1cCBpbiB0aGUgc3lzdGVtIHF1ZXVlIGFuZAotCXRoZSBzeXN0ZW0gYXBwZWFycyBodW5nLgotCi0JVGhlcmUgYXJlIGEgZmV3IHNvbHV0aW9ucyB0byB0aGlzIHByb2JsZW0uCi0KLQlPbmUgaXMgdG8gbWFrZSBmb2N1cyBwb2xpY3kgYXN5bmNocm9ub3VzLiAgVGhhdCBpcywgZm9jdXMgY2hhbmdpbmcgaGFzCi0JYWJzb2x1dGVseSBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGtleWJvYXJkLiAgSWYgeW91IGNsaWNrIG9uIGEgd2luZG93Ci0JYW5kIHN0YXJ0IHR5cGluZyBiZWZvcmUgdGhlIGZvY3VzIGFjdHVhbGx5IGNoYW5nZXMsIHRoZSBrZXlzdHJva2VzIGdvCi0JdG8gdGhlIGZpcnN0IHdpbmRvdyB1bnRpbCBmb2N1cyBjaGFuZ2VzLCB0aGVuIHRoZXkgZ28gdG8gdGhlIHNlY29uZC4KLQlUaGlzIGlzIHdoYXQgWC13aW5kb3dzIGRvZXMuCi0KLQlBbm90aGVyIGlzIHdoYXQgTlQgZG9lcy4gIFdoZW4gZm9jdXMgY2hhbmdlcywga2V5Ym9hcmQgZXZlbnRzIGFyZSBoZWxkCi0JaW4gdGhlIHN5c3RlbSBtZXNzYWdlIHF1ZXVlLCBidXQgb3RoZXIgZXZlbnRzIGFyZSBhbGxvd2VkIHRocm91Z2guCi0JVGhpcyBpcyAiYXN5bmNocm9ub3VzIiBiZWNhdXNlIHRoZSBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtIHF1ZXVlIGFyZQotCWRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24gcXVldWVzIGluIGEgZGlmZmVyZW50IG9yZGVyIGZyb20gdGhhdAotCXdpdGggd2hpY2ggdGhleSB3ZXJlIHBvc3RlZC4gIElmIGEgYmFkIGFwcCB3b24ndCBoYW5kbGUgdGhlICJsb3NlCi0JZm9jdXMiIG1lc3NhZ2UsIGl0J3Mgb2Ygbm8gY29uc2VxdWVuY2UgLSB0aGUgYXBwIHJlY2VpdmluZyBmb2N1cyB3aWxsCi0JZ2V0IGl0cyAiZ2FpbiBmb2N1cyIgbWVzc2FnZSwgYW5kIHRoZSBrZXlzdHJva2VzIHdpbGwgZ28gdG8gaXQuCi0KLQlUaGUgTlQgc29sdXRpb24gYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBhcHBsaWNhdGlvbiBxdWV1ZSBmaWxsaW5nIHVwCi0JcHJvYmxlbS4gIFNpbmNlIHRoZSBzeXN0ZW0gZGVsaXZlcnMgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHksIG1lc3NhZ2VzCi0Jd2FpdGluZyBpbiB0aGUgc3lzdGVtIHF1ZXVlIHdpbGwganVzdCBzaXQgdGhlcmUgYW5kIHRoZSByZXN0IG9mIHRoZQotCW1lc3NhZ2VzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZWlyIGFwcHMuCi0KLQlUaGUgT1MvMiBTSVEgc29sdXRpb24gaXMgdGhpczogIFdoZW4gYSBmb2N1cy1jaGFuZ2luZyBldmVudCBoYXBwZW5zLAotCWluIGFkZGl0aW9uIHRvIGJsb2NraW5nIGZ1cnRoZXIgbWVzc2FnZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gcXVldWVzLAotCWEgdGltZXIgaXMgc3RhcnRlZC4gIFdoZW4gdGhlIHRpbWVyIGdvZXMgb2ZmLCBpZiB0aGUgZm9jdXMgY2hhbmdlIGhhcwotCW5vdCB5ZXQgaGFwcGVuZWQsIHRoZSBiYWQgYXBwIGhhcyBpdHMgZm9jdXMgdGFrZW4gYXdheSBhbmQgYWxsCi0JbWVzc2FnZXMgdGFyZ2V0dGVkIGF0IHRoYXQgd2luZG93IGFyZSBza2lwcGVkLiAgV2hlbiB0aGUgYmFkIGFwcAotCWZpbmFsbHkgaGFuZGxlcyB0aGUgZm9jdXMgY2hhbmdlIG1lc3NhZ2UsIE9TLzIgd2lsbCBkZXRlY3QgdGhpcyBhbmQKLQlzdG9wIHNraXBwaW5nIGl0cyBtZXNzYWdlcy4KLQotCi0JQXMgZm9yIHRoZSBwcm9zIGFuZCBjb25zOgotCi0JVGhlIFgtd2luZG93cyBzb2x1dGlvbiBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQKLQl1c2VycyBnZW5lcmFsbHkgZG9uJ3QgbGlrZSBoYXZpbmcgdG8gd2FpdCBmb3IgdGhlIGZvY3VzIHRvIGNoYW5nZQotCWJlZm9yZSB0aGV5IHN0YXJ0IHR5cGluZy4gIE9uIG1hbnkgb2NjYXNpb25zLCB5b3UgY2FuIHR5cGUgYW5kIHRoZQotCWNoYXJhY3RlcnMgZW5kIHVwIGluIHRoZSB3cm9uZyB3aW5kb3cgYmVjYXVzZSBzb21ldGhpbmcgKHVzdWFsbHkgaGVhdnkKLQlzeXN0ZW0gbG9hZCkgaXMgcHJldmVudGluZyB0aGUgZm9jdXMgY2hhbmdlIGZyb20gaGFwcGVuaW5nIGluIGEgdGltZWx5Ci0JbWFubmVyLgotCQotCVRoZSBOVCBzb2x1dGlvbiBzZWVtcyBwcmV0dHkgbmljZSwgYnV0IG1ha2luZyB0aGUgc3lzdGVtIG1lc3NhZ2UgcXVldWUKLQlhc3luY2hyb25vdXMgY2FuIGNhdXNlIHNpbWlsYXIgcHJvYmxlbXMgdG8gdGhlIFgtd2luZG93cyBwcm9ibGVtLgotCVNpbmNlIG1lc3NhZ2VzIGNhbiBiZSBkZWxpdmVyZWQgb3V0IG9mIG9yZGVyLCBwcm9ncmFtcyBtdXN0IG5vdCBhc3N1bWUKLQl0aGF0IHR3byBtZXNzYWdlcyBwb3N0ZWQgaW4gYSBwYXJ0aWN1bGFyIG9yZGVyIHdpbGwgYmUgZGVsaXZlcmVkIGluCi0JdGhhdCBzYW1lIG9yZGVyLiAgVGhpcyBjYW4gYnJlYWsgbGVnYWN5IGFwcHMsIGJ1dCBzaW5jZSBXaW4zMiBhbHdheXMKLQloYWQgYW4gYXN5bmNocm9ub3VzIHF1ZXVlLCBpdCBpcyBmYWlyIHRvIHNpbXBseSB0ZWxsIGFwcCBkZXNpZ25lcnMKLQkiZG9uJ3QgZG8gdGhhdCIuICBJdCdzIGhhcmRlciB0byB0ZWxsIGFwcCBkZXNpZ25lcnMgc29tZXRoaW5nIGxpa2UKLQl0aGF0IG9uIE9TLzIgLSB0aGV5J2xsIGNvbXBsYWluICJ5b3UgY2hhbmdlZCB0aGUgcnVsZXMgYW5kIG91ciBhcHBzCi0JYXJlIGJyZWFraW5nLiIKLQkKLQlUaGUgT1MvMiBzb2x1dGlvbidzIHByb2JsZW0gaXMgdGhhdCBub3RoaW5nIGhhcHBlbnMgdW50aWwgeW91IHRyeSB0bwotCWNoYW5nZSB3aW5kb3cgZm9jdXMsIGFuZCB0aGVuIHdhaXQgZm9yIHRoZSB0aW1lb3V0LiAgVW50aWwgdGhlbiwgdGhlCi0JYmFkIGFwcCBpcyBub3QgZGV0ZWN0ZWQgYW5kIG5vdGhpbmcgaXMgZG9uZS4iIChieSBEYXZpZCBDaGFybGFwKQotCQotCi0gICAgYikgSW50ZXJ0YXNrL2ludGVydGhyZWFkIFNlbmRNZXNzYWdlLiBUaGUgc3lzdGVtIGhhcyB0byBpbmZvcm0gdGhlCi0gICAgICAgdGFyZ2V0IHF1ZXVlIGFib3V0IHRoZSBmb3J0aGNvbWluZyBtZXNzYWdlLCB0aGVuIGl0IGhhcyB0byBjYXJyeSAKLSAgICAgICBvdXQgdGhlIGNvbnRleHQgc3dpdGNoIGFuZCB3YWl0IHVudGlsIHRoZSByZXN1bHQgaXMgYXZhaWxhYmxlLiAgCi0gICAgICAgV2luMTYgc3RvcmVzIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIGluIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIHRoZW4gCi0gICAgICAgY2FsbHMgRGlyZWN0ZWRZaWVsZCgpIGZ1bmN0aW9uLiAgSG93ZXZlciwgaW4gV2luMzIgdGhlcmUgY291bGQgYmUgCi0gICAgICAgc2V2ZXJhbCBtZXNzYWdlcyBwZW5kaW5nIHNlbnQgYnkgcHJlZW1wdGl2ZWx5IGV4ZWN1dGluZyB0aHJlYWRzLCAKLSAgICAgICBhbmQgaW4gdGhpcyBjYXNlIFNlbmRNZXNzYWdlIGhhcyB0byBidWlsZCBzb21lIHNvcnQgb2YgbWVzc2FnZSAKLSAgICAgICBxdWV1ZSBmb3Igc2VudCBtZXNzYWdlcy4gQW5vdGhlciBpc3N1ZSBpcyB3aGF0IHRvIGRvIHdpdGggbWVzc2FnZXMgCi0gICAgICAgc2VudCB0byB0aGUgc2VuZGVyIHdoZW4gaXQgaXMgYmxvY2tlZCBpbnNpZGUgaXRzIG93biBTZW5kTWVzc2FnZS4gCi0KLQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHMgYi9kb2N1bWVudGF0aW9uL2lvcG9ydC10cmFjZS1oaW50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzNDE5My4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2lvcG9ydC10cmFjZS1oaW50cworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi1jYXQgPiAvZGV2L251bGwgPDxFT0YKLVRoZSBhYm92ZSBsaW5lIGlzIG5lY2Vzc2FyeSwgbGVhdmUgaXQgYWxvbmUhIQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRE9JTkcgQSBIQVJEV0FSRSBUUkFDRSBJTiBXSU5FCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdG8gcmV2ZXJzZSBlbmdpbmVlciBhIGhhcmR3YXJlIGRldmljZQotZm9yIHdoaWNoIHlvdSBkb24ndCBoYXZlIGRvY3VtZW50YXRpb24sIGJ1dCBjYW4gZ2V0IHRvIHdvcmsgdW5kZXIgV2luZS4KLQotVGhpcyBsb3QgaXMgYWltZWQgYXQgcGFyYWxsZWwgcG9ydCBkZXZpY2VzLCBhbmQgaW4gcGFydGljdWxhciBwYXJhbGxlbCBwb3J0Ci1zY2FubmVycyB3aGljaCBhcmUgbm93IHNvIGNoZWFwIHRoZXkgYXJlIHZpcnR1YWxseSBiZWluZyBnaXZlbiBhd2F5LiBUaGUKLXByb2JsZW0gaXMgdGhhdCBmZXcgbWFudWZhY3R1cmVzIHdpbGwgcmVsZWFzZSBhbnkgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gd2hpY2gKLXByZXZlbnRzIGRyaXZlcnMgYmVpbmcgd3JpdHRlbiBmb3IgU2FuZSwgYW5kIHRoZSB0cmFkaXRpb25hbCB0ZWNobmlxdWUgb2YgdXNpbmcKLURPU2VtdSB0byBwcm9kdWNlIHRoZSB0cmFjZXMgZG9lcyBub3Qgd29yayBhcyB0aGUgc2Nhbm5lcnMgaW52YXJpYWJseSBvbmx5IGhhdmUKLWRyaXZlcnMgZm9yIFdpbmRvd3MuCi0KLVBsZWFzZSBub3RlIHRoYXQgSSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gZ2V0IG15IHNjYW5uZXIgd29ya2luZyBwcm9wZXJseSAoYQotVU1BWCBBc3RyYSA2MDBQKSwgYnV0IGEgY291cGxlIG9mIHBlb3BsZSBoYXZlIHJlcG9ydGVkIHN1Y2Nlc3Mgd2l0aCBhdCBsZWFzdAotdGhlIEFydGVjIEFTNmUgc2Nhbm5lci4gSSBhbSBub3QgaW4gdGhlIHByb2Nlc3Mgb2YgZGV2ZWxvcGluZyBhbnkgZHJpdmVyIG5vciBkbwotSSBpbnRlbmQgdG8sIHNvIGRvbid0IGJ1ZyBtZSBhYm91dCBpdC4gTXkgdGltZSBpcyBub3cgc3BlbnQgd3JpdHRpbmcgcHJvZ3JhbXMKLXRvIHNldCB0aGluZ3MgbGlrZSBiYXR0ZXJ5IHNhdmUgb3B0aW9ucyB1bmRlciBMaW51eCBvbiBUb3NoaWJhIGxhcHRvcHMsIGFucyBhcwotc3VjaCBJIGRvbid0IGhhdmUgYW55IHNwYXJlIHRpbWUgZm9yIHdyaXR0aW5nIGEgZHJpdmVyIGZvciBhIHBhcmFsbGVsIHBvcnQKLXNjYW5uZXIgZXRjLgotCi1QcmVzdW1pbmcgdGhhdCB5b3UgaGF2ZSBjb21waWxlZCBhbmQgaW5zdGFsbGVkIHdpbmUgdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIGlzCi10byBlbmFibGUgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcyB0byB5b3VyIHBhcmFsbGVsIHBvcnQuIFRvIGRvIHRoaXMgZWRpdAotd2luZS5jb25mICh1c3VhbGx5IGluIC91c3IvbG9jYWwvZXRjKSBhbmQgaW4gdGhlIHBvcnRzIHNlY3Rpb24gYWRkIHRoZQotZm9sbG93aW5nIHR3byBsaW5lcwotCi1yZWFkPTB4Mzc4LDB4Mzc5LDB4MzdhLDB4MzdjLDB4NzdhCi13cml0ZT0weDM3OCx4Mzc5LDB4MzdhLDB4MzdjLDB4NzdhCi0KLVRoaXMgYWRkcyB0aGUgbmVjZXNzYXJ5IGFjY2VzcyByZXF1aXJlZCBmb3IgU1BQL1BTMi9FUFAvRUNQIHBhcmFsbGVsIHBvcnQgb24KLUxQVDEuIFlvdSB3aWxsIG5lZWQgdG8gYWRqdXN0IHRoZXNlIG51bWJlciBhY2NvcmRpbmdseSBpZiB5b3VyIHBhcmFsbGVsIHBvcnQgaXMKLW9uIExQVDIgb3IgTFBUMC4KLQotV2hlbiBzdGFydGluZyB3aW5lIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSwgd2hlcmUgWFhYWCBpcyB0aGUgcHJvZ3JhbQoteW91IG5lZWQgdG8gcnVuIGluIG9yZGVyIHRvIGFjY2VzcyB5b3VyIHNjYW5uZXIsIGFuZCBZWVlZIGlzIHRoZSBmaWxlIHlvdXIKLXRyYWNlIHdpbGwgYmUgc3RvcmVkIGluOgotCi0gICAgd2luZSAtZGVidWdtc2cgK2lvIFhYWFggMj4gPihzZWQgJ3MvXlteOl0qOmlvOlteIF0qIC8vJyA+IFlZWVkpCi0KLVlvdSB3aWxsIG5lZWQgbGFyZ2UgYW1vdW50cyBvZiBoYXJkIGRpc2sgc3BhY2UgKHJlYWQgaHVuZHJlZHMgb2YgbWVnYWJ5dGVzIGlmCi15b3UgZG8gYSBmdWxsIHBhZ2Ugc2NhbiksIGFuZCBmb3IgcmVhc29uYWJsZSBwZXJmb3JtYW5jZSBhIHJlYWxseSBmYXN0Ci1wcm9jZXNzb3IgYW5kIGxvdHMgb2YgUkFNLgotCi1Zb3UgbWlnaHQgd2VsbCBmaW5kIHRoZSBsb2cgY29tcHJlc3Npb24gcHJvZ3JhbSB0aGF0IERhdmlkIENhbXBiZWxsCi08Y2FtcGJlbGxAdG9ycXVlLm5ldD4gd3JvdGUgaGVscGZ1bGwgaW4gcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGxvZyBmaWxlcy4KLVRoaXMgY2FuIGJlIG9idGFpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLQotICAgIHNoIGlvcG9ydC10cmFjZS1oaW50cwotCi1UaGlzIHNob3VsZCBleHRyYWN0IHNocmluay5jICh3aGljaCBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLiBDb21waWxlCi10aGUgbG9nIGNvbXByZXNzaW9uIHByb2dyYW0gYnk6Ci0KLSAgICBjYyBzaHJpbmsuYyAtbyBzaHJpbmsKLQotVXNlIHRoZSBzaHJpbmsgcHJvZ3JhbSB0byByZWR1Y2UgdGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIHJhdyBsb2cgYXMgZm9sbG93czoKLQotICAgIGNhdCBsb2cgfCBzaHJpbmsgPiBsb2cyCi0KLVRoZSB0cmFjZSBoYXMgdGhlIGJhc2ljIGZvcm0gb2YKLQotICAgIFhYWFggPiBZWSBAIFpaWlo6WlpaWgotCi13aGVyZSBYWFhYIGlzIHRoZSBwb3J0IGluIGhleGlkZWNpbWFsIGJlaW5nIGFjY2Vzc2VkLCBZWSBpcyB0aGUgZGF0YSB3cml0dGVuCi0ob3IgcmVhZCkgZnJvbSB0aGUgcG9ydCwgYW5kIFpaWlo6WlpaWiBpcyB0aGUgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlCi1pbnN0cnVjdGlvbiB0aGF0IGFjY2Vzc2VkIHRoZSBwb3J0LiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBhcnJvdyBpbmRpY2F0ZXMKLXdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW4gb3IgcmVhZCBmcm9tIHRoZSBwb3J0LgotCi0gICAgPiBkYXRhIHdhcyB3cml0dGVuIHRvIHRoZSBwb3J0Ci0gICAgPCBkYXRhIHdhcyByZWFkIGZyb20gdGhlIHBvcnQKLQotCi1NeSBiYXNpYyB0aXAgZm9yIGludGVycGVyYXRpbmcgdGhlc2UgbG9ncyBpcyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZQotYWRkcmVzc2VzIG9mIHRoZSBJTyBpbnN0cnVjdGlvbnMuIFRoZXJlIGdyb3VwaW5nIGFuZCBzb21ldGltZXMgcHJveGltaXR5IHNob3VsZAotcmV2ZWFsIHRoZSBwcmVzZW5jZSBvZiBzdWJyb3V0aW5lcyBpbiB0aGUgZHJpdmVyLiBCeSBzdHVkeWluZyB0aGUgZGlmZmVyZW50Ci12ZXJzaW9ucyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gd29yayB0aGVtIG91dC4gRm9yIGV4YW1wbGUgY29uc2lkZXIgdGhlCi1mb2xsb3dpbmcgc2VjdGlvbiBvZiB0cmFjZSBmcm9tIG15IFVNQVggQXN0cmEgNjAwUAotCi0gICAgMHgzNzggPiA1NSBAIDAyOTc6MDFlYwotICAgIDB4MzdhID4gMDUgQCAwMjk3OjAxZjUKLSAgICAweDM3OSA8IDhmIEAgMDI5NzowMWZhCi0gICAgMHgzN2EgPiAwNCBAIDAyOTc6MDIxMQotICAgIDB4Mzc4ID4gYWEgQCAwMjk3OjAxZWMKLSAgICAweDM3YSA+IDA1IEAgMDI5NzowMWY1Ci0gICAgMHgzNzkgPCA4ZiBAIDAyOTc6MDFmYQotICAgIDB4MzdhID4gMDQgQCAwMjk3OjAyMTEKLSAgICAweDM3OCA+IDAwIEAgMDI5NzowMWVjCi0gICAgMHgzN2EgPiAwNSBAIDAyOTc6MDFmNQotICAgIDB4Mzc5IDwgOGYgQCAwMjk3OjAxZmEKLSAgICAweDM3YSA+IDA0IEAgMDI5NzowMjExCi0gICAgMHgzNzggPiAwMCBAIDAyOTc6MDFlYwotICAgIDB4MzdhID4gMDUgQCAwMjk3OjAxZjUKLSAgICAweDM3OSA8IDhmIEAgMDI5NzowMWZhCi0gICAgMHgzN2EgPiAwNCBAIDAyOTc6MDIxMQotICAgIDB4Mzc4ID4gMDAgQCAwMjk3OjAxZWMKLSAgICAweDM3YSA+IDA1IEAgMDI5NzowMWY1Ci0gICAgMHgzNzkgPCA4ZiBAIDAyOTc6MDFmYQotICAgIDB4MzdhID4gMDQgQCAwMjk3OjAyMTEKLSAgICAweDM3OCA+IDAwIEAgMDI5NzowMWVjCi0gICAgMHgzN2EgPiAwNSBAIDAyOTc6MDFmNQotICAgIDB4Mzc5IDwgOGYgQCAwMjk3OjAxZmEKLSAgICAweDM3YSA+IDA0IEAgMDI5NzowMjExCi0KLUFzIHlvdSBjYW4gc2VlIHRoZWlyIGlzIGEgcmVwZWF0aW5nIHN0cnVjdHVyZSBzdGFydGluZyBhdCBhZGRyZXNzIDAyOTc6MDFlYwotdGhhdCBjb25zaXN0cyBvZiBmb3VyIGlvIGFjY2VzcyBvbiB0aGUgcGFyYWxsZWwgcG9ydC4gTG9va2luZyBhdCBpdCB0aGUgZmlyc3QKLWlvIGFjY2VzcyB3cml0ZXMgYSBjaGFuZ2luZyBieXRlIHRvIHRoZSBkYXRhIHBvcnQgdGhlIHNlY29uZCBhbHdheXMgd3JpdGVzIHRoZQotYnl0ZSAweDA1IHRvIHRoZSBjb250cm9sIHBvcnQsIHRoZW4gYSB2YWx1ZSB3aGljaCBhbHdheXMgc2VlbXMgdG8gMHg4ZiBpcyByZWFkCi1mcm9tIHRoZSBzdGF0dXMgcG9ydCBhdCB3aGljaCBwb2ludCBhIGJ5dGUgMHgwNCBpcyB3cml0dGVuIHRvIHRoZSBjb250cm9sIHBvcnQuCi1CeSBzdHVkeWluZyB0aGlzIGFuZCBvdGhlciBzZWN0aW9ucyBvZiB0aGUgdHJhY2Ugd2UgY2FuIHdyaXRlIGEgQyByb3V0aW5lIHRoYXQKLWVtdWxhdGVzIHRoaXMsIHNob3duIGJlbG93IHdpdGggc29tZSBtYWNyb3MgdG8gbWFrZSByZWFkaW5nL3dyaXRpbmcgb24gdGhlCi1wYXJhbGxlbCBwb3J0IGVhc2llciB0byByZWFkLgotCi0KLSNkZWZpbmUgcl9kdHIoeCkgICAgICAgIGluYih4KQotI2RlZmluZSByX3N0cih4KSAgICAgICAgaW5iKHgrMSkKLSNkZWZpbmUgcl9jdHIoeCkgICAgICAgIGluYih4KzIpCi0jZGVmaW5lIHdfZHRyKHgseSkgICAgICBvdXRiKHksIHgpCi0jZGVmaW5lIHdfc3RyKHgseSkgICAgICBvdXRiKHksIHgrMSkKLSNkZWZpbmUgd19jdHIoeCx5KSAgICAgIG91dGIoeSwgeCsyKQotCi0vKgotICogU2VlbXMgdG8gYmUgc2VuZGluZyBhIGNvbW1hbmQgYnl0ZSB0byB0aGUgc2Nhbm5lcgotICoKLSAqLwotaW50IHVkcHBfcHV0KGludCB1ZHBwX2Jhc2UsIHVuc2lnbmVkIGNoYXIgY29tbWFuZCkKLXsKLSAgICAgICAgaW50IGxvb3AsdmFsdWU7Ci0KLSAgICAgICAgd19kdHIodWRwcF9iYXNlLCBjb21tYW5kKTsKLSAgICAgICAgd19jdHIodWRwcF9iYXNlLCAweDA1KTsKLQotICAgICAgICBmb3IgKGxvb3A9MDtsb29wPDEwO2xvb3ArKykKLSAgICAgICAgICAgICAgICBpZiAoKCh2YWx1ZT1yX3N0cih1ZHBwX2Jhc2UpKSAmIDB4ODApIT0weDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3X2N0cih1ZHBwX2Jhc2UsIDB4MDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYgMHhmODsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKHZhbHVlICYgMHhmOCkgfCAweDAxOwotfQotCi0KLUZvciB0aGUgVU1BWCBBc3RyYSA2MDBQIG9ubHkgc2V2ZW4gc3VjaCByb3V0aW5lcyBleGlzdCAod2VsbCAxNCByZWFsbHksIHNldmVuCi1mb3IgU1BQIGFuZCBzZXZlbiBmb3IgRVBQKS4gV2hldGhlciB5b3UgY2hvb3NlIHRvIGRpc2Fzc2VtYmxlIHRoZSBkcml2ZXIgYXQKLXRoaXMgcG9pbnQgdG8gdmVyaWZ5IHRoZSByb3V0aW5lcyBpcyB5b3VyIG93biBjaG9pY2UuIElmIHlvdSBkbywgdGhlIGFkZHJlc3MKLWZyb20gdGhlIHRyYWNlIHNob3VsZCBoZWxwIGluIGxvY2F0aW5nIHRoZW0gaW4gdGhlIGRpc2Fzc2VtYmx5LgotCi1Zb3Ugd2lsbCBwcm9iYWJseSB0aGVuIGZpbmQgaXQgdXNlZnVsIHRvIHdyaXRlIGEgc2NyaXB0L3BlcmwvQyBwcm9ncmFtIHRvCi1hbmFseXNlIHRoZSBsb2dmaWxlIGFuZCBkZWNvZGUgdGhlbSBmdXRoZXIgYXMgdGhpcyBjYW4gcmV2ZWFsIGhpZ2hlciBsZXZlbAotZ3JvdXBpbmcgb2YgdGhlIGxvdyBsZXZlbCByb3V0aW5lcy4gRm9yIGV4YW1wbGUgZnJvbSB0aGUgbG9ncyBmcm9tIG15IFVNQVgKLUFzdHJhIDYwMFAgd2hlbiBkZWNvZGVkIGZ1dGhlciByZXZlYWwgKHRoaXMgaXMgYSBzbWFsbCBzbmlwcGV0KQotCi0KLXN0YXJ0OgotcHV0OiA1NSA4ZgotcHV0OiBhYSA4ZgotcHV0OiAwMCA4ZgotcHV0OiAwMCA4ZgotcHV0OiAwMCA4ZgotcHV0OiBjMiA4Zgotd2FpdDogZmYKLWdldDogYWYsODcKLXdhaXQ6IGZmCi1nZXQ6IGFmLDg3Ci1lbmQ6IGNjCi1zdGFydDoKLXB1dDogNTUgOGYKLXB1dDogYWEgOGYKLXB1dDogMDAgOGYKLXB1dDogMDMgOGYKLXB1dDogMDUgOGYKLXB1dDogODQgOGYKLXdhaXQ6IGZmCi0KLUZyb20gdGhpcyBpdCBpcyBlYXN5IHRvIHNlZSB0aGF0IHB1dCByb3V0aW5lIGlzIG9mdGVuIGdyb3VwZWQgdG9nZXRoZXIgaW4gZml2ZQotc3VjY2Vzc2l2ZSBjYWxscyBzZW5kaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBzY2FubmVyLiBPbmNlIHRoZXNlIGFyZSB1bmRlcnN0b29kCi1pdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcHJvY2VzcyB0aGUgbG9ncyBmdXJ0aGVyIHRvIHNob3cgdGhlIGhpZ2hlciBsZXZlbAotcm91dGluZXMgaW4gYW4gZWFzeSB0byBzZWUgZm9ybWF0LiBPbmNlIHRoZSBoaWdoZXN0IGxldmVsIGZvcm1hdCB0aGF0IHlvdQotY2FuIGRlcml2ZSBmcm9tIHRoaXMgcHJvY2VzcyBpcyB1bmRlcnN0b29kLCB5b3UgdGhlbiBuZWVkIHRvIHByb2R1Y2UgYQotc2VyaWVzIG9mIHNjYW5zIHZhcnlpbmcgb25seSBvbmUgcGFyYW1ldGVyIGJldHdlZW4gdGhlbSwgc28geW91IGNhbgotZGlzY292ZXIgaG93IHRvIHNldCB0aGUgdmFyaW91cyBwYXJhbWV0ZXJzIGZvciB0aGUgc2Nhbm5lci4KLQotCi1Kb25hdGhhbiBCdXp6YXJkCi08amFiQGhleC5wcmVzdGVsLmNvLnVrPgotCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgZm9sbG93aW5nIGlzIHRoZSBzaHJpbmsuYyBwcm9ncmFtLgotRU9GCi1jYXQgPiBzaHJpbmsuYyA8PEVPRgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXZvaWQgCi1tYWluICh2b2lkKQotewotICBjaGFyIGJ1ZmZbMjU2XSwgbGFzdGxpbmVbMjU2XTsKLSAgaW50IGNvdW50OwotCi0gIGNvdW50ID0gMDsKLSAgbGFzdGxpbmVbMF0gPSAwOwotCi0gIHdoaWxlICghZmVvZiAoc3RkaW4pKQotICAgIHsKLSAgICAgIGZnZXRzIChidWZmLCBzaXplb2YgKGJ1ZmYpLCBzdGRpbik7Ci0gICAgICBpZiAoc3RyY21wIChidWZmLCBsYXN0bGluZSkgPT0gMCkKLQl7Ci0JICBjb3VudCsrOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBpZiAoY291bnQgPiAxKQotCSAgICBmcHJpbnRmIChzdGRvdXQsICIjIExhc3QgbGluZSByZXBlYXRlZCAlaSB0aW1lcyAjXG4iLCBjb3VudCk7Ci0JICBmcHJpbnRmIChzdGRvdXQsICIlcyIsIGJ1ZmYpOwotCSAgc3RyY3B5IChsYXN0bGluZSwgYnVmZik7Ci0JICAgIGNvdW50ID0gMTsKLQl9Ci0gICAgfQotfQotRU9GCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2tleWJvYXJkIGIvZG9jdW1lbnRhdGlvbi9rZXlib2FyZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjMDMwNS4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2tleWJvYXJkCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLVdpbmUgbm93IG5lZWRzIHRvIGtub3cgYWJvdXQgeW91ciBrZXlib2FyZCBsYXlvdXQuIFRoaXMgcmVxdWlyZW1lbnQgY29tZXMgZnJvbQotYSBuZWVkIGZyb20gbWFueSBhcHBzIHRvIGhhdmUgdGhlIGNvcnJlY3Qgc2NhbmNvZGVzIGF2YWlsYWJsZSwgc2luY2UgdGhleSByZWFkCi10aGVzZSBkaXJlY3RseSwgaW5zdGVhZCBvZiBqdXN0IHRha2luZyB0aGUgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgWCBzZXJ2ZXIuCi1UaGlzIG1lYW5zIHRoYXQgV2luZSBub3cgbmVlZHMgdG8gaGF2ZSBhIG1hcHBpbmcgZnJvbSBYIGtleXMgdG8gdGhlIHNjYW5jb2RlcwotdGhlc2UgYXBwbGljYXRpb25zIGV4cGVjdC4KLQotT24gc3RhcnR1cCwgV2luZSB3aWxsIHRyeSB0byByZWNvZ25pemUgdGhlIGFjdGl2ZSBYIGxheW91dCBieSBzZWVpbmcgaWYgaXQKLW1hdGNoZXMgYW55IG9mIHRoZSBkZWZpbmVkIHRhYmxlcy4gSWYgaXQgZG9lcywgZXZlcnl0aGluZyBpcyBhbGxyaWdodC4gSWYgbm90LAoteW91IG5lZWQgdG8gZGVmaW5lIGl0LgotCi1UbyBkbyB0aGlzLCBvcGVuIHRoZSBmaWxlIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMgYW5kIHRha2UgYSBsb29rIGF0IHRoZQotZXhpc3RpbmcgdGFibGVzLiBNYWtlIGEgYmFja3VwIGNvcHkgb2YgaXQsIGVzcGVjaWFsbHkgaWYgeW91IGRvbid0IHVzZSBDVlMuCi0KLVdoYXQgeW91IHJlYWxseSB3b3VsZCBuZWVkIHRvIGRvLCBpcyB0byBmaW5kIG91dCB3aGljaCBzY2FuY29kZSBlYWNoIGtleSBuZWVkcwotdG8gZ2VuZXJhdGUsIGZpbmQgaXQgaW4gdGhlIG1haW5fa2V5X3NjYW4gdGFibGUsIHdoaWNoIGxvb2tzIGxpa2UgdGhpcwotCi1zdGF0aWMgY29uc3QgaW50IG1haW5fa2V5X3NjYW5bTUFJTl9MRU5dID0KLXsKLS8qIHRoaXMgaXMgbXkgKDEwMi1rZXkpIGtleWJvYXJkIGxheW91dCwgc29ycnkgaWYgaXQgZG9lc24ndCBxdWl0ZSBtYXRjaCB5b3VycyAqLwotICAgMHgyOSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwKLSAgIDB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTksMHgxQSwweDFCLAotICAgMHgxRSwweDFGLDB4MjAsMHgyMSwweDIyLDB4MjMsMHgyNCwweDI1LDB4MjYsMHgyNywweDI4LDB4MkIsCi0gICAweDJDLDB4MkQsMHgyRSwweDJGLDB4MzAsMHgzMSwweDMyLDB4MzMsMHgzNCwweDM1LAotICAgMHg1NiAvKiB0aGUgMTAybmQga2V5IChhY3R1YWxseSB0byB0aGUgcmlnaHQgb2YgbC1zaGlmdCkgKi8KLX07Ci0KLWFuZCB0aGVuIGFzc2lnbiBlYWNoIHNjYW5jb2RlIHRoZSBjaGFyYWN0ZXJzIGltcHJpbnRlZCBvbiB0aGUga2V5Y2Fwcy4gVGhpcwotd2FzIGRvbmUgKHNvcnQgb2YpIGZvciB0aGUgVVMgMTAxLWtleSBrZXlib2FyZCwgd2hpY2ggeW91IGNhbiBmaW5kIG5lYXIgdGhlCi10b3AgaW4ga2V5Ym9hcmQuYy4gSXQgYWxzbyBzaG93cyB0aGF0IGlmIHRoZXJlIGlzIG5vIDEwMm5kIGtleSwgeW91IGNhbiBza2lwCi10aGF0LgotCi1Ib3dldmVyLCBmb3IgbW9zdCBpbnRlcm5hdGlvbmFsIDEwMi1rZXkga2V5Ym9hcmRzLCB3ZSBoYXZlIGRvbmUgaXQgZWFzeSBmb3IgeW91LgotVGhlIHNjYW5jb2RlIGxheW91dCBmb3IgdGhlc2UgYWxyZWFkeSBwcmV0dHkgbXVjaCBtYXRjaGVzIHRoZSBwaHlzaWNhbCBsYXlvdXQKLWluIHRoZSBtYWluX2tleV9zY2FuLCBzbyBhbGwgeW91IG5lZWQgdG8gZG8gaXMgdG8gZ28gdGhyb3VnaCBhbGwgdGhlIGtleXMgdGhhdAotZ2VuZXJhdGUgY2hhcmFjdGVycyBvbiB5b3VyIG1haW4ga2V5Ym9hcmQgKGV4Y2VwdCBzcGFjZWJhciksIGFuZCBzdHVmZiB0aG9zZQotaW50byBhbiBhcHByb3ByaWF0ZSB0YWJsZS4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgdGhlIDEwMm5kIGtleSwgd2hpY2ggaXMKLXVzdWFsbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IGtleSBvZiB0aGUgbGFzdCBsaW5lICh1c3VhbGx5IFopLCBtdXN0IGJlCi1wbGFjZWQgb24gYSBzZXBhcmF0ZSBsaW5lIGFmdGVyIHRoZSBsYXN0IGxpbmUuCi0KLUZvciBleGFtcGxlLCBteSBOb3J3ZWdpYW4ga2V5Ym9hcmQgbG9va3MgbGlrZSB0aGlzCi0KLacgICEgICIgICMgIKQgICUgICYgIC8gICggICkgID0gID8gIGAgIEJhY2stCi18ICAxICAyQCAzoyA0JCA1ICA2ICA3eyA4WyA5XSAwfSArICBctCBzcGFjZQotCi1UYWIgUSAgVyAgRSAgUiAgVCAgWSAgVSAgSSAgTyAgUCAgxSAgXgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKh+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIKLUNhcHMgQSAgUyAgRCAgRiAgRyAgSCAgSiAgSyAgTCAg2CAgxiAgKgotTG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnCi0KLVNoLSA+IFogIFggIEMgIFYgIEIgIE4gIE0gIDsgIDogIF8gIFNoaWZ0Ci1pZnQgPCAgICAgICAgICAgICAgICAgICAgICAsICAuICAtCi0KLUN0cmwgIEFsdCAgICAgICBTcGFjZWJhciAgICAgICBBbHRHciAgQ3RybAotCi0KLU5vdGUgdGhlIDEwMm5kIGtleSwgd2hpY2ggaXMgdGhlICI8PiIga2V5LCB0byB0aGUgbGVmdCBvZiBaLiBUaGUgY2hhcmFjdGVyCi10byB0aGUgcmlnaHQgb2YgdGhlIG1haW4gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgZ2VuZXJhdGVkIGJ5IEFsdEdyLgotCi1UaGlzIGtleWJvYXJkIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQotc3RhdGljIGNvbnN0IGNoYXIgbWFpbl9rZXlfTk9bTUFJTl9MRU5dWzRdID0KLXsKLSAifKciLCIxISIsIjJcIkAiLCIzI6MiLCI0pCQiLCI1JSIsIjYmIiwiNy97IiwiOChbIiwiOSldIiwiMD19IiwiKz8iLCJcXLQiLAotICJxUSIsIndXIiwiZUUiLCJyUiIsInRUIiwieVkiLCJ1VSIsImlJIiwib08iLCJwUCIsIuXFIiwiqF5+IiwKLSAiYUEiLCJzUyIsImREIiwiZkYiLCJnRyIsImhIIiwiakoiLCJrSyIsImxMIiwi+NgiLCLmxiIsIicqIiwKLSAieloiLCJ4WCIsImNDIiwidlYiLCJiQiIsIm5OIiwibU0iLCIsOyIsIi46IiwiLV8iLAotICI8PiIKLX07ICAgCi0KLUV4Y2VwdCB0aGF0ICIgYW5kIFwgbmVlZHMgdG8gYmUgcXVvdGVkIHdpdGggYSBiYWNrc2xhc2gsIGFuZCB0aGF0IHRoZSAxMDJuZAota2V5IGlzIG9uIGEgc2VwYXJhdGUgbGluZSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgotCi1BZnRlciB5b3UgaGF2ZSB3cml0dGVuIHN1Y2ggYSB0YWJsZSwgeW91IG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBtYWluX2tleV90YWJbXQotbGF5b3V0IGluZGV4IHRhYmxlLiBUaGlzIHdpbGwgbG9vayBsaWtlIHRoaXM6Ci0KLXN0YXRpYyBzdHJ1Y3QgewotIFdPUkQgbGFuZywgYW5zaV9jb2RlcGFnZSwgb2VtX2NvZGVwYWdlOwotIGNvbnN0IGNoYXIgKCprZXkpW01BSU5fTEVOXVs0XTsKLX0gbWFpbl9rZXlfdGFiW109ewotLi4uCi0uLi4KLSB7TUFLRUxBTkdJRChMQU5HX05PUldFR0lBTixTVUJMQU5HX0RFRkFVTFQpLCAgMTI1MiwgODY1LCAmbWFpbl9rZXlfTk99LCAgCi0uLi4KLQotQWZ0ZXIgeW91IGhhdmUgYWRkZWQgeW91ciB0YWJsZSwgcmVjb21waWxlIFdpbmUgYW5kIHRlc3QgdGhhdCBpdCB3b3Jrcy4KLUlmIGl0IGZhaWxzIHRvIGRldGVjdCB5b3VyIHRhYmxlLCB0cnkgcnVubmluZwotCi13aW5lIC1kZWJ1Z21zZyAra2V5LCtrZXlib2FyZCA+JiBrZXkubG9nCi0KLWFuZCBsb29rIGluIHRoZSByZXN1bHRpbmcga2V5LmxvZyBmaWxlIHRvIGZpbmQgdGhlIGVycm9yIG1lc3NhZ2VzIGl0Ci1naXZlcyBmb3IgeW91ciBsYXlvdXQuCi0KLU5vdGUgdGhhdCB0aGUgTEFOR18qIGFuZCBTVUJMQU5HXyogZGVmaW5pdGlvbnMgYXJlIGluIGluY2x1ZGUvd2lubmxzLmgsCi13aGljaCB5b3UgbWlnaHQgbmVlZCB0byBrbm93IHRvIGZpbmQgb3V0IHdoaWNoIG51bWJlcnMgeW91ciBsYW5ndWFnZQotaXMgYXNzaWduZWQsIGFuZCBmaW5kIGl0IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQuIFRoZSBudW1iZXJzIHdpbGwKLWJlIFNVQkxBTkcgKiAweDQwMCArIExBTkcsIHNvLCBmb3IgZXhhbXBsZSB0aGUgY29tYmluYXRpb24KLUxBTkdfTk9SV0VHSUFOICgweDE0KSBhbmQgU1VCTEFOR19ERUZBVUxUICgweDEpIHdpbGwgYmUgKGluIGhleCkKLTE0ICsgMSo0MDAgPSA0MTQsIHNvIHNpbmNlIEknbSBOb3J3ZWdpYW4sIEkgY291bGQgbG9vayBmb3IgMDQxNCBpbgotdGhlIGRlYnVnbXNnIG91dHB1dCB0byBmaW5kIG91dCB3aHkgbXkga2V5Ym9hcmQgd29uJ3QgZGV0ZWN0LgotCi1PbmNlIGl0IHdvcmtzLCBzdWJtaXQgaXQgdG8gdGhlIFdpbmUgcHJvamVjdC4gSWYgeW91IHVzZSBDVlMsIHlvdQotd2lsbCBqdXN0IGhhdmUgdG8gZG8KLQotY3ZzIC16MyBkaWZmIC11IHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMgPiBsYXlvdXQuZGlmZgotCi1mcm9tIHlvdXIgbWFpbiBXaW5lIGRpcmVjdG9yeSwgdGhlbiBzdWJtaXQgbGF5b3V0LmRpZmYgdG8KLXdpbmUtcGF0Y2hlc0B3aW5laHEuY29tIGFsb25nIHdpdGggYSBicmllZiBub3RlIG9mIHdoYXQgaXQgaXMuCi0KLUlmIHlvdSBkb24ndCB1c2UgQ1ZTLCB5b3UgbmVlZCB0byBkbwotCi1kaWZmIC11IHRoZV9iYWNrdXBfZmlsZV95b3VfbWFkZSB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jID4gbGF5b3V0LmRpZmYKLQotYW5kIHN1Ym1pdCBpdCBhcyBleHBsYWluZWQgYWJvdmUuCi0KLUlmIHlvdSBkaWQgaXQgcmlnaHQsIGl0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG5leHQgV2luZSByZWxlYXNlLCBhbmQgYWxsCi10aGUgdHJvdWJsZXNvbWUgYXBwbGljYXRpb25zIChlc3BlY2lhbGx5IHJlbW90ZS1jb250cm9sIGFwcGxpY2F0aW9ucykgYW5kCi1nYW1lcyB0aGF0IHVzZSBzY2FuY29kZXMgd2lsbCBiZSBoYXBwaWx5IHVzaW5nIHlvdXIga2V5Ym9hcmQgbGF5b3V0LCBhbmQgeW91Ci13b24ndCBnZXQgdGhvc2UgYW5ub3lpbmcgZml4bWUgbWVzc2FnZXMgZWl0aGVyLgotCi1Hb29kIGx1Y2suCi0KLS1PdmUgS+V2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXMgYi9kb2N1bWVudGF0aW9uL2xhbmd1YWdlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQxZWVjMi4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL2xhbmd1YWdlcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLUFERElORyBMQU5HVUFHRVMgVE8gV0lORQotCi1UaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBuZWNlc3NhcnkgcHJvY2VkdXJlIGZvciBhZGRpbmcgYSBuZXcgbGFuZ3VhZ2UKLXRvIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0aGF0IFdpbmUgY2FuIGRpc3BsYXkgc3lzdGVtIG1lbnVzIGFuZCBmb3JtcwotaW4uIEN1cnJlbnRseSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyBhcmUgc3RpbGwgbWlzc2luZzoKLUJ1bGdhcmlhbiwgQ2hpbmVzZSwgR3JlZWssIEljZWxhbmRpYywgSmFwYW5lc2UsIFJvbWFuaWFuLAotQ3JvYXRpYW4sIFNsb3ZhaywgVHVya2lzaCwgYW5kIFNsb3Zhbmlhbi4KLQotVG8gYWRkIGEgbmV3IGxhbmd1YWdlIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gdHJhbnNsYXRlIHRoZSByZWxhdGl2ZWx5Ci1mZXcgdGV4dHMsIG9mIGNvdXJzZS4gIFlvdSB3aWxsIG5lZWQgdmVyeSBsaXR0bGUga25vd2xlZGdlIG9mCi1wcm9ncmFtbWluZywgc28geW91IGhhdmUgYWxtb3N0IG5vIGV4Y3VzZXMgZm9yIG5vdCBhZGRpbmcgeW91ciBsYW5ndWFnZSwKLXJpZ2h0PyAgV2Ugc2hvdWxkIGVhc2lseSBiZSBhYmxlIHRvIHN1cHBvcnQgMjAgbGFuZ3VhZ2VzIHdpdGhpbiBhIGZldwotbW9udGhzLCBnZXQgZ29pbmchICBBcGFydCBmcm9tIHJlLWNvbXBpbGF0aW9uIGl0J2xsIHRha2UgeW91IGFib3V0IGFuCi1ob3VyIG9yIHR3by4KLQotVG8gYWRkIGEgbmV3IGxhbmd1YWdlIHRvIHRoZSBsaXN0IG9mIGxhbmd1YWdlcyB0aGF0IFdpbmUgY2FuIGhhbmRsZQoteW91IG11c3QuLi4KLQotMC4gIEZpbmQgdGhlIGxhbmd1YWdlIElEIGluIGluY2x1ZGUvd2lubmxzLmggLgotCi0xLiAgTG9vayBpbiBvbGUvb2xlMm5scy5jIGlmIHlvdXIgbGFuZ3VhZ2UgaXMgYWxyZWFkeSBpbmNvcnBvcmF0ZWQgaW4KLSAgICB0aGUgInN0YXRpYyBjb25zdCBzdHJ1Y3QgTkxTX2xhbmdsb2NhbGUiLiBJZiBub3Q6IGZpbmQgdGhlIAotICAgIGFwcHJvcHJpYXRlIGVudHJpZXMgaW4gaW5jbHVkZS93aW5ubHMuaCBhbmQgYWRkIHRoZW0gdG8gdGhlIGxpc3QuCi0KLTIuICBFZGl0IHRoZSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gb2xlL25scy8qLm5scyB0byBmaXQgeW91ciBsb2NhbCAKLSAgICBoYWJpdHMgYW5kIGxhbmd1YWdlLgotCi0zLiAgRWRpdCBkb2N1bWVudGF0aW9uL3dpbmUubWFuLmluIChzZWFyY2ggZm9yIC1sYW5ndWFnZSkgdG8gc2hvdyB0aGUgbmV3Ci0gICAgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgotCi00LiAgRWRpdCBtaXNjL21haW4uYyB2YXJpYWJsZSAiTGFuZ3VhZ2VzIiB0byBjb250YWluIHRoZSBuZXcgbGFuZ3VhZ2UKLSAgICBhYmJyZXZpYXRpb24gYW5kIGxhbmd1YWdlIElELiAgQWxzbyBlZGl0IHN0cnVjdCAib3B0aW9uX3RhYmxlIiBpbgotICAgIG1pc2Mvb3B0aW9ucy5jIHRvIHNob3cgdGhlIG5ldyBhYmJyZXZpYXRpb24uCi0KLTUuICBFZGl0IGluY2x1ZGUvb3B0aW9ucy5oIGVudW0gIldJTkVfTEFOR1VBR0UiIHRvIGhhdmUgYSBtZW1iZXIgY2FsbGVkCi0gICAgTEFOR19YWCB3aGVyZSBYWCBpcyB0aGUgbmV3IGFiYnJldmlhdGlvbi4KLQotNi4gIENyZWF0ZSBhIG5ldyBmaWxlIGRsbHMvY29tbWRsZy9jZGxnX1hYLnJjICh3aGVyZSBYWCBpcyB5b3VyIGxhbmd1YWdlIAotICAgIGFiYnJldmlhdGlvbikgY29udGFpbmluZyBhbGwgbWVudXMuCi0gICAgWW91ciBiZXN0IGJldCBpcyB0byBjb3B5IGNkbGdfRW4ucmMgYW5kIHN0YXJ0IHRyYW5zbGF0aW5nLiAgCi0gICAgVGhlcmUgaXMgbm8gcmVhbCBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsCi0gICAgYXMgeW91IG9ubHkgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHRleHQgd2l0aGluIHF1b3Rlcy4gCi0KLSAgICBJbiBtZW51cywgdGhlIGNoYXJhY3RlciAiJiIgbWVhbnMgdGhhdCB0aGUgbmV4dCBjaGFyYWN0ZXIgd2lsbAotICAgIGJlIGhpZ2hsaWdodGVkIGFuZCB0aGF0IHByZXNzaW5nIHRoYXQgbGV0dGVyIHdpbGwgc2VsZWN0IHRoZSBpdGVtLgotICAgIFlvdSBzaG91bGQgcGxhY2UgdGhlc2UgIiYicyBzdWl0YWJseSBmb3IgeW91ciBsYW5ndWFnZSwgbm90IGp1c3QKLSAgICBjb3B5IHRoZSBwb3NpdGlvbnMgZnJvbSAoc2F5KSBFbmdsaXNoLiAgSW4gcGFydGljdWxhciwgaXRlbXMgd2l0aGluCi0gICAgb25lIG1lbnUgc2hvdWxkIGhhdmUgZGlmZmVyZW50IGhpZ2hsaWdodGVkIGxldHRlcnMuCi0KLTcuICBFZGl0IGRsbHMvY29tbWRsZy9yc3JjLnJjIHRvIGNvbnRhaW4gYW4gaW5jbHVkZSBzdGF0ZW1lbnQgZm9yIHlvdXIKLSAgICBjZGxnX1hYLnJjIGZpbGUuCi0KLTguICBSZXBlYXQgc3RlcHMgNiBhbmQgNyBhZ2FpbiBmb3I6Ci0gICAgLSBkbGxzL3NoZWxsMzIvc2hlbGwzMl9YWC5yYyAgYW5kIHNocmVzLnJjCi0gICAgLSByZXNvdXJjZXMvc3lzcmVzX1hYLnJjICAgICAgYW5kIHVzZXIzMi5yYwotCi05LiAgUmUtY29uZmlndXJlLCByZS1tYWtlIGRlcGVuZGVuY2llcywgYW5kIHJlLW1ha2UgV2luZS4KLQotMTAuIENoZWNrIHlvdXIgbmV3IG1lbnVzIGFuZCBmb3Jtczsgd2hlbiB0aGV5J3JlIG5vdCBvaywKLSAgICBnbyBiYWNrIHRvIDYpIGFuZCBhZGFwdCB0aGUgc2l6ZXMsIGV0Yy4KLSAgICAKLTExLiBTZXZlcmFsIG9mIHRoZSB3aW5lbGliIGJhc2VkIHByb2dyYW1zIGluIHRoZSBzdWJkaXJlY3RvcnkgcHJvZ3JhbXMKLSAgICBhbHNvIGhhdmUgaW50ZXJuYXRpb25hbGlzYXRpb24gc3VwcG9ydC4gU2VlIHRoZSBhcHByb3ByaWF0ZSBmaWxlcwotICAgIHRoZXJlIGZvciByZWZlcmVuY2UuCi0KLTEyLiBFZGl0IC9kb2N1bWVudGF0aW9uL2ludGVybmF0aW9uYWxpc2F0aW9uIHRvIHNob3cgdGhlIG5ldyBzdGF0dXMuCi0KLTEzLiBTdWJtaXQgcGF0Y2hlcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBuZXh0IFdpbmUgcmVsZWFzZSwgCi0gICAgc2VlIGZpbGUgLi9BTk5PVU5DRSBmb3IgZGV0YWlscyBhYm91dCB3aGVyZSB0byBzdWJtaXQuCi0KLQotSmFudWFyeSAxOTk2Ci1Nb3J0ZW4gV2VsaW5kZXIKLQotW0kgaG9wZSBJIGdvdCBhbGwgdGhlIHBsYWNlcyB3aGVyZSBjaGFuZ2VzIGFyZSBuZWVkZWQuICBJZiB5b3Ugc2VlIGFueQotcGxhY2UgbWlzc2luZyBmcm9tIHRoZSBhYm92ZSBsaXN0LCBzdWJtaXQgYSBwYXRjaCB0byB0aGlzIGZpbGUgcGxlYXNlLgotQWxzbyBub3RlIHRoYXQgcmUtb3JnYW5pemF0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSBtaWdodCBjaGFuZ2UgdGhlIGxpc3QKLW9mIHBsYWNlcy5dCi0KLVRoZXJlZm9yZSByZXZpc2VkIEZlYnJ1YXJpIDE5OTkgYnkgS2xhYXMgdmFuIEdlbmQKLVJldmlzZWQgYWdhaW4gTWF5IDIzLCAxOTk5LCBLbGFhcyB2YW4gR2VuZAotVXBkYXRlZCBNYXkgMjYsIDIwMDAsIFpvcmFuIER6ZWxhamxpamEKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vbGludXgtZmF0LXBlcm1pc3Npb25zIGIvZG9jdW1lbnRhdGlvbi9saW51eC1mYXQtcGVybWlzc2lvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NmFkZTcuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi9saW51eC1mYXQtcGVybWlzc2lvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IEZBVCBhbmQgVkZBVCBmaWxlIHN5c3RlbSBwZXJtaXNzaW9ucyB3b3JrCi1pbiBMaW51eCB3aXRoIGEgZm9jdXMgb24gY29uZmlndXJpbmcgdGhlbSBmb3IgV2luZS4KLQotSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLS0KLUxpbnV4IGlzIGFibGUgdG8gYWNjZXNzIERPUyBhbmQgV2luZG93cyBmaWxlIHN5c3RlbXMgdXNpbmcgZWl0aGVyIHRoZQotRkFUIChvbGRlciA4LjMgRE9TIGZpbGVzeXN0ZW1zKSBvciBWRkFUIChuZXdlciBXaW5kb3dzIDk1IG9yIGxhdGVyCi1sb25nIGZpbGVuYW1lIGZpbGVzeXN0ZW1zKSBtb2R1bGVzLiAgTW91bnRlZCBGQVQgb3IgVkZBVCBmaWxlc3lzdGVtcwotcHJvdmlkZSB0aGUgcHJpbWFyeSBtZWFucyBmb3Igd2hpY2ggZXhpc3RpbmcgYXBwbGljYXRpb25zIGFuZCB0aGVpcgotZGF0YSBhcmUgYWNjZXNzZWQgdGhyb3VnaCBXaW5lIGZvciBkdWFsIGJvb3QgKExpbnV4ICsgV2luZG93cykKLXN5c3RlbXMuCi0KLVdpbmUgbWFwcyBtb3VudGVkIEZBVCBmaWxlc3lzdGVtcywgc3VjaCBhcyAiL2MiLCB0byBkcml2ZXIgbGV0dGVycywKLXN1Y2ggYXMgImM6IiwgYXMgaW5kaWNhdGVkIGJ5IHRoZSB3aW5lLmNvbmYgZmlsZS4gIFRoZSBmb2xsb3dpbmcKLWV4Y2VycHQgZnJvbSBhIHdpbmUuY29uZiBmaWxlIGRvZXMgdGhpczoKLSAgICBbRHJpdmUgQ10KLSAgICBQYXRoPS9jCi0gICAgVHlwZT1oZAotCi1BbHRob3VnaCBWRkFUIGZpbGVzeXN0ZW1zIGFyZSBwcmVmZXJhYmxlIHRvIEZBVCBmaWxlc3lzdGVtcyBmb3IgdGhlaXIKLWxvbmcgZmlsZW5hbWUgc3VwcG9ydCB0aGUgdGVybSAiRkFUIiB3aWxsIGJlIHVzZWQgdGhyb3VnaG91dCB0aGUKLXJlbWFpbmRlciBvZiB0aGlzIGRvY3VtZW50IHRvIHJlZmVyIHRvIEZBVCBmaWxlc3lzdGVtcyBhbmQgdGhlaXIKLWRlcml2YXRpdmVzLiAgQWxzbywgIi9jIiB3aWxsIGJlIHVzZWQgYXMgdGhlIEZBVCBtb3VudCBwb2ludCBpbgotZXhhbXBsZXMgdGhyb3VnaG91dCB0aGlzIGRvY3VtZW50LgotCi1Nb3N0IG1vZGVybiBMaW51eCBkaXN0cmlidXRpb25zIGVpdGhlciBkZXRlY3Qgb3IgYWxsb3cgZXhpc3RpbmcgRkFUCi1maWxlIHN5c3RlbXMgdG8gYmUgY29uZmlndXJlZCBzbyB0aGF0IGNhbiBiZSBtb3VudGVkLCBpbiBhIGxvY2F0aW9uCi1zdWNoIGFzIC9jLCBlaXRoZXIgcGVyc2lzdGVudGx5IChvbiBib290dXApIG9yIG9uIGFuIGFzIG5lZWRlZCBiYXNpcy4KLUluIGVpdGhlciBjYXNlLCBieSBkZWZhdWx0LCB0aGUgcGVybWlzc2lvbnMgd2lsbCBwcm9iYWJseSBiZSBjb25maWd1cmVkCi1zbyB0aGF0IHRoZXkgbG9vayBzb21ldGhpbmcgbGlrZToKLSAgICB+PmNkIC9jCi0gICAgL2M+bHMgLWwKLSAgICAtcnd4ci14ci14ICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0Ci0gICAgLXJ3eHIteHIteCAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAyNDUgT2N0IDEwIDE3OjU4IGNvbmZpZy5zeXMKLSAgICBkcnd4ci14ci14ICA0MSByb290ICAgICByb290ICAgICAgICAxNjM4NCBEZWMgMzAgIDE5OTggd2luZG93cwotd2hlcmUgYWxsIHRoZSBmaWxlcyBhcmUgb3duZWQgYnkgInJvb3QiLCBhcmUgaW4gdGhlICJyb290IiBncm91cCBhbmQKLWFyZSBvbmx5IHdyaXRhYmxlIGJ5ICJyb290IiAoNzU1IHBlcm1pc3Npb25zKS4gIFRoaXMgaXMgcmVzdHJpY3RpdmUgaW4KLXRoYXQgaXQgcmVxdWlyZXMgdGhhdCBXaW5lIGJlIHJ1biBhcyByb290IGluIG9yZGVyIGZvciBhcHBsaWNhdGlvbnMgdG8KLWJlIGFibGUgdG8gd3JpdGUgdG8gYW55IHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0uCi0KLVRoZXJlIHRocmVlIG1ham9yIGFwcHJvYWNoZXMgdG8gb3ZlcmNvbWluZyB0aGUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMKLW1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoOgotICAgIDEpIFJ1biBXaW5lIGFzIHJvb3QKLSAgICAyKSBNb3VudCB0aGUgRkFUIGZpbGVzeXN0ZW0gd2l0aCBsZXNzIHJlc3RyaWN0aXZlIHBlcm1pc3Npb25zCi0gICAgMykgU2hhZG93IHRoZSBGQVQgZmlsZXN5c3RlbSBieSBjb21wbGV0ZWx5IG9yIHBhcnRpYWxseSBjb3B5aW5nIGl0Ci1FYWNoIGFwcHJvYWNoIHdpbGwgYmUgZGlzY3Vzc2VzIGluIHRoZSBmb2xsb3dpbmcgIlJ1bm5pbmcgV2luZSBhcwotcm9vdCIsICJNb3VudGluZyBGQVQgZmlsZXN5c3RlbXMiIGFuZCAiU2hhZG93aW5nIEZBVCBmaWxlc3lzdGVtcyIKLXNlY3Rpb25zLgotCi1SdW5uaW5nIFdpbmUgYXMgcm9vdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJ1bm5pbmcgV2luZSBhcyByb290IGlzIHRoZSBlYXNpZXN0IGFuZCBtb3N0IHRob3JvdWdoIHdheSBvZiBnaXZpbmcKLWFwcGxpY2F0aW9ucyB0aGF0IFdpbmUgcnVucyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIEZBVCBmaWxlcyBzeXN0ZW1zLgotUnVubmluZyB3aW5lIGFzIHJvb3QgYWxzbyBhbGxvd3MgYXBwbGljYXRpb25zIHRvIGRvIHRoaW5ncyB1bnJlbGF0ZWQKLXRvIEZBVCBmaWxlc3lzdGVtcywgc3VjaCBhcyBsaXN0ZW5pbmcgdG8gcG9ydHMgdGhhdCBhcmUgbGVzcyB0aGFuCi0xMDI0LiAgUnVubmluZyBXaW5lIGFzIHJvb3QgaXMgZGFuZ2Vyb3VzIHNpbmNlIHRoZXJlIGlzIG5vIGxpbWl0IHRvCi13aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gZG8gdG8gdGhlIHN5c3RlbS4KLQotTW91bnRpbmcgRkFUIGZpbGVzeXN0ZW1zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB3aXRoIHBlcm1pc3Npb25zIGxlc3MgcmVzdHJpY3RpdmUKLXRoYW4gdGhlIGRlZmF1bHQuICBUaGlzIGNhbiBiZSBkb25lIGJ5IGVpdGhlciBjaGFuZ2luZyB0aGUgdXNlciB0aGF0Ci1tb3VudHMgdGhlIEZBVCBmaWxlc3lzdGVtIG9yIGJ5IGV4cGxpY2l0bHkgY2hhbmdpbmcgdGhlIHBlcm1pc3Npb25zCi10aGF0IHRoZSBGQVQgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGguICBUaGUgcGVybWlzc2lvbnMgYXJlCi1pbmhlcml0ZWQgZnJvbSB0aGUgcHJvY2VzcyB0aGF0IG1vdW50cyB0aGUgRkFUIGZpbGVzeXN0ZW0uICBTaW5jZSB0aGUKLXByb2Nlc3MgdGhhdCBtb3VudHMgdGhlIEZBVCBmaWxlc3lzdGVtIGlzIHVzdWFsbHkgYSBzdGFydHVwIHNjcmlwdAotcnVubmluZyBhcyByb290IHRoZSBGQVQgZmlsZXN5c3RlbSBpbmhlcml0cyByb290J3MgcGVybWlzc2lvbnMuICBUaGlzCi1yZXN1bHRzIGluIHRoZSBmaWxlcyBvbiB0aGUgRkFUIGZpbGVzeXN0ZW0gaGF2aW5nIHBlcm1pc3Npb25zIHNpbWlsYXIKLXRvIGZpbGVzIGNyZWF0ZWQgYnkgcm9vdC4gIEZvciBleGFtcGxlOgotICAgIH4+d2hvYW1pCi0gICAgcm9vdAotICAgIH4+dG91Y2ggcm9vdF9maWxlCi0gICAgfj5scyAtbCByb290X2ZpbGUKLSAgICAtcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBEZWMgMTAgMDA6MjAgcm9vdF9maWxlCi0KLXdoaWNoIG1hdGNoZXMgdGhlIG93bmVyLCBncm91cCBhbmQgcGVybWlzc2lvbnMgb2YgZmlsZXMgc2VlbiBvbiB0aGUKLUZBVCBmaWxlc3lzdGVtIGV4Y2VwdCBmb3IgdGhlIG1pc3NpbmcgJ3gncy4gIFRoZSBwZXJtaXNzaW9ucyBvbiB0aGUKLUZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjaGFuZ2VkIGJ5IGNoYW5naW5nIHJvb3QncyB1bWFzayAodW5zZXQKLXBlcm1pc3Npb25zIGJpdHMpLiAgRm9yIGV4YW1wbGU6Ci0gICAgfj51bW91bnQgL2MKLSAgICB+PnVtYXNrCi0gICAgMDIyCi0gICAgfj51bWFzayAwNzMKLSAgICB+Pm1vdW50IC9jCi0gICAgfj5jZCAvYwotICAgIC9jPmxzIC1sCi0gICAgLXJ3eC0tLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAotICAgIC1yd3gtLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMjQ1IE9jdCAxMCAxNzo1OCBjb25maWcuc3lzCi0gICAgZHJ3eC0tLXItLSAgNDEgcm9vdCAgICAgcm9vdCAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3MKLU1vdW50aW5nIHRoZSBGQVQgZmlsZXN5c3RlbSB3aXRoIGEgdW1hc2sgb2YgMDAwIGdpdmVzIGFsbCB1c2VycwotY29tcGxldGUgY29udHJvbCBvdmVyIHRoZSBpdC4KLUV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIEZBVCBmaWxlc3lzdGVtIHdoZW4gaXQgaXMKLW1vdW50ZWQgcHJvdmlkZXMgYWRkaXRpb25hbCBjb250cm9sLiAgVGhlcmUgYXJlIHRocmVlIG1vdW50IG9wdGlvbnMKLXRoYXQgYXJlIHJlbGV2YW50IHRvIEZBVCBwZXJtaXNzaW9uczogInVpZCIsICJnaWQiIGFuZCAidW1hc2siLiAgVGhleQotY2FuIGVhY2ggYmUgc3BlY2lmaWVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgbWFudWFsbHkgbW91bnRlZC4gIEZvcgotZXhhbXBsZToKLSAgICB+PnVtb3VudCAvYwotICAgIH4+bW91bnQgLW8gdWlkPTUwMCAtbyBnaWQ9NTAwIC1vIHVtYXNrPTAwMiAvYwotICAgIH4+Y2QgL2MKLSAgICAvYz5scyAtbAotICAgIC1yd3hyd3hyLXggICAxIHNsZSAgICAgIHNsZSAgICAgICAgICAgIDkxIE9jdCAxMCAxNzo1OCBhdXRvZXhlYy5iYXQKLSAgICAtcnd4cnd4ci14ICAgMSBzbGUgICAgICBzbGUgICAgICAgICAgIDI0NSBPY3QgMTAgMTc6NTggY29uZmlnLnN5cwotICAgIGRyd3hyd3hyLXggIDQxIHNsZSAgICAgIHNsZSAgICAgICAgIDE2Mzg0IERlYyAzMCAgMTk5OCB3aW5kb3dzCi13aGljaCBnaXZlcyAic2xlIiBjb21wbGV0ZSBjb250cm9sIG92ZXIgL2MuICBUaGUgb3B0aW9ucyBsaXN0ZWQgYWJvdmUKLWNhbiBiZSBtYWRlIHBlcm1hbmVudCBieSBhZGRpbmcgdGhlbSB0byB0aGUgL2V0Yy9mc3RhYiBmaWxlOgotICAgIH4+Z3JlcCAvYyAvZXRjL2ZzdGFiCi0gICAgL2Rldi9oZGExICAvYyAgdmZhdCAgdWlkPTUwMCxnaWQ9NTAwLHVtYXNrPTAwMixleGVjLGRldixzdWlkLHJ3IDEgMQotTm90ZSB0aGF0IHRoZSB1bWFzayBvZiAwMDIgaXMgY29tbW9uIGluIHRoZSB1c2VyIHByaXZhdGUgZ3JvdXAgZmlsZQotcGVybWlzc2lvbiBzY2hlbWUuICBPbiBGQVQgZmlsZSBzeXN0ZW1zIHRoaXMgdW1hc2sgYXNzdXJlcyB0aGF0IGFsbAotZmlsZXMgYXJlIGZ1bGx5IGFjY2Vzc2libGUgYnkgYWxsIHVzZXJzIGluIHRoZSBzcGVjaWZpZWQgZ3JvdXAgKGdpZCkuCi0KLVNoYWRvd2luZyBGQVQgZmlsZXN5c3RlbXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVNoYWRvd2luZyBwcm92aWRlcyBhIGZpbmVyIGdyYW51bGFyaXR5IG9mIGNvbnRyb2wuICBQYXJ0cyBvZiB0aGUKLW9yaWdpbmFsIEZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjb3BpZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuCi1zYWZlbHkgd29yayB3aXRoIHRob3NlIGNvcGllZCBwYXJ0cyB3aGlsZSB0aGUgYXBwbGljYXRpb24gY29udGludWUgdG8KLWRpcmVjdGx5IHJlYWQgdGhlIHJlbWFpbmluZyBwYXJ0cy4gIFRoaXMgaXMgZG9uZSB3aXRoIHN5bWJvbGljIGxpbmtzLgotRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgc3lzdGVtIHdoZXJlIGFuIGFwcGxpY2F0aW9uIG5hbWVkICJBbkFwcCIgbXVzdAotYmUgYWJsZSB0byByZWFkIGFuZCB3cml0ZSB0byB0aGUgYzpcd2luZG93cyBhbmQgYzpcQW5BcHAgZGlyZWN0b3JpZXMKLWFzIHdlbGwgYXMgaGF2ZSByZWFkIGFjY2VzcyB0byB0aGUgZW50aXJlIEZBVCBmaWxlc3lzdGVtLiAgT24gdGhpcwotc3lzdGVtIHRoZSBGQVQgZmlsZXN5c3RlbSBoYXMgZGVmYXVsdCBwZXJtaXNzaW9ucyB3aGljaCBzaG91bGQgbm90IGJlCi1jaGFuZ2VkIGZvciBzZWN1cml0eSByZWFzb25zIG9yIGNhbiBub3QgYmUgY2hhbmdlZCBkdWUgdG8gbGFjayBvZiByb290Ci1hY2Nlc3MuICBPbiB0aGlzIHN5c3RlbSBhIHNoYWRvdyBkaXJlY3RvcnkgbWlnaHQgYmUgc2V0IHVwIGluIHRoZQotZm9sbG93aW5nIG1hbm5lcjoKLSAgICB+PmNkIC8KLSAgICAvPm1rZGlyIGNfc2hhZG93Ci0gICAgLz5jZCBjX3NoYWRvdwotICAgIC9jX3NoYWRvdz5sbiAtcyAvY18vKiAuCi0gICAgL2Nfc2hhZG93PnJtIHdpbmRvd3MgQW5BcHAKLSAgICAvY19zaGFkb3c+Y3AgLVIgL2NfL3t3aW5kb3dzLEFuQXBwfSAuCi0gICAgL2Nfc2hhZG93PmNobW9kIC1SIDc3NyB3aW5kb3dzIEFuQXBwCi0gICAgL2Nfc2hhZG93PnBlcmwgLXAgLWkgLWUgJ3N8L2MkfC9jX3NoYWRvd3xnJyAvdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmYKLVRoZSBhYm92ZSBnaXZlcyBldmVyeW9uZSBjb21wbGV0ZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlCi0id2luZG93cyIgYW5kICJBbkFwcCIgZGlyZWN0b3JpZXMgd2hpbGUgb25seSByb290IGhhcyB3cml0ZSBhY2Nlc3MgdG8KLWFsbCBvdGhlciBkaXJlY3Rvcmllcy4KLS0tLQotU3RldmVuIEVsbGlvdHQgKGVsbGlvdHNsQG1pbmRzcHJpbmcuY29tKQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9uby13aW5kb3dzIGIvZG9jdW1lbnRhdGlvbi9uby13aW5kb3dzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2MxMDY1Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vbm8td2luZG93cworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLQkJCVdpbmUgd2l0aG91dCBXaW5kb3dzCi0JCQk9PT09PT09PT09PT09PT09PT09PQotCi1BIG1ham9yIGdvYWwgb2YgV2luZSBpcyB0byBhbGxvdyB1c2VycyB0byBydW4gV2luZG93cyBwcm9ncmFtcyB3aXRob3V0Ci1oYXZpbmcgdG8gaW5zdGFsbCBXaW5kb3dzIG9uIHRoZWlyIG1hY2hpbmUuIFdpbmUgaW1wbGVtZW50cyB0aGUKLWZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1haW4gRExMJ3MgdXN1YWxseSBwcm92aWRlZCB3aXRoIFdpbmRvd3MuCi1UaGVyZWZvcmUsIG9uY2UgV2luZSBpcyBmaW5pc2hlZCwgeW91IHdpbGwgbm90IG5lZWQgdG8gaGF2ZSB3aW5kb3dzCi1pbnN0YWxsZWQgdG8gdXNlIFdpbmUuCi0KLVdpbmUgaGFzIGFscmVhZHkgbWFkZSBlbm91Z2ggcHJvZ3Jlc3MgdGhhdCBpdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuCi15b3VyIHRhcmdldCBhcHBsaWNhdGlvbnMgd2l0aG91dCBXaW5kb3dzIGluc3RhbGxlZC4gSWYgeW91IHdhbnQgdG8gdHJ5Ci1pdCwgZm9sbG93IHRoZXNlIHN0ZXBzOgotCi0xLiBDcmVhdGUgZW1wdHkgQzpcd2luZG93cywgQzpcd2luZG93c1xzeXN0ZW0sIEM6XHdpbmRvd3NcU3RhcnQgTWVudSwKLSAgIGFuZCBDOlx3aW5kb3dzXFN0YXJ0IE1lbnVcUHJvZ3JhbXMgZGlyZWN0b3JpZXMuCi0gICBEbyBub3QgcG9pbnQgV2luZSB0byBhIFdpbmRvd3MgZGlyZWN0b3J5IGZ1bGwgb2Ygb2xkIGluc3RhbGxhdGlvbnMKLSAgIGFuZCBhIG1lc3N5IHJlZ2lzdHJ5LiAoV2luZSBjcmVhdGVzIGEgc3BlY2lhbCByZWdpc3RyeSBpbiB5b3VyIGhvbWUKLSAgIGRpcmVjdG9yeSwgaW4gJEhPTUUvLndpbmUvKi5yZWcuIFBlcmhhcHMgeW91IGhhdmUgdG8gcmVtb3ZlIHRoZXNlCi0gICBmaWxlcykuCi0KLTIuIFBvaW50IFtEcml2ZSBDXSBpbiB3aW5lLmNvbmYgb3IgLndpbmVyYyB0byB3aGVyZSB5b3Ugd2FudCBDOiB0byBiZS4KLSAgIFJlZmVyIHRvIHRoZSBXaW5lIG1hbiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uLiBSZW1lbWJlciB0byB1c2UKLSAgIGZpbGVzeXN0ZW09d2luOTUgIQotCi0zLiBVc2UgdG9vbHMvd2luZWluc3RhbGwgdG8gY29tcGlsZSBXaW5lIGFuZCBpbnN0YWxsIHRoZSBkZWZhdWx0Ci0gICByZWdpc3RyeS4gT3IgaWYgeW91IHByZWZlciB0byBkbyBpdCB5b3Vyc2VsZiwgY29tcGlsZSBwcm9ncmFtcy9yZWdhcGksCi0gICBhbmQgcnVuOiAgIHByb2dyYW1zL3JlZ2FwaS9yZWdhcGkgc2V0VmFsdWUgPCB3aW5lZGVmYXVsdC5yZWcKLQotNC4gUnVuIGFuZC9vciBpbnN0YWxsIHlvdXIgYXBwbGljYXRpb25zLgotCi0KLUJlY2F1c2UgV2luZSBpcyBub3QgeWV0IGNvbXBsZXRlLCBzb21lIHByb2dyYW1zIHdpbGwgd29yayBiZXR0ZXIKLXdpdGggbmF0aXZlIFdpbmRvd3MgRExMJ3MgdGhhbiB3aXRoIFdpbmUncyByZXBsYWNlbWVudHMuIFdpbmUgaGFzIGJlZW4KLWRlc2lnbmVkIHRvIG1ha2UgdGhpcyBwb3NzaWJsZS4gSGVyZSBhcmUgc29tZSB0aXBzIGJ5IEp1ZXJnZW4gU2NobWllZAotKGFuZCBvdGhlcnMpIG9uIGhvdyB0byBwcm9jZWVkLiBUaGlzIGFzc3VtZXMgdGhhdCB5b3VyIEM6XHdpbmRvd3MKLWRpcmVjdG9yeSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRvZXMgbm90IHBvaW50IHRvIGEgbmF0aXZlIFdpbmRvd3MKLWluc3RhbGxhdGlvbiBidXQgaXMgaW4gYSBzZXBhcmF0ZSBVbml4IGZpbGUgc3lzdGVtLiAoRm9yIGluc3RhbmNlLAotIkM6XHdpbmRvd3MiIGlzIHJlYWxseSBzdWJkaXJlY3RvcnkgIndpbmRvd3MiIGxvY2F0ZWQgaW4KLSIvaG9tZS9lZ28vd2luZS9kcml2ZXMvYyIpLgotCi0tIFJ1biB0aGUgYXBwbGljYXRpb24gd2l0aCAgIC0tZGVidWdtc2cgK21vZHVsZSwrZmlsZSAgIHRvIGZpbmQgb3V0Ci0gIHdoaWNoIGZpbGVzIGFyZSBuZWVkZWQuIENvcHkgdGhlIHJlcXVpcmVkIERMTCdzIG9uZSBieSBvbmUgdG8gdGhlCi0gIEM6XHdpbmRvd3Ncc3lzdGVtIGRpcmVjdG9yeS4gRG8gbm90IGNvcHkgS0VSTkVML0tFUk5FTDMyLCBHREkvR0RJMzIsCi0gIG9yIFVTRVIvVVNFUjMyLiBUaGVzZSBpbXBsZW1lbnQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUKLSAgV2luZG93cyBBUEksIGFuZCB0aGUgV2luZSBpbnRlcm5hbCB2ZXJzaW9ucyBtdXN0IGJlIHVzZWQuCi0KLS0gRWRpdCB0aGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbiBvZiB3aW5lLmNvbmYgb3IgLndpbmVyYyB0byBzcGVjaWZ5Ci0gICduYXRpdmUnIGJlZm9yZSAnYnVpbHRpbicgZm9yIHRoZSBXaW5kb3dzIERMTCdzIHlvdSB3YW50IHRvIHVzZS4KLSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgc2VlIHRoZSBXaW5lIG1hbnBhZ2UuCi0KLS0gTm90ZSB0aGF0IHNvbWUgbmV0d29yayBETEwncyBhcmUgbm90IG5lZWRlZCBldmVuIHRob3VnaCBXaW5lIGlzCi0gIGxvb2tpbmcgZm9yIHRoZW0uIFRoZSBXaW5kb3dzIE1QUi5ETEwgY3VycmVudGx5IGRvZXMgbm90IHdvcms7IHlvdQotICBtdXN0IHVzZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24uCi0KLS0gQ29weSBTSEVMTC9TSEVMTDMyIGFuZCBDT01ETEcvQ09NRExHMzIgQ09NTUNUUkwvQ09NQ1RMMzIKLSAgb25seSBhcyBwYWlycyB0byB5b3VyIFdpbmUgZGlyZWN0b3J5ICh0aGVzZSBETEwncyBhcmUKLSAgImNsZWFuIiB0byB1c2UpLiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZXNlIHNwZWNpZmllZCBpbiB0aGUKLSAgW0RsbFBhaXJzXSBzZWN0aW9uIG9mIHdpbmUuY29uZiBvciAud2luZXJjLgotCi0tIEJlIGNvbnNpc3RlbnQ6IFVzZSBvbmx5IERMTCdzIGZyb20gdGhlIHNhbWUgV2luZG93cyB2ZXJzaW9uCi0gIHRvZ2V0aGVyLgotCi0tIFB1dCByZWdlZGl0LmV4ZSBpbiB0aGUgQzpcd2luZG93cyBkaXJlY3RvcnkgKG9mZmljZTk1IGltcG9ydHMKLSAgYSAqLnJlZyBmaWxlIHdoZW4gaXQgcnVucyB3aXRoIGEgZW1wdHkgcmVnaXN0cnksIGRvbid0IGtub3cKLSAgYWJvdXQgb2ZmaWNlOTcpLgotCi0tIEFsc28gYWRkIHdpbmhlbHAuZXhlIGFuZCB3aW5obHAzMi5leGUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBicm93c2UKLSAgdGhyb3VnaCB5b3VyIHByb2dyYW1zJyBoZWxwIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9vcGVuZ2wgYi9kb2N1bWVudGF0aW9uL29wZW5nbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkZjBiOC4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL29wZW5nbAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi1JIFdoYXQgaXMgbmVlZGVkIHRvIGhhdmUgT3BlbkdMIHN1cHBvcnQgaW4gV2luZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQmFzaWNhbGx5LCBpZiB5b3UgaGF2ZSBhIExpbnV4IE9wZW5HTCBBQkkgY29tcGxpYW50IGxpYkdMCi0oaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL29nbC1zYW1wbGUvQUJJLykgaW5zdGFsbGVkIG9uIHlvdXIKLWNvbXB1dGVyLCB5b3Ugc2hvdWxkIGV2ZXJ5dGhpbmcgdGhhdCBpcyBuZWVkZWQuCi0KLVRvIGJlIG1vcmUgY2xlYXIsIEkgd2lsbCBkZXRhaWwgb25lIHN0ZXAgYWZ0ZXIgYW5vdGhlciB3aGF0IHRoZQotY29uZmlndXJlIHNjcmlwdCBjaGVja3MuCi0KLUlmLCBhZnRlciBXaW5lIGNvbXBpbGVzLCBPcGVuR0wgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW4sIHlvdSBjYW4KLWFsd2F5cyBjaGVjayAnY29uZmlnLmxvZycgdG8gc2VlIHdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgcG9pbnRzIGZhaWxlZC4KLQotSS4xIEhlYWRlciBmaWxlcwotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgbmVlZGVkIGhlYWRlciBmaWxlcyB0byBidWlsZCBPcGVuR0wgc3VwcG9ydCBpbiBXaW5lIGFyZSA6Ci0KLSAtIGdsLmggOiB0aGUgZGVmaW5pdGlvbiBvZiBhbGwgT3BlbkdMIGNvcmUgZnVuY3Rpb25zLCB0eXBlcyBhbmQKLSAgIGVudW1lcmFudHMKLQotIC0gZ2x4LmggOiBob3cgT3BlbkdMIGludGVncmF0ZXMgaW4gdGhlIFggV2luZG93IGVudmlyb25tZW50Ci0KLSAtIGdsZXh0LmggOiB0aGUgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBPcGVuR0wgZXh0ZW5zaW9ucwotCi1UaGUgbGF0dGVyIGZpbGUgKGdsZXh0LmgpIGlzLCBhcyBvZiBub3csIG5vdCBuZWNlc3NhcnkgdG8gYnVpbGQKLVdpbmUuIEJ1dCBhcyB0aGlzIGZpbGUgY2FuIGJlIGVhc2lseSBvYnRhaW5lZCBmcm9tIFNHSQotKGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlL0FCSS9nbGV4dC5oKSwgYW5kIHRoYXQgYWxsCi1PcGVuR0wgc2hvdWxkIHByb3ZpZGUgb25lLCBJIGRlY2lkZWQgdG8ga2VlcCBpdCBoZXJlLgotCi0KLUkuMiBPcGVuR0wgbGlicmFyeSB0aHJlYWQtc2FmZXR5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BZnRlciB0aGF0LCB0aGUgc2NyaXB0IGNoZWNrcyBpZiB0aGUgT3BlbkdMIGxpYnJhcnkgcmVsaWVzIG9yIG5vdCBvbgotdGhlIHB0aHJlYWQgbGlicmFyeSB0byBwcm92aWRlIHRocmVhZCBzYWZldHkgKG1vc3QgJ21vZGVybicgT3BlbkdMCi1saWJyYXJpZXMgZG8pLgotCi1JZiB0aGUgT3BlbkdMIGxpYnJhcnkgZXhwbGljaXRlbHkgbGlua3MgaW4gbGlicHRocmVhZCAoeW91IGNhbiBjaGVjawotaXQgd2l0aCBhICdsZGQgbGliR0wuc28nKSwgeW91IG5lZWQgdG8gZm9yY2UgT3BlbkdMIHN1cHBvcnQgYnkKLXN0YXJ0aW5nIGNvbmZpZ3VyZSB3aXRoIHRoZSAnLS1lbmFibGUtb3BlbmdsJyBmbGFnLgotCi1UaGUgcmVhc29uIHRvIHRoaXMgaXMgdGhhdCBXaW5lIGNvbnRhaW5zIHNvbWUgaGFja3MgZG9uZSBieSBPdmUgdG8KLWNvaGFiaXQgd2l0aCBwdGhyZWFkIHRoYXQgYXJlIGtub3duIHRvIHdvcmsgd2VsbCBpbiBtb3N0IG9mIHRoZSBjYXNlcwotKGdsaWJjIDIuMS54KS4gT24gdGhlIG90aGVyIGhhbmQsIHdlIG5ldmVyIGdvdCBXaW5lIHRvIHdvcmsgd2l0aCBnbGliYwotMi4wLjYuIFRodXMsIEkgZGVlbWVkIHByZWZlcmFibGUgdG8gcGxheSBpdCBzYWZlIDogYnkgZGVmYXVsdCwgSQotc3VwcG9zZSB0aGF0IHRoZSBoYWNrIHdvbid0IHdvcmsgYW5kIHRoYXQgaXQncyB0aGUgdXNlcidzCi1yZXNwb25zYWJpbGl0eSB0byBlbmFibGUgaXQuCi0KLUFueXdheSwgaXQgc2hvdWxkIGJlIHByZXR0eSBzYWZlIHRvIGJ1aWxkIHdpdGggJy0tZW5hYmxlLW9wZW5nbCcuCi0KLQotSS4zIE9wZW5HTCBsaWJyYXJ5IGl0c2VsZgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UbyBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mICdsaWJHTCcgb24gdGhlIHN5c3RlbSwgdGhlIHNjcmlwdCBjaGVja3MKLWlmIGl0IGRlZmluZXMgdGhlICdnbFhDcmVhdGVDb250ZXh0JyBmdW5jdGlvbi4gVGhlcmUgc2hvdWxkIGJlIG5vCi1wcm9ibGVtIGhlcmUuCi0KLQotSS40IGdsWEdldFByb2NBZGRyZXNzQVJCIGZ1bmN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGNvcmUgb2YgV2luZSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiAoYXQgbGVhc3QgZm9yIGFsbCBleHRlbnNpb25zKQotaXMgdGhlIGdsWEdldFByb2NBZGRyZXNzQVJCIGZ1bmN0aW9uLiBZb3VyIE9wZW5HTCBsaWJyYXJ5IG5lZWRzIHRvCi1oYXZlIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCBmb3IgV2luZSB0byBiZSBhYmxlIHRvIHN1cHBvcnQgT3BlbkdMLgotCi1JZiB5b3VyIGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZSBpdCwgeW91IGFyZSBvdXQgb2YgbHVjay4KLQotKE5vdGU6IHRoaXMgaXMgbm90IGNvbXBsZXRlbHkgdHJ1ZSBhcyBvbmUgY291bGQgcmV3cml0ZSBhCi0gICAgICAgZ2xYR2V0UHJvY0FkZHJlc3NBUkIgcmVwbGFjZW1lbnQgdXNpbmcgJ2Rsb3BlbicgYW5kIGZyaWVuZHMsCi0gICAgICAgYnV0IHdlbGwsIHRlbGxpbmcgcGVvcGxlIHRvIHVwZ3JhZGUgaXMgZWFzaWVyIDotKSApLgotCi0KLQotSUkgSG93IHRvIGNvbmZpZ3VyZQotPT09PT09PT09PT09PT09PT09PQotCi1Db25maWd1cmF0aW9uIGlzIHF1aXRlIGVhc3kgOiBvbmNlIE9wZW5HTCBzdXBwb3J0IGhhcyBiZWVuIGJ1aWx0IGluCi1XaW5lLCB0aGlzIGludGVybmFsIE9wZW5HTCBkcml2ZXIgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSBhbgotYXBwbGljYXRpb24gdHJpZXMgdG8gbG9hZCAnb3BlbmdsMzIuZGxsJy4KLQotRHVlIHRvIHJlc3RyaWN0aW9ucyAodGhhdCBkbyBub3QgZXhpc3QgaW4gV2luZG93cykgb24gT3BlbkdMIGNvbnRleHRzLAotaWYgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgc2NyZWVuIHRvIGZsaWNrZXIgd2hlbiB1c2luZyBPcGVuR0wKLWFwcGxpY2F0aW9ucyAoYWxsIGdhbWVzIGFyZSB1c2luZyBkb3VibGUtYnVmZmVyZWQgY29udGV4dHMpLCB5b3UgbmVlZAotdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIGluIHlvdXIgLndpbmVyYyAvIHdpbmUuaW5pIGluIHRoZSBbeDExZHJ2XQotc2VjdGlvbiA6Ci0KLURlc2t0b3BEb3VibGVCdWZmZXJlZCA9IFkKLQotYW5kIHRvIHJ1biBXaW5lIHdpdGggdGhlICctLWRlc2t0b3AnIG9wdGlvbi4KLQotCi0KLUlJSSBIb3cgaXQgYWxsIHdvcmtzCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgY29yZSBPcGVuR0wgZnVuY3Rpb24gY2FsbHMgYXJlIHRoZSBzYW1lIGJldHdlZW4gV2luZG93cyBhbmQKLUxpbnV4LiBTbyB3aGF0IGlzIHRoZSBkaWZmaWN1bHR5IHRvIHN1cHBvcnQgaXQgaW4gV2luZSA/IFdlbGwsIHRoZXJlCi1pcyB0d28gZGlmZmVyZW50IHByb2JsZW1zIDoKLQotIC0gdGhlIGludGVyZmFjZSB0byB0aGUgd2luZG93aW5nIHN5c3RlbSBpcyBkaWZmZXJlbnQgZm9yIGVhY2gKLSAgIE9TLiBJdCdzIGNhbGxlZCAnR0xYJyBmb3IgTGludXggKHdlbGwsIGZvciBYIFdpbmRvdykgYW5kICd3Z2wnIGZvcgotICAgV2luZG93cy4gVGh1cywgb25lIG5lZWQgZmlyc3QgdG8gZW11bGF0ZSBvbmUgKHdnbCkgd2l0aCB0aGUgb3RoZXIKLSAgIChHTFgpLgotCi0gLSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGJldHdlZW4gV2luZG93cyAodGhlICdQYXNjYWwnIGNvbnZlbnRpb24gb3IKLSAgICdzdGRjYWxsJykgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSB1c2VkIG9uIExpbnV4ICh0aGUgJ0MnCi0gICBjb252ZW50aW9uIG9yICdjZGVjbCcpLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCBjYWxsIHRvIGFuIE9wZW5HTAotICAgZnVuY3Rpb24gbXVzdCBiZSAndHJhbnNsYXRlZCcgYW5kIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGJ5IHRoZQotICAgV2luZG93cyBwcm9ncmFtLgotCi1BZGQgdG8gdGhpcyBzb21lIGJyYWluZGVhZCBwcm9ncmFtcyAodXNpbmcgR0wgY2FsbHMgd2l0aG91dCBzZXR0aW5nLXVwCi1hIGNvbnRleHQgb3IgZGVsZXRpbmcgdGhyZWUgdGltZSB0aGUgc2FtZSBjb250ZXh0KSBhbmQgeW91IGhhdmUgc3RpbGwKLXNvbWUgd29yayB0byBkbyA6LSkKLQotCi1JSUkuMSBUaGUgV2luZG93aW5nIHN5c3RlbSBpbnRlZ3JhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBpbnRlZ3JhdGlvbiBpcyBkb25lIGF0IHR3byBsZXZlbHMgOiAKLQotIC0gYXQgR0RJIGxldmVsIGZvciBhbGwgcGl4ZWwgZm9ybWF0IHNlbGVjdGlvbiByb3V0aW5lcyAoaWUgY2hvb3NpbmcKLSAgIGlmIG9uZSB3YW50cyBhIGRlcHRoIC8gYWxwaGEgYnVmZmVyLCB0aGUgc2l6ZSBvZiB0aGVzZSBidWZmZXJzLAotICAgLi4uKSBhbmQgdG8gZG8gdGhlICdwYWdlIGZsaXBwaW5nJyBpbiBkb3VibGUgYnVmZmVyIG1vZGUuIFRoaXMgaXMKLSAgIGltcGxlbWVudGVkIGluICdncmFwaGljcy94MTFkcnYvb3BlbmdsLmMnIChhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZQotICAgcGFydCBvZiBXaW5lJ3MgZ3JhcGhpYyBkcml2ZXIgZnVuY3Rpb24gcG9pbnRlciB0YWJsZSBhbmQgdGh1cyBjb3VsZAotICAgYmUgcmVpbXBsZW50ZWQgaWYgZXZlciBXaW5lIHdvcmtzIG9uIGFub3RoZXIgV2luZG93aW5nIHN5c3RlbSB0aGFuCi0gICBYKS4KLQotIC0gaW4gdGhlIE9wZW5HTDMyLkRMTCBpdHNlbGYgZm9yIGFsbCBvdGhlciBmdW5jdGlvbmFsaXRpZXMgKGNvbnRleHQKLSAgIGNyZWF0aW9uIC8gZGVsZXRpb24sIHF1ZXJ5aW5nIG9mIGV4dGVuc2lvbiBmdW5jdGlvbnMsIC4uLikuIFRoaXMgaXMKLSAgIGRvbmUgaW4gJ2RsbHMvb3BlbmdsMzIvd2dsLmMnLgotCi0KLUlJSS4yIFRoZSB0aHVua3MKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHRodW5rcyBhcmUgdGhlIFdpbmUgY29kZSB0aGF0IGRvZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbgotdHJhbnNsYXRpb24gYW5kIHRoZXkgYXJlIGF1dG8tZ2VuZXJhdGVkIGJ5IGEgUGVybCBzY3JpcHQuIEluIFdpbmUncwotQ1ZTIHRyZWUsIHRoZXNlIHRodW5rcyBhcmUgYWxyZWFkeSBnZW5lcmF0ZWQgZm9yIHlvdS4gTm93LCBpZiB5b3Ugd2FudAotdG8gZG8gaXQgeW91cnNlbGYsIHRoZXJlIGlzIGhvdyBpdCBhbGwgd29ya3MuLi4uCi0KLVRoZSBzY3JpcHQgaXMgbG9jYXRlZCBpbiBkbGxzL29wZW5nbDMyIGFuZCBpcyBjYWxsZWQgJ21ha2Vfb3BlbmdsJy4gSXQKLXJlcXVpcmVzIFBlcmw1IHRvIHdvcmsgYW5kIHRha2VzIHR3byBhcmd1bWVudHMgOgotCi0gLSB0aGUgZmlyc3QgaXMgdGhlIHBhdGggdG8gdGhlIE9wZW5HTCByZWdpc3RyeS4gTm93LCB5b3Ugd2lsbCBhbGwgYXNrCi0gICAnYnV0IHdoYXQgaXMgdGhlIE9wZW5HTCByZWdpc3RyeSA/JyA6LSkgV2VsbCwgaXQncyBwYXJ0IG9mIHRoZQotICAgT3BlbkdMIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBzb3VyY2UgdHJlZSBmcm9tIFNHSSAobW9yZQotICAgaW5mb3JtYXRpb25zIGF0IHRoaXMgVVJMIDogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL29nbC1zYW1wbGUvKS4gCi0KLSAgIFRvIHN1bW1hcml6ZSwgdGhlc2UgZmlsZXMgY29udGFpbnMgaHVtYW4tcmVhZGFibGUgYnV0IGVhc2lseSBwYXJzZWQKLSAgIGluZm9ybWF0aW9ucyBvbiBBTEwgT3BlbkdMIGNvcmUgZnVuY3Rpb25zIGFuZCBBTEwgcmVnaXN0ZXJlZAotICAgZXh0ZW5zaW9ucyAoZm9yIGV4YW1wbGUgdGhlIHByb3RvdHlwZSwgdGhlIE9wZW5HTCB2ZXJzaW9uLCAuLi4pLgotCi0gLSB0aGUgc2Vjb25kIGlzIHRoZSBPcGVuR0wgdmVyc2lvbiB0byAnc2ltdWxhdGUnLiBUaGlzIGZpeGVzIHRoZSBsaXN0Ci0gICBvZiBmdW5jdGlvbnMgdGhhdCB0aGUgV2luZG93cyBhcHBsaWNhdGlvbiBjYW4gbGluayBkaXJlY3RseSB0bwotICAgd2l0aG91dCBoYXZpbmcgdG8gcXVlcnkgdGhlbSBmcm9tIHRoZSBPcGVuR0wgZHJpdmVyLiBXaW5kb3dzIGlzCi0gICBiYXNlZCwgZm9yIG5vdywgb24gT3BlbkdMIDEuMSwgYnV0IHRoZSB0aHVua3MgdGhhdCBhcmUgaW4gdGhlIENWUwotICAgdHJlZSBhcmUgZ2VuZXJhdGVkIGZvciBPcGVuR0wgMS4yLgotCi0gICBUaGlzIG9wdGlvbiBjYW4gaGF2ZSB0aHJlZSB2YWx1ZXMgJzEuMCcsICcxLjEnIGFuZCAnMS4yJy4KLQotVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIHRocmVlIGZpbGVzIDoKLQotIC0gb3BlbmdsMzIuc3BlYyBnaXZlcyBXaW5lJ3MgbGlua2VyIHRoZSBzaWduYXR1cmUgb2YgYWxsIGZ1bmN0aW9uIGluCi0gICB0aGUgT3BlbkdMMzIuRExMIGxpYnJhcnkgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGxpbmsKLSAgIHRoZW0uIE9ubHkgJ2NvcmUnIGZ1bmN0aW9ucyBhcmUgbGlzdGVkIGhlcmUuCi0KLSAtIG9wZW5nbF9ub3JtLmMgY29udGFpbnMgYWxsIHRoZSB0aHVua3MgZm9yIHRoZSAnY29yZScKLSAgIGZ1bmN0aW9ucy4gWW91ciBPcGVuR0wgbGlicmFyeSBtdXN0IHByb3ZpZGUgQUxMIHRoZSBmdW5jdGlvbiB1c2VkCi0gICBpbiB0aGlzIGZpbGUgYXMgdGhlc2UgYXJlIG5vdCBxdWVyaWVkIGF0IHJ1biB0aW1lLgotCi0gLSBvcGVuZ2xfZXh0LmMgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCi0gICAnY29yZScgZnVuY3Rpb25zLiBDb250cmFyeSB0byB0aGUgdGh1bmtzIGluIG9wZW5nbF9ub3JtLmMsIHRoZXNlCi0gICBmdW5jdGlvbnMgZG8gbm90IGRlcGVuZCBhdCBhbGwgb24gd2hhdCB5b3VyIGxpYkdMIHByb3ZpZGVzLiAKLQotICAgSW4gZmFjdCwgYmVmb3JlIHVzaW5nIG9uZSBvZiB0aGVzZSB0aHVua3MsIHRoZSBXaW5kb3dzIHByb2dyYW0KLSAgIGZpcnN0IG5lZWRzIHRvICdxdWVyeScgdGhlIGZ1bmN0aW9uIHBvaW50ZXIuIEF0IHRoaXMgcG9pbnQsIHRoZQotICAgY29ycmVzcG9uZGluZyB0aHVuayBpcyB1c2VsZXNzLiBCdXQgYXMgd2UgZmlyc3QgcXVlcnkgdGhlIHNhbWUKLSAgIGZ1bmN0aW9uIGluIGxpYkdMIGFuZCBzdG9yZSB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUKLSAgIHRodW5rLCB0aGUgbGF0dGVyIGJlY29tZXMgZnVuY3Rpb25hbC4KLQotCi0KLUlWICBLbm93biBwcm9ibGVtcyAtIHNob3J0Y29taW5ncwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlWLjEgTWlzc2luZyBHTFUzMi5ETEwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR0xVIGlzIGEgbGlicmFyeSB0aGF0IGlzIGxheWVyZWQgdXBvbiBPcGVuR0wuIFRoZXJlIGlzIGEgMTAwICUKLWNvcmVzcG9uZGFuY2UgYmV0d2VlbiB0aGUgbGliR0xVLnNvIHRoYXQgaXMgdXNlZCBvbiBMaW51eCBhbmQKLUdMVTMyLkRMTC4KLQotQXMgZm9yIHRoZSBtb21lbnQsIEkgZGlkIG5vdCBjcmVhdGUgYSBzZXQgb2YgdGh1bmtzIHRvIHN1cHBvcnQgdGhpcwotbGlicmFyeSBuYXRpdmVseSBpbiBXaW5lIChpdCB3b3VsZCBlYXN5IHRvIGRvLCBidXQgSSBhbSB3YWl0aW5nIGZvciBhCi1iZXR0ZXIgc29sdXRpb24gdGhhbiBhZGRpbmcgYW5vdGhlciBhdXRvZ2VuZXJhdGVkIHRodW5rIGZpbGUpLCB5b3UgY2FuCi1hbHdheXMgZG93bmxvYWQgYW55d2hlcmUgb24gdGhlIG5ldCAoaXQncyBmcmVlKSBhIEdMVTMyLkRMTCBmaWxlIChieQotYnJvd3NpbmcsIGZvciBleGFtcGxlLCBodHRwOi8vZnRwc2VhcmNoLmx5Y29zLmNvbS8pLgotCi0KLUlWLjIgT3BlbkdMIG5vdCBkZXRlY3RlZCBhdCBjb25maWd1cmUgdGltZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNlZSBzZWN0aW9uIChJKSBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGUgY29uZmlndXJlCi1yZXF1aXJlbWVudHMuCi0KLQotSVYuMyBXaGVuIHJ1bm5pbmcgYW4gT3BlbkdMIGFwcGxpY2F0aW9uLCB0aGUgc2NyZWVuIGZsaWNrZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2VlIHNlY3Rpb24gKElJKSBmb3IgaG93IHRvIGNyZWF0ZSB0aGUgY29udGV4dCBkb3VibGUtYnVmZmVyZWQgYW5kCi10aHVzIHByZXZlbnRpbmcgdGhpcyBmbGlja2VyIGVmZmVjdC4KLQotCi1JVi40IFdpbmUgZ2l2ZXMgbWUgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIDogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBFeHRlbnNpb24gZGVmaW5lZCBpbiB0aGUgT3BlbkdMIGxpYnJhcnkgYnV0IE5PVCBpbiBvcGVuZ2xfZXh0LmMuLi4gUGxlYXNlIHJlcG9ydAotICAgIChsaW9uZWwudWxtZXJAZnJlZS5mcikgIQotCi1UaGlzIG1lYW5zIHRoYXQgdGhlIGV4dGVuc2lvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGlzIGZvdW5kIGluCi10aGUgbGliR0wgdXNlZCBieSBMaW51eCAoaWUgdGhlIGNhbGwgdG8gZ2xYR2V0UHJvY0FkZHJlc3NBUkIgcmV0dXJucyBhCi1ub24gTlVMTCBwb2ludGVyKSBidXQgdGhhdCB0aGlzIHN0cmluZyB3YXMgTk9UIGZvdW5kIGluIFdpbmUncwotZXh0ZW5zaW9uIHJlZ2lzdHJ5LgotCi1UaGlzIGNhbiBjb21lIGZyb20gdHdvIGNhdXNlcyA6Ci0KLSAtIHRoZSBvcGVuZ2xfZXh0LmMgZmlsZSBpcyB0b28gb2xkIGFuZCBuZWVkIHRvIGJlIGdlbmVyYXRlZCBhZ2Fpbi4KLQotIC0gdXNlIG9mIG9ic29sZXRlIGV4dGVuc2lvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlIGJ5IFNHSSBvcgotICAgb2YgJ3ByaXZhdGUnIGV4dGVuc2lvbnMgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQuIEFuIGV4YW1wbGUgb2YgdGhlCi0gICBmb3JtZXIgYXJlICdnbE1UZXhDb29yZDJmU0dJUycgYW5kICdnbFNlbGVjdFRleHR1cmVTR0lTJyBhcyB1c2VkIGJ5Ci0gICBRdWFrZSAyIChhbmQgYXBwYXJlbnRseSBhbHNvIGJ5IG9sZCB2ZXJzaW9ucyBvZiBIYWxmIExpZmUpLiBJZgotICAgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24gdGhlc2UgZnVuY3Rpb25zLCB0aGV5IGNhbiBiZSBhZGRlZCB0bwotICAgV2luZSdzIGV4dGVuc2lvbiBzZXQuCi0KLUlmIHlvdSBoYXZlIHRoaXMsIHJ1biB3aXRoIC0tZGVidWdtc2cgK29wZW5nbCBhbmQgc2VuZCBtZQotKGxpb25lbC51bG1lckBmcmVlLmZyKSB0aGUgVFJBQ0UuCi0KLQotSVYuNSBsaWJvcGVuZ2wzMi5zbyBpcyBidWlsdCBidXQgaXQgaXMgc3RpbGwgbm90IHdvcmtpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgbWF5IGJlIGNhdXNlZCBieSBzb21lIG1pc3NpbmcgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IG9wZW5nbF9ub3JtLmMKLWJ1dCB0aGF0IHlvdXIgTGludXggT3BlbkdMIGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZS4KLQotVG8gY2hlY2sgZm9yIHRoaXMsIGRvIHRoZSBmb2xsb3dpbmcgc3RlcHMgOgotCi0gLSBjcmVhdGUgYSBkdW1teSAuYyBmaWxlIDoKLQotaW50IG1haW4odm9pZCkgewotICAgIHJldHVybiAwOwotfQotCi0gLSB0cnkgdG8gY29tcGlsZSBpdCBieSBsaW5raW5nIGJvdGggbGlid2luZSBhbmQgbGlib3BlbmdsMzIgKHRoaXMKLSAgIGNvbW1hbmQgbGluZSBzdXBwb3NlcyB0aGF0IHlvdSBpbnN0YWxsZWQgdGhlIFdpbmUgbGlicmFyaWVzIGluCi0gICAvdXNyL2xvY2FsL2xpYiwgWU1NVikgOgotCi1nY2MgZHVtbXkuYyAtTC91c3IvbG9jYWwvbGliIC1sd2luZSAtbG9wZW5nbDMyCi0KLSAtIGlmIGl0IHdvcmtzLCB0aGUgcHJvYmxlbSBpcyBzb21ld2hlcmUgZWxzZSAoYW5kIHlvdSBjYW4gc2VuZCBtZSBhbgotICAgZW1haWwpLiBJZiBub3QsIHlvdSBjb3VsZCByZS1nZW5lcmF0ZSB0aGUgdGh1bmsgZmlsZXMgZm9yIE9wZW5HTAotICAgMS4xIGZvciBleGFtcGxlIChhbmQgc2VuZCBtZSB5b3VyIE9wZW5HTCB2ZXJzaW9uIHNvIHRoYXQgdGhpcwotICAgcHJvYmxlbSBjYW4gYmUgZGV0ZWN0ZWQgYXQgY29uZmlndXJlIHRpbWUpLgotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgIExpb25lbCBVbG1lciAobGlvbmVsLnVsbWVyQGZyZWUuZnIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBtb2RpZmljYXRpb24gOiAyMDAwLzA2LzEzCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL29wZW5nbC5zZ21sIGIvZG9jdW1lbnRhdGlvbi9vcGVuZ2wuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzEzZGMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9vcGVuZ2wuc2dtbApAQCAtMCwwICsxLDQ1OCBAQAorICA8Y2hhcHRlciBpZD0ib3BlbmdsIj4KKyAgICA8dGl0bGU+V2luZSBhbmQgT3BlbkdMPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgTGlvbmVsIFVsbWVyICZsdDtsaW9uZWwudWxtZXJAZnJlZS5mcj4sIGxhc3QgbW9kaWZpY2F0aW9uIDogMjAwMC8wNi8xMworICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9vcGVuZ2w8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0ib3BlbmdsLXJlcXVpcmVkIj4KKyAgICAgIDx0aXRsZT5JIFdoYXQgaXMgbmVlZGVkIHRvIGhhdmUgT3BlbkdMIHN1cHBvcnQgaW4gV2luZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBCYXNpY2FsbHksIGlmIHlvdSBoYXZlIGEgTGludXggT3BlbkdMIEFCSSBjb21wbGlhbnQgbGliR0wKKyAgICAgICAgKDx1bGluayB1cmw9Imh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlL0FCSS8iPgorICAgICAgICAgIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlL0FCSS88L3VsaW5rPikKKyAgICAgICAgaW5zdGFsbGVkIG9uIHlvdXIgY29tcHV0ZXIsIHlvdSBzaG91bGQgZXZlcnl0aGluZyB0aGF0IGlzCisgICAgICAgIG5lZWRlZC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUbyBiZSBtb3JlIGNsZWFyLCBJIHdpbGwgZGV0YWlsIG9uZSBzdGVwIGFmdGVyIGFub3RoZXIgd2hhdAorICAgICAgICB0aGUgPGNvbW1hbmQ+Y29uZmlndXJlPC9jb21tYW5kPiBzY3JpcHQgY2hlY2tzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIElmLCBhZnRlciBXaW5lIGNvbXBpbGVzLCBPcGVuR0wgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW4sCisgICAgICAgIHlvdSBjYW4gYWx3YXlzIGNoZWNrIDxmaWxlbmFtZT5jb25maWcubG9nPC9maWxlbmFtZT4gdG8gc2VlCisgICAgICAgIHdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgcG9pbnRzIGZhaWxlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SS4xIEhlYWRlciBmaWxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG5lZWRlZCBoZWFkZXIgZmlsZXMgdG8gYnVpbGQgT3BlbkdMIHN1cHBvcnQgaW4gV2luZSBhcmUgOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPmdsLmg6PC9maWxlbmFtZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPnRoZSBkZWZpbml0aW9uIG9mIGFsbCBPcGVuR0wgY29yZSBmdW5jdGlvbnMsIHR5cGVzIGFuZCBlbnVtZXJhbnRzPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPmdseC5oOjwvZmlsZW5hbWU+PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT5ob3cgT3BlbkdMIGludGVncmF0ZXMgaW4gdGhlIFggV2luZG93IGVudmlyb25tZW50PC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPmdsZXh0Lmg6PC9maWxlbmFtZT48L3Rlcm0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPnRoZSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIE9wZW5HTCBleHRlbnNpb25zPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGxhdHRlciBmaWxlICg8ZmlsZW5hbWU+Z2xleHQuaDwvZmlsZW5hbWU+KSBpcywgYXMgb2YKKyAgICAgICAgICBub3csIG5vdCBuZWNlc3NhcnkgdG8gYnVpbGQgV2luZS4gQnV0IGFzIHRoaXMgZmlsZSBjYW4gYmUKKyAgICAgICAgICBlYXNpbHkgb2J0YWluZWQgZnJvbSBTR0kgCisgICAgICAgICAgKDx1bGluayB1cmw9Imh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlL0FCSS9nbGV4dC5oIj4KKyAgICAgICAgICAgIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlL0FCSS9nbGV4dC5oPC91bGluaz4pLAorICAgICAgICAgIGFuZCB0aGF0IGFsbCBPcGVuR0wgc2hvdWxkIHByb3ZpZGUgb25lLCBJIGRlY2lkZWQgdG8ga2VlcCBpdCBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JLjIgT3BlbkdMIGxpYnJhcnkgdGhyZWFkLXNhZmV0eTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgdGhhdCwgdGhlIHNjcmlwdCBjaGVja3MgaWYgdGhlIE9wZW5HTCBsaWJyYXJ5IHJlbGllcworICAgICAgICAgIG9yIG5vdCBvbiB0aGUgcHRocmVhZCBsaWJyYXJ5IHRvIHByb3ZpZGUgdGhyZWFkIHNhZmV0eSAobW9zdAorICAgICAgICAgICdtb2Rlcm4nIE9wZW5HTCBsaWJyYXJpZXMgZG8pLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZSBPcGVuR0wgbGlicmFyeSBleHBsaWNpdGVseSBsaW5rcyBpbiBsaWJwdGhyZWFkICh5b3UKKyAgICAgICAgICBjYW4gY2hlY2sgaXQgd2l0aCBhIDxjb21tYW5kPmxkZCBsaWJHTC5zbzwvY29tbWFuZD4pLCB5b3UKKyAgICAgICAgICBuZWVkIHRvIGZvcmNlIE9wZW5HTCBzdXBwb3J0IGJ5IHN0YXJ0aW5nCisgICAgICAgICAgPGNvbW1hbmQ+Y29uZmlndXJlPC9jb21tYW5kPiB3aXRoIHRoZQorICAgICAgICAgIDxwYXJhbWV0ZXI+LS1lbmFibGUtb3BlbmdsPC9wYXJhbWV0ZXI+IGZsYWcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlYXNvbiB0byB0aGlzIGlzIHRoYXQgV2luZSBjb250YWlucyBzb21lIGhhY2tzIGRvbmUgYnkKKyAgICAgICAgICBPdmUgdG8gY29oYWJpdCB3aXRoIHB0aHJlYWQgdGhhdCBhcmUga25vd24gdG8gd29yayB3ZWxsIGluCisgICAgICAgICAgbW9zdCBvZiB0aGUgY2FzZXMgKGdsaWJjIDIuMS54KS4gT24gdGhlIG90aGVyIGhhbmQsIHdlIG5ldmVyCisgICAgICAgICAgZ290IFdpbmUgdG8gd29yayB3aXRoIGdsaWJjIDIuMC42LiBUaHVzLCBJIGRlZW1lZCBwcmVmZXJhYmxlCisgICAgICAgICAgdG8gcGxheSBpdCBzYWZlIDogYnkgZGVmYXVsdCwgSSBzdXBwb3NlIHRoYXQgdGhlIGhhY2sgd29uJ3QKKyAgICAgICAgICB3b3JrIGFuZCB0aGF0IGl0J3MgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0byBlbmFibGUgaXQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55d2F5LCBpdCBzaG91bGQgYmUgcHJldHR5IHNhZmUgdG8gYnVpbGQgd2l0aAorICAgICAgICAgIDxwYXJhbWV0ZXI+LS1lbmFibGUtb3BlbmdsPC9wYXJhbWV0ZXI+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JLjMgT3BlbkdMIGxpYnJhcnkgaXRzZWxmPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mICdsaWJHTCcgb24gdGhlIHN5c3RlbSwgdGhlCisgICAgICAgICAgc2NyaXB0IGNoZWNrcyBpZiBpdCBkZWZpbmVzIHRoZQorICAgICAgICAgIDxmdW5jdGlvbj5nbFhDcmVhdGVDb250ZXh0PC9mdW5jdGlvbj4gZnVuY3Rpb24uIFRoZXJlIHNob3VsZAorICAgICAgICAgIGJlIG5vIHByb2JsZW0gaGVyZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SS40IGdsWEdldFByb2NBZGRyZXNzQVJCIGZ1bmN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY29yZSBvZiBXaW5lJ3MgT3BlbkdMIGltcGxlbWVudGF0aW9uIChhdCBsZWFzdCBmb3IgYWxsCisgICAgICAgICAgZXh0ZW5zaW9ucykgaXMgdGhlIDxmdW5jdGlvbj5nbFhHZXRQcm9jQWRkcmVzc0FSQjwvZnVuY3Rpb24+CisgICAgICAgICAgZnVuY3Rpb24uIFlvdXIgT3BlbkdMIGxpYnJhcnkgbmVlZHMgdG8gaGF2ZSB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgZGVmaW5lZCBmb3IgV2luZSB0byBiZSBhYmxlIHRvIHN1cHBvcnQgT3BlbkdMLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdXIgbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIGl0LCB5b3UgYXJlIG91dCBvZiBsdWNrLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxub3RlPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdGhpcyBpcyBub3QgY29tcGxldGVseSB0cnVlIGFzIG9uZSBjb3VsZCByZXdyaXRlIGEKKyAgICAgICAgICAgIDxmdW5jdGlvbj5nbFhHZXRQcm9jQWRkcmVzc0FSQjwvZnVuY3Rpb24+IHJlcGxhY2VtZW50CisgICAgICAgICAgICB1c2luZyA8ZnVuY3Rpb24+ZGxvcGVuPC9mdW5jdGlvbj4gYW5kIGZyaWVuZHMsIGJ1dCB3ZWxsLAorICAgICAgICAgICAgdGVsbGluZyBwZW9wbGUgdG8gdXBncmFkZSBpcyBlYXNpZXIgOi0pLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJvcGVuZ2wtY29uZmlndXJlIj4KKyAgICAgIDx0aXRsZT5JSSBIb3cgdG8gY29uZmlndXJlPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIENvbmZpZ3VyYXRpb24gaXMgcXVpdGUgZWFzeSA6IG9uY2UgT3BlbkdMIHN1cHBvcnQgaGFzIGJlZW4KKyAgICAgICAgYnVpbHQgaW4gV2luZSwgdGhpcyBpbnRlcm5hbCBPcGVuR0wgZHJpdmVyIHdpbGwgYmUgdXNlZCBlYWNoCisgICAgICAgIHRpbWUgYW4gYXBwbGljYXRpb24gdHJpZXMgdG8gbG9hZAorICAgICAgICA8ZmlsZW5hbWU+b3BlbmdsMzIuZGxsPC9maWxlbmFtZT4uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgRHVlIHRvIHJlc3RyaWN0aW9ucyAodGhhdCBkbyBub3QgZXhpc3QgaW4gV2luZG93cykgb24gT3BlbkdMCisgICAgICAgIGNvbnRleHRzLCBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSBzY3JlZW4gdG8gZmxpY2tlciB3aGVuCisgICAgICAgIHVzaW5nIE9wZW5HTCBhcHBsaWNhdGlvbnMgKGFsbCBnYW1lcyBhcmUgdXNpbmcgZG91YmxlLWJ1ZmZlcmVkCisgICAgICAgIGNvbnRleHRzKSwgeW91IG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIGluIHlvdXIKKyAgICAgICAgPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPiAvIDxmaWxlbmFtZT53aW5lLmluaTwvZmlsZW5hbWU+CisgICAgICAgIGluIHRoZSBbeDExZHJ2XSBzZWN0aW9uIDoKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0Rlc2t0b3BEb3VibGVCdWZmZXJlZCA9IFkKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgYW5kIHRvIHJ1biBXaW5lIHdpdGggdGhlIDxwYXJhbWV0ZXI+LS1kZXNrdG9wPC9wYXJhbWV0ZXI+CisgICAgICAgIG9wdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJvcGVuZ2wtd29ya3MiPgorICAgICAgPHRpdGxlPklJSSBIb3cgaXQgYWxsIHdvcmtzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb3JlIE9wZW5HTCBmdW5jdGlvbiBjYWxscyBhcmUgdGhlIHNhbWUgYmV0d2VlbiBXaW5kb3dzCisgICAgICAgIGFuZCBMaW51eC4gU28gd2hhdCBpcyB0aGUgZGlmZmljdWx0eSB0byBzdXBwb3J0IGl0IGluIFdpbmUgPworICAgICAgICBXZWxsLCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBwcm9ibGVtcyA6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdGhlIGludGVyZmFjZSB0byB0aGUgd2luZG93aW5nIHN5c3RlbSBpcyBkaWZmZXJlbnQgZm9yCisgICAgICAgICAgICBlYWNoIE9TLiBJdCdzIGNhbGxlZCAnR0xYJyBmb3IgTGludXggKHdlbGwsIGZvciBYIFdpbmRvdykKKyAgICAgICAgICAgIGFuZCAnd2dsJyBmb3IgV2luZG93cy4gVGh1cywgb25lIG5lZWQgZmlyc3QgdG8gZW11bGF0ZSBvbmUKKyAgICAgICAgICAgICh3Z2wpIHdpdGggdGhlIG90aGVyIChHTFgpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdGhlIGNhbGxpbmcgY29udmVudGlvbiBiZXR3ZWVuIFdpbmRvd3MgKHRoZSAnUGFzY2FsJworICAgICAgICAgICAgY29udmVudGlvbiBvciAnc3RkY2FsbCcpIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgdXNlZCBvbgorICAgICAgICAgICAgTGludXggKHRoZSAnQycgY29udmVudGlvbiBvciAnY2RlY2wnKS4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgICAgICBlYWNoIGNhbGwgdG8gYW4gT3BlbkdMIGZ1bmN0aW9uIG11c3QgYmUgJ3RyYW5zbGF0ZWQnIGFuZAorICAgICAgICAgICAgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkgYnkgdGhlIFdpbmRvd3MgcHJvZ3JhbS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWRkIHRvIHRoaXMgc29tZSBicmFpbmRlYWQgcHJvZ3JhbXMgKHVzaW5nIEdMIGNhbGxzIHdpdGhvdXQKKyAgICAgICAgc2V0dGluZy11cCBhIGNvbnRleHQgb3IgZGVsZXRpbmcgdGhyZWUgdGltZSB0aGUgc2FtZSBjb250ZXh0KQorICAgICAgICBhbmQgeW91IGhhdmUgc3RpbGwgc29tZSB3b3JrIHRvIGRvIDotKQorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5JSUkuMSBUaGUgV2luZG93aW5nIHN5c3RlbSBpbnRlZ3JhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpbnRlZ3JhdGlvbiBpcyBkb25lIGF0IHR3byBsZXZlbHMgOiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQXQgR0RJIGxldmVsIGZvciBhbGwgcGl4ZWwgZm9ybWF0IHNlbGVjdGlvbiByb3V0aW5lcyAoaWUKKyAgICAgICAgICAgICAgY2hvb3NpbmcgaWYgb25lIHdhbnRzIGEgZGVwdGggLyBhbHBoYSBidWZmZXIsIHRoZSBzaXplCisgICAgICAgICAgICAgIG9mIHRoZXNlIGJ1ZmZlcnMsIC4uLikgYW5kIHRvIGRvIHRoZSAncGFnZSBmbGlwcGluZycgaW4KKyAgICAgICAgICAgICAgZG91YmxlIGJ1ZmZlciBtb2RlLiBUaGlzIGlzIGltcGxlbWVudGVkIGluCisgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncmFwaGljcy94MTFkcnYvb3BlbmdsLmM8L2ZpbGVuYW1lPiAoYWxsIHRoZXNlCisgICAgICAgICAgICAgIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBXaW5lJ3MgZ3JhcGhpYyBkcml2ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgICAgcG9pbnRlciB0YWJsZSBhbmQgdGh1cyBjb3VsZCBiZSByZWltcGxlbnRlZCBpZiBldmVyIFdpbmUKKyAgICAgICAgICAgICAgd29ya3Mgb24gYW5vdGhlciBXaW5kb3dpbmcgc3lzdGVtIHRoYW4gWCkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSW4gdGhlIDxmaWxlbmFtZT5PcGVuR0wzMi5ETEw8L2ZpbGVuYW1lPiBpdHNlbGYgZm9yIGFsbAorICAgICAgICAgICAgICBvdGhlciBmdW5jdGlvbmFsaXRpZXMgKGNvbnRleHQgY3JlYXRpb24gLyBkZWxldGlvbiwKKyAgICAgICAgICAgICAgcXVlcnlpbmcgb2YgZXh0ZW5zaW9uIGZ1bmN0aW9ucywgLi4uKS4gVGhpcyBpcyBkb25lIGluCisgICAgICAgICAgICAgIDxmaWxlbmFtZT5kbGxzL29wZW5nbDMyL3dnbC5jPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklJSS4yIFRoZSB0aHVua3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSB0aHVua3MgYXJlIHRoZSBXaW5lIGNvZGUgdGhhdCBkb2VzIHRoZSBjYWxsaW5nCisgICAgICAgICAgY29udmVudGlvbiB0cmFuc2xhdGlvbiBhbmQgdGhleSBhcmUgYXV0by1nZW5lcmF0ZWQgYnkgYSBQZXJsCisgICAgICAgICAgc2NyaXB0LiBJbiBXaW5lJ3MgQ1ZTIHRyZWUsIHRoZXNlIHRodW5rcyBhcmUgYWxyZWFkeQorICAgICAgICAgIGdlbmVyYXRlZCBmb3IgeW91LiBOb3csIGlmIHlvdSB3YW50IHRvIGRvIGl0IHlvdXJzZWxmLCB0aGVyZQorICAgICAgICAgIGlzIGhvdyBpdCBhbGwgd29ya3MuLi4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHNjcmlwdCBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT5kbGxzL29wZW5nbDMyPC9maWxlbmFtZT4KKyAgICAgICAgICBhbmQgaXMgY2FsbGVkIDxjb21tYW5kPm1ha2Vfb3BlbmdsPC9jb21tYW5kPi4gSXQgcmVxdWlyZXMKKyAgICAgICAgICBQZXJsNSB0byB3b3JrIGFuZCB0YWtlcyB0d28gYXJndW1lbnRzIDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhlIGZpcnN0IGlzIHRoZSBwYXRoIHRvIHRoZSBPcGVuR0wgcmVnaXN0cnkuIE5vdywgeW91CisgICAgICAgICAgICAgIHdpbGwgYWxsIGFzayAnYnV0IHdoYXQgaXMgdGhlIE9wZW5HTCByZWdpc3RyeSA/JyA6LSkKKyAgICAgICAgICAgICAgV2VsbCwgaXQncyBwYXJ0IG9mIHRoZSBPcGVuR0wgc2FtcGxlIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgIHNvdXJjZSB0cmVlIGZyb20gU0dJIChtb3JlIGluZm9ybWF0aW9ucyBhdCB0aGlzIFVSTCA6CisgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9vZ2wtc2FtcGxlLyI+CisgICAgICAgICAgICAgICAgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL29nbC1zYW1wbGUvPC91bGluaz4uIAorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRvIHN1bW1hcml6ZSwgdGhlc2UgZmlsZXMgY29udGFpbiBodW1hbi1yZWFkYWJsZSBidXQKKyAgICAgICAgICAgICAgZWFzaWx5IHBhcnNlZCBpbmZvcm1hdGlvbiBvbiBBTEwgT3BlbkdMIGNvcmUgZnVuY3Rpb25zCisgICAgICAgICAgICAgIGFuZCBBTEwgcmVnaXN0ZXJlZCBleHRlbnNpb25zIChmb3IgZXhhbXBsZSB0aGUKKyAgICAgICAgICAgICAgcHJvdG90eXBlLCB0aGUgT3BlbkdMIHZlcnNpb24sIC4uLikuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgdGhlIHNlY29uZCBpcyB0aGUgT3BlbkdMIHZlcnNpb24gdG8gJ3NpbXVsYXRlJy4gVGhpcworICAgICAgICAgICAgICBmaXhlcyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCB0aGUgV2luZG93cyBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICBjYW4gbGluayBkaXJlY3RseSB0byB3aXRob3V0IGhhdmluZyB0byBxdWVyeSB0aGVtIGZyb20KKyAgICAgICAgICAgICAgdGhlIE9wZW5HTCBkcml2ZXIuIFdpbmRvd3MgaXMgYmFzZWQsIGZvciBub3csIG9uIE9wZW5HTAorICAgICAgICAgICAgICAxLjEsIGJ1dCB0aGUgdGh1bmtzIHRoYXQgYXJlIGluIHRoZSBDVlMgdHJlZSBhcmUKKyAgICAgICAgICAgICAgZ2VuZXJhdGVkIGZvciBPcGVuR0wgMS4yLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGNhbiBoYXZlIHRocmVlIHZhbHVlczoKKyAgICAgICAgICAgICAgPGxpdGVyYWw+MS4wPC9saXRlcmFsPiwgPGxpdGVyYWw+MS4xPC9saXRlcmFsPiBhbmQKKyAgICAgICAgICAgICAgPGxpdGVyYWw+MS4yPC9saXRlcmFsPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyB0aHJlZSBmaWxlcyA6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZ2wzMi5zcGVjPC9maWxlbmFtZT4gZ2l2ZXMgV2luZSdzIGxpbmtlcgorICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIG9mIGFsbCBmdW5jdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgPGZpbGVuYW1lPk9wZW5HTDMyLkRMTDwvZmlsZW5hbWU+IGxpYnJhcnkgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgYXBwbGljYXRpb24gY2FuIGxpbmsgdGhlbS4gT25seSAnY29yZScgZnVuY3Rpb25zIGFyZQorICAgICAgICAgICAgICBsaXN0ZWQgaGVyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmdsX25vcm0uYzwvZmlsZW5hbWU+IGNvbnRhaW5zIGFsbCB0aGUKKyAgICAgICAgICAgICAgdGh1bmtzIGZvciB0aGUgJ2NvcmUnIGZ1bmN0aW9ucy4gWW91ciBPcGVuR0wgbGlicmFyeQorICAgICAgICAgICAgICBtdXN0IHByb3ZpZGUgQUxMIHRoZSBmdW5jdGlvbiB1c2VkIGluIHRoaXMgZmlsZSBhcyB0aGVzZQorICAgICAgICAgICAgICBhcmUgbm90IHF1ZXJpZWQgYXQgcnVuIHRpbWUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5nbF9leHQuYzwvZmlsZW5hbWU+IGNvbnRhaW5zIGFsbCB0aGUKKyAgICAgICAgICAgICAgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSAnY29yZScgZnVuY3Rpb25zLgorICAgICAgICAgICAgICBDb250cmFyeSB0byB0aGUgdGh1bmtzIGluCisgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZ2xfbm9ybS5jPC9maWxlbmFtZT4sIHRoZXNlIGZ1bmN0aW9ucyBkbworICAgICAgICAgICAgICBub3QgZGVwZW5kIGF0IGFsbCBvbiB3aGF0IHlvdXIgbGliR0wgcHJvdmlkZXMuIAorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIEluIGZhY3QsIGJlZm9yZSB1c2luZyBvbmUgb2YgdGhlc2UgdGh1bmtzLCB0aGUgV2luZG93cworICAgICAgICAgICAgICBwcm9ncmFtIGZpcnN0IG5lZWRzIHRvICdxdWVyeScgdGhlIGZ1bmN0aW9uIHBvaW50ZXIuIEF0CisgICAgICAgICAgICAgIHRoaXMgcG9pbnQsIHRoZSBjb3JyZXNwb25kaW5nIHRodW5rIGlzIHVzZWxlc3MuIEJ1dCBhcworICAgICAgICAgICAgICB3ZSBmaXJzdCBxdWVyeSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBsaWJHTCBhbmQgc3RvcmUgdGhlCisgICAgICAgICAgICAgIHJldHVybmVkIGZ1bmN0aW9uIHBvaW50ZXIgaW4gdGhlIHRodW5rLCB0aGUgbGF0dGVyCisgICAgICAgICAgICAgIGJlY29tZXMgZnVuY3Rpb25hbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxIGlkPSJvcGVuZ2wtcHJvYmxlbXMiPgorICAgICAgPHRpdGxlPklWICBLbm93biBwcm9ibGVtcyAtIHNob3J0Y29taW5nczwvdGl0bGU+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPklWLjEgTWlzc2luZyBHTFUzMi5ETEw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEdMVSBpcyBhIGxpYnJhcnkgdGhhdCBpcyBsYXllcmVkIHVwb24gT3BlbkdMLiBUaGVyZSBpcyBhCisgICAgICAgICAgMTAwJSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHRoZQorICAgICAgICAgIDxmaWxlbmFtZT5saWJHTFUuc288L2ZpbGVuYW1lPiB0aGF0IGlzIHVzZWQgb24gTGludXggYW5kCisgICAgICAgICAgPGZpbGVuYW1lPkdMVTMyLkRMTDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIGZvciB0aGUgbW9tZW50LCBJIGRpZCBub3QgY3JlYXRlIGEgc2V0IG9mIHRodW5rcyB0byBzdXBwb3J0IHRoaXMKKyAgICAgICAgICBsaWJyYXJ5IG5hdGl2ZWx5IGluIFdpbmUgKGl0IHdvdWxkIGVhc3kgdG8gZG8sIGJ1dCBJIGFtIHdhaXRpbmcgZm9yCisgICAgICAgICAgYSBiZXR0ZXIgc29sdXRpb24gdGhhbiBhZGRpbmcgYW5vdGhlciBhdXRvZ2VuZXJhdGVkIHRodW5rIGZpbGUpLCB5b3UKKyAgICAgICAgICBjYW4gYWx3YXlzIGRvd25sb2FkIGFueXdoZXJlIG9uIHRoZSBuZXQgKGl0J3MgZnJlZSkgYQorICAgICAgICAgIDxmaWxlbmFtZT5HTFUzMi5ETEw8L2ZpbGVuYW1lPiBmaWxlIChieSBicm93c2luZywgZm9yIGV4YW1wbGUsCisgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2Z0cHNlYXJjaC5seWNvcy5jb20vIj4KKyAgICAgICAgICAgIGh0dHA6Ly9mdHBzZWFyY2gubHljb3MuY29tLzwvdWxpbms+KS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuMiBPcGVuR0wgbm90IGRldGVjdGVkIGF0IGNvbmZpZ3VyZSB0aW1lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTZWUgc2VjdGlvbiAoSSkgZm9yIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlCisgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IHJlcXVpcmVtZW50cy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuMyBXaGVuIHJ1bm5pbmcgYW4gT3BlbkdMIGFwcGxpY2F0aW9uLCB0aGUgc2NyZWVuIGZsaWNrZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTZWUgc2VjdGlvbiAoSUkpIGZvciBob3cgdG8gY3JlYXRlIHRoZSBjb250ZXh0CisgICAgICAgICAgZG91YmxlLWJ1ZmZlcmVkIGFuZCB0aHVzIHByZXZlbnRpbmcgdGhpcyBmbGlja2VyIGVmZmVjdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuNCBXaW5lIGdpdmVzIG1lIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZSA6IDwvdGl0bGU+CisKKyAgICAgICAgPHNjcmVlbj4KK0V4dGVuc2lvbiBkZWZpbmVkIGluIHRoZSBPcGVuR0wgbGlicmFyeSBidXQgTk9UIGluIG9wZW5nbF9leHQuYy4uLgorUGxlYXNlIHJlcG9ydCAobGlvbmVsLnVsbWVyQGZyZWUuZnIpICEKKyAgICAgICAgPC9zY3JlZW4+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBtZWFucyB0aGF0IHRoZSBleHRlbnNpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorICAgICAgICAgIGlzIGZvdW5kIGluIHRoZSBsaWJHTCB1c2VkIGJ5IExpbnV4IChpZSB0aGUgY2FsbCB0bworICAgICAgICAgIDxmdW5jdGlvbj5nbFhHZXRQcm9jQWRkcmVzc0FSQjwvZnVuY3Rpb24+IHJldHVybnMgYQorICAgICAgICAgIG5vbi08Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IHBvaW50ZXIpIGJ1dCB0aGF0IHRoaXMgc3RyaW5nCisgICAgICAgICAgd2FzIE5PVCBmb3VuZCBpbiBXaW5lJ3MgZXh0ZW5zaW9uIHJlZ2lzdHJ5LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FuIGNvbWUgZnJvbSB0d28gY2F1c2VzIDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGVuZ2xfZXh0LmM8L2ZpbGVuYW1lPiBmaWxlIGlzIHRvbyBvbGQKKyAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBVc2Ugb2Ygb2Jzb2xldGUgZXh0ZW5zaW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgIGFueW1vcmUgYnkgU0dJIG9yIG9mICdwcml2YXRlJyBleHRlbnNpb25zIHRoYXQgYXJlIG5vdAorICAgICAgICAgICAgICByZWdpc3RlcmVkLiBBbiBleGFtcGxlIG9mIHRoZSBmb3JtZXIgYXJlCisgICAgICAgICAgICAgIDxmdW5jdGlvbj5nbE1UZXhDb29yZDJmU0dJUzwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgICAgICA8ZnVuY3Rpb24+Z2xTZWxlY3RUZXh0dXJlU0dJUzwvZnVuY3Rpb24+IGFzIHVzZWQgYnkKKyAgICAgICAgICAgICAgUXVha2UgMiAoYW5kIGFwcGFyZW50bHkgYWxzbyBieSBvbGQgdmVyc2lvbnMgb2YgSGFsZgorICAgICAgICAgICAgICBMaWZlKS4gSWYgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24gdGhlc2UgZnVuY3Rpb25zLAorICAgICAgICAgICAgICB0aGV5IGNhbiBiZSBhZGRlZCB0byBXaW5lJ3MgZXh0ZW5zaW9uIHNldC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBoYXZlIHRoaXMsIHJ1biB3aXRoIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZworICAgICAgICAgICAgK29wZW5nbDwvcGFyYW1ldGVyPiBhbmQgc2VuZCBtZQorICAgICAgICAgIDxlbWFpbD5saW9uZWwudWxtZXJAZnJlZS5mcjwvZW1haWw+IHRoZSBUUkFDRS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+SVYuNSA8ZmlsZW5hbWU+bGlib3BlbmdsMzIuc288L2ZpbGVuYW1lPiBpcyBidWlsdCBidXQgaXQgaXMgc3RpbGwgbm90IHdvcmtpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBzb21lIG1pc3NpbmcgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5CisgICAgICAgICAgPGZpbGVuYW1lPm9wZW5nbF9ub3JtLmM8L2ZpbGVuYW1lPiBidXQgdGhhdCB5b3VyIExpbnV4CisgICAgICAgICAgT3BlbkdMIGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBjaGVjayBmb3IgdGhpcywgZG8gdGhlIGZvbGxvd2luZyBzdGVwcyA6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIGNyZWF0ZSBhIGR1bW15IDxmaWxlbmFtZT4uYzwvZmlsZW5hbWU+IGZpbGUgOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoraW50IG1haW4odm9pZCkgeworICAgIHJldHVybiAwOworfQorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICB0cnkgdG8gY29tcGlsZSBpdCBieSBsaW5raW5nIGJvdGggbGlid2luZSBhbmQKKyAgICAgICAgICAgICAgbGlib3BlbmdsMzIgKHRoaXMgY29tbWFuZCBsaW5lIHN1cHBvc2VzIHRoYXQgeW91CisgICAgICAgICAgICAgIGluc3RhbGxlZCB0aGUgV2luZSBsaWJyYXJpZXMgaW4KKyAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvbGliPC9maWxlbmFtZT4sIFlNTVYpIDoKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2djYyBkdW1teS5jIC1ML3Vzci9sb2NhbC9saWIgLWx3aW5lIC1sb3BlbmdsMzIKKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgaWYgaXQgd29ya3MsIHRoZSBwcm9ibGVtIGlzIHNvbWV3aGVyZSBlbHNlIChhbmQgeW91IGNhbgorICAgICAgICAgICAgICBzZW5kIG1lIGFuIGVtYWlsKS4gSWYgbm90LCB5b3UgY291bGQgcmUtZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgIHRodW5rIGZpbGVzIGZvciBPcGVuR0wgMS4xIGZvciBleGFtcGxlIChhbmQgc2VuZCBtZSB5b3VyCisgICAgICAgICAgICAgIE9wZW5HTCB2ZXJzaW9uIHNvIHRoYXQgdGhpcyBwcm9ibGVtIGNhbiBiZSBkZXRlY3RlZCBhdAorICAgICAgICAgICAgICBjb25maWd1cmUgdGltZSkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCis8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6IHNnbWwKK3NnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgImJvb2siICJwYXJ0IiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcGFja2FnaW5nLnNnbWwgYi9kb2N1bWVudGF0aW9uL3BhY2thZ2luZy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOGZiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3BhY2thZ2luZy5zZ21sCkBAIC0wLDAgKzEsNzYwIEBACisgIDxjaGFwdGVyIGlkPSJwYWNrYWdpbmciPgorICAgIDx0aXRsZT5QYWNrYWdpbmcgV2luZTwvdGl0bGU+CisKKyAgICA8c2VjdDEgaWQ9ImRpc3RyaWJ1dGluZyI+CisgICAgICA8dGl0bGU+QSBTbWFsbCBXSU5FIERpc3RyaWJ1dGlvbiBHdWlkZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IE1hcmN1cyBNZWlzc25lciAmbHQ7TWFyY3VzLk1laXNzbmVyQGNhbGRlcmEuZGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vZGlzdHJpYnV0b3JzPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGlsZSBwYWNrYWdpbmcgV0lORSBmb3Igb25lIG9mIHRoZSBMaW51eCBkaXN0cmlidXRpb25zIEkgY2FtZQorICAgICAgICBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgd2hpY2ggaGF2ZSBub3QgYmVlbiBjbGFyaWZpZWQgeWV0LgorICAgICAgICBQYXJ0aWN1bGFybHkgYSBob3ctdG8gZm9yIFdJTkUgcGFja2FnaW5nIGRpc3RyaWJ1dG9ycyBpcworICAgICAgICBtaXNzaW5nLiBUaGlzIGRvY3VtZW50IHRyaWVzIHRvIGdpdmUgYSBicmllZiBvdmVydmlldyBvdmVyIHRoZQorICAgICAgICByYXRpb25hbGVzIEkgdGhvdWdodCB1cCBhbmQgaG93IEkgdHJpZWQgdG8gaW1wbGVtZW50IGl0LgorICAgICAgICAoV2hpbGUgdGhlIGV4YW1wbGVzIHVzZSA8Y29tbWFuZD5ycG08L2NvbW1hbmQ+IG1vc3Qgb2YgdGhpcworICAgICAgICBzdHVmZiBjYW4gYmUgYXBwbGllZCB0byBvdGhlciBwYWNrYWdlcnMgdG9vLikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFlPVSBTSE9VTEQgUkVDSEVDSyBUSElTIEZJTEUgRVZFUlkgVFdPIE1PTlRIUyBPUiBTTworICAgICAgICAgICg8Y29tbWFuZD5kaWZmIC11TjwvY29tbWFuZD4gY29tZXMgdG8gbXkgbWluZCBoZXJlLi4uKS4KKyAgICAgICAgICBXZSdsbCBiZSBhZGRpbmcgc3R1ZmYgY29uc3RhbnRseSBoZXJlIGluIG9yZGVyIHRvIGltcHJvdmUKKyAgICAgICAgICB0aGUgV2luZSBlbnZpcm9ubWVudCAhCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbm90ZT4KKworICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisKKyAgICAgICAgICA8cGFyYT5SYXRpb25hbGVzPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBXSU5FIGluc3RhbGwgc2hvdWxkOgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT5Ob3QgaGF2ZSBhIHdvcmxkIHdyaXRlYWJsZSBkaXJlY3RvcnkgKC10cmVlKS48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZXF1aXJlIG9ubHkgYXMgbXVjaCB1c2VyIGlucHV0IGFzIG5lZWRlZC4gSXQgd291bGQgYmUKKyAgICAgICAgICAgICAgICB2ZXJ5IGdvb2QgaWYgaXQgd291bGQgbm90IHJlcXVpcmUgYW55IGF0IGFsbC4gSnVzdCBsZXQKKyAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgZG8gPGNvbW1hbmQ+cnBtIC1pCisgICAgICAgICAgICAgICAgICB3aW5lLnJwbTwvY29tbWFuZD4gYW5kIGxldCBhbnkgdXNlciBiZSBhYmxlIHRvIHJ1bgorICAgICAgICAgICAgICAgIDxjb21tYW5kPndpbmUgc29sLmV4ZTwvY29tbWFuZD4gaW5zdGFudGx5LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBHaXZlIHRoZSB1c2VyIGFzIG11Y2ggZmxleGliaWxpdHkgYXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIGhpcyBvd24gYXBwbGljYXRpb25zLCBkbyBoaXMgb3duIGNvbmZpZ3VyaW5nCisgICAgICAgICAgICAgICAgZXRjLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb21lIGFzIHByZWNvbmZpZ3VyZWQgYXMgcG9zc2libGUsIHNvIHRoZSB1c2VyIGRvZXMKKyAgICAgICAgICAgICAgICBub3QgbmVlZCB0byBjaGFuZ2UgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPlVzZSBvbmx5IGFzIG11Y2ggZGlza3NwYWNlIGFzIG5lZWRlZCBwZXIgdXNlci48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIFdJTkUgaW5zdGFsbCBuZWVkczoKKyAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHdyaXRlYWJsZSA8ZmlsZW5hbWU+QzpcPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc3RydWN0dXJlIG9uIGEgcGVyIHVzZXIgYmFzaXMuIEFwcGxpY2F0aW9ucyBkbyBkdW1wCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pbmk8L2ZpbGVuYW1lPiBmaWxlcyBpbnRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmM6XHdpbmRvd3M8L2ZpbGVuYW1lPiwgaW5zdGFsbGVycyBkdW1wCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5leGU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi5kbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCBtb3JlIGludG8gPGZpbGVuYW1lPmM6XHdpbmRvd3NcPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgb3IgaW50byA8ZmlsZW5hbWU+QzpcUHJvZ3JhbQorICAgICAgICAgICAgICAgICAgRmlsZXNcPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmV4ZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGxsPC9maWxlbmFtZT4gZnJvbSBhIGdsb2JhbCByZWFkLW9ubHkKKyAgICAgICAgICAgICAgICBXaW5kb3dzIGluc3RhbGxhdGlvbiB0byBiZSBmb3VuZCBieSBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgc3BlY2lhbCA8ZmlsZW5hbWU+LmRsbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZXhlPC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmRvd3Ncc3lzdGVtPC9maWxlbmFtZT4gZGlyZWN0b3J5LCBzaW5jZQorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBkaXJlY3RseSBjaGVjayBmb3IgdGhlaXIgcHJlc2VuY2UuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPlNvbWUgc3BlY2lhbCBwcm9ncmFtIGVudmlyb25tZW50LjwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPkltcGxlbWVudGF0aW9uPC9wYXJhPgorCisgICAgICAgICAgPG9yZGVyZWRsaXN0IGluaGVyaXRudW09ImluaGVyaXQiPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT5CdWlsZGluZyB0aGUgcGFja2FnZTwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV0lORSBpcyBjb25maWd1cmVkIHRoZSB1c3VhbCB3YXkgKGRlcGVuZGluZyBvbiB5b3VyCisgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQpLiBUaGUgInByZWZpeCIgaXMgY2hvc2VuIHVzaW5nIHlvdXIKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwbGFjZW1lbnQgcG9saWN5CisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4vdXNyLzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL1gxMVI2LzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3dpbmUvPC9maWxlbmFtZT4gb3Igc2ltaWxhcikuICBUaGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzICg8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLnN5c3RlbXJlZzwvZmlsZW5hbWU+KSBhcmUgdGFyZ2V0ZWQgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvd2luZS88L2ZpbGVuYW1lPiAocmF0aW9uYWxlOiBGSFMgMi4wLAorICAgICAgICAgICAgICAgIG11bHRpcGxlIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYSBwYWNrYWdlKS4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGFtcGxlIChzcGxpdCB0aGlzIGludG8gPGxpdGVyYWw+JWJ1aWxkPC9saXRlcmFsPiBhbmQKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD4laW5zdGFsbDwvbGl0ZXJhbD4gc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICA8Y29tbWFuZD5ycG08L2NvbW1hbmQ+KToKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8c2NyZWVuPgorQ0ZMQUdTPSRSUE1fT1BUX0ZMQUdTIFwKKy4vY29uZmlndXJlIC0tcHJlZml4PS91c3IvWDExUjYgLS1zeXNjb25mZGlyPS9ldGMvd2luZS8gLS1lbmFibGUtZGxsCittYWtlCitCUj0kUlBNX0JVSUxEX1JPT1QKK21ha2UgaW5zdGFsbCBwcmVmaXg9JEJSL3Vzci9YMTFSNi8gc3lzY29uZmRpcj0kQlIvZXRjL3dpbmUvCitpbnN0YWxsIC1kICRCUi9ldGMvd2luZS8KK2luc3RhbGwgLW0gNjQ0IHdpbmUuaW5pICRCUi9ldGMvd2luZS93aW5lLmNvbmYKKworIyBQdXQgYWxsIG91ciBkbGxzIGluIGEgc2VwZXJhdGUgZGlyZWN0b3J5LiAodGhpcyB3b3JrcyBvbmx5IGlmCisjIHlvdSBoYXZlIGEgYnVpbGRyb290KQoraW5zdGFsbCAtZCAkQlIvdXNyL1gxMVI2L2xpYi93aW5lCittdiAkQlIvdXNyL1gxMVI2L2xpYi9saWIqICRCUi91c3IvWDExUjYvbGliL3dpbmUvCisKKyMgdGhlIGNsaXBib2FyZCBzZXJ2ZXIgaXMgc3RhcnRlZCBvbiBkZW1hbmQuCitpbnN0YWxsIC1tIDc1NSB3aW5kb3dzL3gxMWRydi93aW5lY2xpcHNydiAkQlIvdXNyL1gxMVI2L2Jpbi8KKworIyBUaGUgV0lORSBzZXJ2ZXIgaXMgbmVlZGVkLgoraW5zdGFsbCAtbSA3NTUgc2VydmVyL3dpbmVzZXJ2ZXIgJEJSL3Vzci9YMTFSNi9iaW4vCisgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIHdlIHVuZm9ydHVuYXRlbHkgZG8gbmVlZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZXVzZXIucmVnPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmVzeXN0ZW0ucmVnPC9maWxlbmFtZT4gZnJvbSB0aGUgV0lORQorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVkIDxmaWxlbmFtZT53aW5lZGVmYXVsdC5yZWc8L2ZpbGVuYW1lPi4gVGhpcworICAgICAgICAgICAgICAgIGNhbiBiZSBkb25lIHVzaW5nIDxjb21tYW5kPi4vcmVnYXBpPC9jb21tYW5kPiBvbmNlIGZvcgorICAgICAgICAgICAgICAgIG9uZSBleGFtcGxlIHVzZXIgYW5kIHRoZW4gcmV1c2luZyBoaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndpbmUvdXNlci5yZWc8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndpbmUvc3lzdGVtLnJlZzwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgPHRpdGxlPkZJWE1FPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPnRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZXR0ZXI8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDxzY3JlZW4+CitpbnN0YWxsIC1tIDY0NCB3aW5lLnN5dGVtcmVnICRCUi9ldGMvd2luZS8KK2luc3RhbGwgLW0gNjQ0IHdpbmUudXNlcnJlZyAkQlIvZXRjL3dpbmUvCisgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBhcmUgbm93IGEgbG90IG9mIGxpYnJhcmllcyBnZW5lcmF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgcHJvY2Vzcywgc28gYSBzZXBlcmF0ZSBsaWJyYXJ5IGRpcmVjdG9yeSBzaG91bGQKKyAgICAgICAgICAgICAgICBiZSB1c2VkLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDxzY3JlZW4+CitpbnN0YWxsIC1kIDc1NSAkQlIvdXNyL1gxMVI2L2xpYi8KK212ICRCUi8KKyAgICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5lZWQgdG8gcGFja2FnZSB0aGUgZmlsZXM6CisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHNjcmVlbj4KKyRwcmVmaXgvYmluL3dpbmUsICRwcmVmaXgvYmluL2Rvc21vZCwgJHByZWZpeC9saWIvd2luZS8qCiskcHJlZml4L21hbi9tYW4xL3dpbmUuMSwgJHByZWZpeC9pbmNsdWRlL3dpbmUvKiwKKyRwcmVmaXgvYmluL3dpbmVzZXJ2ZXIsICRwcmVmaXgvYmluL3dpbmVjbGlwc3J2CisKKyVjb25maWcgL2V0Yy93aW5lLyoKKyVkb2MgLi4uIGNob29zZSBmcm9tIHRoZSB0b3BsZXZlbCBkaXJlY3RvcnkgYW5kIGRvY3VtZW50YXRpb24vCisgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcG9zdC1pbnN0YWxsIHNjcmlwdDoKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8c2NyZWVuPgoraWYgISBncmVwIC1xIC91c3IvWDExUjYvbGliL3dpbmUgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgZWNobyAiL3Vzci9YMTFSNi9saWIvd2luZSIgJmd0OyZndDsgL2V0Yy9sZC5zby5jb25mCitmaQorL3NiaW4vbGRjb25maWcKKyAgICAgICAgICAgICAgPC9zY3JlZW4+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwb3N0LXVuaW5zdGFsbCBzY3JpcHQ6CisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHNjcmVlbj4KK2lmIFsgIiQxIiA9IDAgXTsgdGhlbgorICAgIHBlcmwgLW5pIC1lICdwcmludCB1bmxlc3MgbTovdXNyL1gxMVI2L2xpYi93aW5lOjsnIC9ldGMvbGQuc28uY29uZgorZmkKKy9zYmluL2xkY29uZmlnCisgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRpbmcgYSBnb29kIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlPC9wYXJhPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIHJhdGlvbmFsZXMgb2YgbmVlZGluZyBhcyBsZXNzIGlucHV0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgdXNlciBhcyBwb3NzaWJsZSAgYXJpc2VzIHRoZSBuZWVkIGZvciBhIHZlcnkgZ29vZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG9uZSBzdXBwbGllZCB3aXRoIFdJTkUgaXMKKyAgICAgICAgICAgICAgICBjdXJyZW50bHkgbGFja2luZy4gV2UgbmVlZDoKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBbRHJpdmUgWF06CisgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGZvciB0aGUgZmxvcHB5LiBTcGVjaWZ5IHlvdXIgZGlzdHJpYnV0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBmbG9wcHkgbW91bnRwb2ludCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitQYXRoPS9hdXRvL2Zsb3BweQorICAgICAgICAgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEMgZm9yIHRoZSA8ZmlsZW5hbWU+QzpcPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSB3ZSB1c2UgdGhlIHVzZXJzIGhvbWVkaXJlY3RvcnksIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgZG8gc2VlIDxmaWxlbmFtZT5DOlw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgcm9vdC13cml0ZWFibGUgZGlyZWN0b3J5IG9mIGV2ZXJ5IHdpbmRvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBhbmQgdGhpcyBiYXNpY2FsbHkgaXMgaXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBVTklYLXVzZXIgY29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitQYXRoPSR7SE9NRX0KKyAgICAgICAgICAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSIGZvciB0aGUgQ0QtUm9tIGRyaXZlLiBTcGVjaWZ5IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgZGVmYXVsdCBDRC1ST00gZHJpdmVzIG1vdW50cG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorUGF0aD0vYXV0by9jZHJvbQorICAgICAgICAgICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlLiBXZSBkbyB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdG1wLzwvZmlsZW5hbWU+IChyYXRpb25hbGU6IGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgdGVtcG9yYXJ5IGRhdGEgYmVsb25ncyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi90bXAvPC9maWxlbmFtZT4sIEZIUyAyLjApCisgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBXIGZvciB0aGUgb3JpZ2luYWwgV2luZG93cyBpbnN0YWxsYXRpb24uIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHBvaW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5kb3dzXDwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHdpbmRvd3MgaW5zdGFsbGF0aW9uLiBUaGlzIGF2b2lkcworICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2l0aCByZW5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIChhcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluc3RhbmNlIDxmaWxlbmFtZT5sb3NlOTU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW48L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c1x3aW45NTwvZmlsZW5hbWU+KS4gRHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlL3BhY2thZ2UvaW5zdGFsbCB3ZSBsZWF2ZSB0aGlzICB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiwgaXQgaGFzIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIGFmdGVyIHRoZSBwYWNrYWdlIGluc3RhbGwuCisgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBaIGZvciB0aGUgVU5JWCBSb290IGRpcmVjdG9yeS4gVGhpcyBhdm9pZHMgYW55CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcyB3aXRoICJjb3VsZCBub3QgZmluZCBkcml2ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IiB1c2VycyBvY2Nhc2lvbmFseSBjb21wbGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQgaW4gdGhlIG5ld3Nncm91cCBhbmQgdGhlIGlyY2NoYW5uZWwuIEl0CisgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIG1ha2VzIHRoZSB3aG9sZSBkaXJlY3Rvcnkgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VhYmxlLiBUaGUgdHlwZSBvZiBaIHNob3VsZCBiZSBuZXR3b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgc28gYXBwbGljYXRpb25zIGV4cGVjdCBpdCB0byBiZSByZWFkb25seS4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorUGF0aD0vCisgICAgICAgICAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFt3aW5lXToKKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgIDxzY3JlZW4+CisgIFdpbmRvd3M9Yzpcd2luZG93c1wgCQkodGhlIHdpbmRvd3MvIHN1YmRpcmVjdG9yeSBpbiB0aGUgdXNlcnMKKyAgCQkJCSBob21lZGlyZWN0b3J5KQorICBTeXN0ZW09Yzpcd2luZG93c1xzeXN0ZW1cCSh0aGUgd2luZG93cy9zeXN0ZW0gc3ViZGlyZWN0b3J5IGluIHRoZSB1c2VycworICAJCQkJIGhvbWVkaXJlY3RvcnkpCisgIFBhdGg9Yzpcd2luZG93cztjOlx3aW5kb3dzXHN5c3RlbTtjOlx3aW5kb3dzXHN5c3RlbTMyO3c6XDt3OlxzeXN0ZW07dzpcc3lzdGVtMzI7CisgIDsgVXNpbmcgdGhpcyB0cmljayB3ZSBoYXZlIGluIGZhY3QgdHdvIHdpbmRvd3MgaW5zdGFsbGF0aW9ucyBpbiBvbmUsIHdlCisgIDsgZ2V0IHRoZSBzdHVmZiBmcm9tIHRoZSByZWFkb25seSBpbnN0YWxsYXRpb24gYW5kIGNhbiB3cml0ZSB0byBvdXIgb3duLgorICBUZW1wPXQ6XAkJCSh0aGUgVEVNUCBkaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPltUd2Vhay5MYXlvdXRdPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPHNjcmVlbj4KKyAgV2luZUxvb2s9d2luOTUJCShqdXN0IHRoZSBjb29sZXN0IGxvb2sgOykKKyAgICAgICAgICAgICAgICAgIDwvc2NyZWVuPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvc3NpYmx5IG1vZGlmeSB0aGUgW3Nwb29sZXJdLCBbc2VyaWFscG9ydHNdIGFuZAorICAgICAgICAgICAgICAgICAgICBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkZJWE1FPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+cG9zc2libHkgbW9yZSwgaW5jbHVkaW5nIHByaW50ZXIgc3R1ZmYuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgICAgICAgIDxwYXJhPkFkZCB0aGlzIHByZXBhcmVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB0aGUgcGFja2FnZS48L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT5JbnN0YWxsaW5nIFdJTkUgZm9yIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcjwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgcGFja2FnZSB1c2luZyB0aGUgdXN1YWwgcGFja2FnZXIKKyAgICAgICAgICAgICAgICA8Y29tbWFuZD5ycG0gLWkgd2luZS5ycG08L2NvbW1hbmQ+LiBZb3UgbWF5IGVkaXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy93aW5lL3dpbmUuY29uZjwvZmlsZW5hbWU+LCBbRHJpdmUgV10sCisgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8gYSBwb3NzaWJsZSB3aW5kb3dzIGluc3RhbGxhdGlvbiByaWdodAorICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0YWxsLiBUaGF0J3MgaXQuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IG9uIExpbnV4IHlvdSBzaG91bGQgc29tZWhvdyB0cnkgdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgIDxvcHRpb24+dW5oaWRlPC9vcHRpb24+IG1vdW50IG9wdGlvbiAoc2VlIDxjb21tYW5kPm1hbgorICAgICAgICAgICAgICAgICAgbW91bnQ8L2NvbW1hbmQ+KSB0byB0aGUgQ0QtUk9NIGVudHJ5IGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvZnN0YWI8L2ZpbGVuYW1lPiBkdXJpbmcgcGFja2FnZQorICAgICAgICAgICAgICAgIGluc3RhbGwsIGFzIHNldmVyYWwgc3R1cGlkIFdpbmRvd3MgcHJvZ3JhbXMgbWFyayBzb21lCisgICAgICAgICAgICAgICAgc2V0dXAgKCEpIGZpbGVzIGFzIGhpZGRlbiAoSVNPOTY2MCkgb24gQ0QtUk9Ncywgd2hpY2gKKyAgICAgICAgICAgICAgICB3aWxsIGdyZWF0bHkgY29uZnVzZSB1c2VycyBhcyB0aGV5IHdvbid0IGZpbmQgdGhlaXIKKyAgICAgICAgICAgICAgICBzZXR1cCBmaWxlcyBvbiB0aGUgQ0QtUk9NcyBhcyB0aGV5IHdlcmUgdXNlZCBvbgorICAgICAgICAgICAgICAgIFdpbmRvd3Mgc3lzdGVtcyB3aGVuIDxvcHRpb24+dW5oaWRlPC9vcHRpb24+IGlzIG5vdAorICAgICAgICAgICAgICAgIHNldCA7LVwgQW5kIG9mIGNvdXJzZSB0aGUgc2V0dXAgcHJvZ3JhbSB3aWxsIGNvbXBsYWluCisgICAgICAgICAgICAgICAgdGhhdCA8ZmlsZW5hbWU+c2V0dXAuaW5zPC9maWxlbmFtZT4gb3Igc29tZSBvdGhlciBtZXNzCisgICAgICAgICAgICAgICAgaXMgbWlzc2luZy4uLiBJZiB5b3UgY2hvb3NlIHRvIGRvIHNvLCB0aGVuIHBsZWFzZSBtYWtlCisgICAgICAgICAgICAgICAgdGhpcyBjaGFuZ2UgdmVyYm9zZSB0byB0aGUgYWRtaW4uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPkluc3RhbGxpbmcgV0lORSBmb3IgdGhlIHVzZXI8L3BhcmE+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSB1c2VyIHdpbGwgbmVlZCB0byBydW4gYSBzZXR1cCBzY3JpcHQgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGludm9jYXRpb24gb2YgV0lORS4gVGhpcyBzY3JpcHQgc2hvdWxkOgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvcHkgPGZpbGVuYW1lPi9ldGMvd2luZS93aW5lLmNvbmY8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgdXNlciBtb2RpZmljYXRpb24uCisgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgd2luZG93cworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gdG8gdXNlICh3aGljaCBtb2RpZmllcyB0aGUgY29waWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlKS4KKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgdGhlIHdpbmRvd3MgZGlyZWN0b3J5IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmM6XHdpbmRvd3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmM6XHdpbmRvd3Ncc3lzdGVtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jOlx3aW5kb3dzXFN0YXJ0IE1lbnVcUHJvZ3JhbXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmM6XFByb2dyYW0gRmlsZXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmM6XERlc2t0b3A8L2ZpbGVuYW1lPiwgZXRjLikKKyAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTeW1saW5rIGFsbCA8ZmlsZW5hbWU+LmRsbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmV4ZTwvZmlsZW5hbWU+IGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgaW5zdGFsbGF0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeS4gV2h5PyBTb21lCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1zIHJlZmVyZW5jZSAiJXdpbmRvd3NkaXIlL2ZpbGUuZGxsIiBvcgorICAgICAgICAgICAgICAgICAgICAiJXN5c3RlbWRpciUvZmlsZS5kbGwiIGRpcmVjdGx5IGFuZCBmYWlsIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBnaXZlIGEgaHVnZSBudW1iZXIgb2Ygc3ltbGlua3MsIHllcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgYW4gaW5zdGFsbGVyIGxhdGVyIG92ZXJ3cml0ZXMgb24gb2YKKyAgICAgICAgICAgICAgICAgICAgdGhvc2UgZmlsZXMsIGl0IHdpbGwgb3ZlcndyaXRlIHRoZSBzeW1saW5rIChzbworICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBmaWxlIG5vdyBsaWVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkpLgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5GSVhNRTwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk5vdCBzdXJlIHRoaXMgaXMgbmVlZGVkIGZvciBhbGwgZmlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uIGxhdGVyIGludm9jYXRpb24gdGhlIHNjcmlwdCBtaWdodCB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgcmVndWxhciBmaWxlcyBpbiAgdGhlIHVzZXJzIHdpbmRvd3MKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgYW5kIGluIHRoZSBnbG9iYWwgd2luZG93cyBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICBhbmQgcmVwbGFjZSBzYW1lIGZpbGVzIGJ5IHN5bWxpbmtzICh0byBhdm9pZAorICAgICAgICAgICAgICAgICAgICBkaXNrc3BhY2UgcHJvYmxlbXMpLgorICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKworICAgICAgPHBhcmE+RG9uZS48L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIHByb2NlZHVyZSByZXF1aXJlczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPk11Y2ggdGhvdWdodCBhbmQgd29yayBmcm9tIHRoZSBwYWNrYWdlciAoMXgpPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBObyB3b3JrIGZvciB0aGUgc3lzYWRtaW4uIFdlbGwgZXhjZXB0IG9uZSA8Y29tbWFuZD5ycG0KKyAgICAgICAgICAgICAgLWk8L2NvbW1hbmQ+IGFuZCBwb3NzaWJsZSBvbmUgZWRpdCBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgb3Igbm8gd29yayBmcm9tIHRoZSB1c2VyLCBleGNlcHQgcnVubmluZyB0aGUgcGVyLXVzZXIKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCBvbmNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPkl0IHNjYWxlcyB3ZWxsIGFuZCBzdWZmaWNlcyBtb3N0IG9mIHRoZSByYXRpb25hbGVzLjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisKKyAgICAgIDxicmlkZ2VoZWFkPlNhbXBsZSA8ZmlsZW5hbWU+d2luZS5pbmk8L2ZpbGVuYW1lPiBmb3IgT3BlbkxpbnV4IDIueDo8L2JyaWRnZWhlYWQ+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzs7Cis7OyBNUy1ET1MgZHJpdmVzIGNvbmZpZ3VyYXRpb24KKzs7Cis7OyBFYWNoIHNlY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorOzsgW0RyaXZlIFhdCis7OyBQYXRoPXh4eCAgICAgICAoVW5peCBwYXRoIGZvciBkcml2ZSByb290KQorOzsgVHlwZT14eHggICAgICAgKHN1cHBvcnRlZCB0eXBlcyBhcmUgJ2Zsb3BweScsICdoZCcsICdjZHJvbScgYW5kICduZXR3b3JrJykKKzs7IExhYmVsPXh4eCAgICAgIChkcml2ZSBsYWJlbCwgYXQgbW9zdCAxMSBjaGFyYWN0ZXJzKQorOzsgU2VyaWFsPXh4eCAgICAgKHNlcmlhbCBudW1iZXIsIDggY2hhcmFjdGVycyBoZXhhZGVjaW1hbCBudW1iZXIpCis7OyBGaWxlc3lzdGVtPXh4eCAoc3VwcG9ydGVkIHR5cGVzIGFyZSAnbXNkb3MnLydkb3MnLydmYXQnLCAnd2luOTUnLyd2ZmF0JywgJ3VuaXgnKQorOzsgICBUaGlzIGlzIHRoZSBGUyBXaW5lIGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgb24gYSBjZXJ0YWluCis7OyAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCis7OyAgIFJlY29tbWVuZGVkOgorOzsgICAtICJ3aW45NSIgZm9yIGV4dDJmcywgVkZBVCBhbmQgRkFUMzIKKzs7ICAgLSAibXNkb3MiIGZvciBGQVQxNiAodWdseSwgdXBncmFkaW5nIHRvIFZGQVQgZHJpdmVyIHN0cm9uZ2x5IHJlY29tbWVuZGVkKQorOzsgICBET04nVCB1c2UgInVuaXgiIHVubGVzcyB5b3UgaW50ZW5kIHRvIHBvcnQgcHJvZ3JhbXMgdXNpbmcgV2luZWxpYiAhCis7OyBEZXZpY2U9L2Rldi94eCAob25seSBpZiB5b3Ugd2FudCB0byBhbGxvdyByYXcgZGV2aWNlIGFjY2VzcykKKzs7CisKKzsKKzsKKzsgRmxvcHB5ICdBJyBhbmQgJ0InCis7Cis7IE9wZW5MaW51eCB1c2VzIGFuIGF1dG9tb3VudGVyIHVuZGVyIC9hdXRvLywgc28gd2UgdXNlIHRoYXQgdG9vLgorOworW0RyaXZlIEFdCitQYXRoPS9hdXRvL2Zsb3BweS8KK1R5cGU9ZmxvcHB5CitMYWJlbD1GbG9wcHkKK1NlcmlhbD04NzY1NDMyMQorRGV2aWNlPS9kZXYvZmQwCitGaWxlc3lzdGVtPXdpbjk1CisKKzsgCis7IENvbW1lbnQgaW4gT05MWSBpZiB5b3UgaGF2ZSBhIHNlY29uZCBmbG9wcHkgb3IgdGhlIGF1dG9tb3VudGVyIGhhbmdzCis7IGZvciA1IG1pbnV0ZXMuCis7Cis7W0RyaXZlIEJdCis7UGF0aD0vYXV0by9mbG9wcHkyLworO1R5cGU9ZmxvcHB5Cis7TGFiZWw9RmxvcHB5Cis7U2VyaWFsPTg3NjU0MzIxCis7RGV2aWNlPS9kZXYvZmQxCis7RmlsZXN5c3RlbT13aW45NQorCisKKzsKKzsgRHJpdmUgJ0MnIGxpbmtzIHRvIHRoZSB1c2VycyBob21lZGlyZWN0b3J5LiAKKzsgCis7IFRoaXMgbXVzdCBwb2ludCB0byBhIHdyaXRlYWJsZSBkaXJlY3Rvcnkgc3RydWN0dXJlIChub3QgeW91ciByZWFkb25seQorOyBtb3VudGVkIERPUyBwYXJ0aXRpb25zISkgc2luY2UgcHJvZ3JhbXMgd2FudCB0byBkdW1wIHN0dWZmIGludG8KKzsgIlByb2dyYW0gRmlsZXMvIiAiUHJvZ3JhbW1lLyIsICJ3aW5kb3dzLyIsICJ3aW5kb3dzL3N5c3RlbS8iIGV0Yy4KKzsgCis7IFRoZSBiYXNpYyBzdHJ1Y3R1cmUgaXMgc2V0IHVwIHVzaW5nIHRoZSBjb25maWcgc2NyaXB0LgorOworW0RyaXZlIENdCitQYXRoPSR7SE9NRX0KK1R5cGU9aGQKK0xhYmVsPU1TLURPUworRmlsZXN5c3RlbT13aW45NQorCis7Cis7IC90bXAvIGRpcmVjdG9yeQorOyAKKzsgVGhlIHRlbXAgZHJpdmUgKGFuZCBkaXJlY3RvcnkpIHBvaW50cyB0byAvdG1wLy4gV2luZG93cyBwcm9ncmFtcyBmaWxsIGl0Cis7IHdpdGgganVuaywgc28gaXQgaXMgYXBwcm9iaWF0ZS4KKzsKK1tEcml2ZSBUXQorUGF0aD0vdG1wCitUeXBlPWhkCitMYWJlbD1UbXAgRHJpdmUKK0ZpbGVzeXN0ZW09d2luOTUKKworOworOyAnVSdzZXIgaG9tZWRpcmVjdG9yeQorOyAKKzsgSnVzdCBpbiBjYXNlIHlvdSB3YW50IEM6XCBlbHNld2hlcmUuCis7IAorW0RyaXZlIFVdCitQYXRoPSR7SE9NRX0KK1R5cGU9aGQKK0xhYmVsPUhvbWUKK0ZpbGVzeXN0ZW09d2luOTUKKworOworOyBDRC0nUidPTSBkcml2ZSAoYXV0b21vdW50ZWQpCis7IAorOyBUaGUgZGVmYXVsdCBjZHJvbSBkcml2ZS4KKzsKKzsgSWYgYW4gYXBwbGljYXRpb24gKG9yIGdhbWUpIHdhbnRzIGEgc3BlY2lmaWMgQ0QtUk9NIHlvdSBtaWdodCBoYXZlIHRvCis7IHRlbXBvcmFyeSBjaGFuZ2UgdGhlIExhYmVsIHRvIHRoZSBvbmUgb2YgdGhlIENEIGl0c2VsZi4KKzsKKzsgSG93IHRvIHJlYWQgdGhlbSBpcyBkZXNjcmliZWQgaW4gL3Vzci9kb2Mvd2luZS1jdnMteHh4eHgvY2Ryb20tbGFiZWxzLgorOyAKK1tEcml2ZSBSXQorUGF0aD0vYXV0by9jZHJvbQorVHlwZT1jZHJvbQorTGFiZWw9Q0QtUm9tCitGaWxlc3lzdGVtPXdpbjk1CisKKzsKKzsgVGhlIGRyaXZlIHdoZXJlIHRoZSBvbGQgd2luZG93cyBpbnN0YWxsYXRpb24gcmVzaWRlcyAoaXQgcG9pbnRzIHRvIHRoZSAKKzsgd2luZG93cy8gc3ViZGlyZWN0b3J5KS4KKzsgCis7IFRoZSBQYXRoIGlzIG1vZGlmaWVkIGJ5IHRoZSB3aW5lc2V0dXAgc2NyaXB0LgorOworW0RyaXZlIFddCitQYXRoPS8KK1R5cGU9bmV0d29yaworTGFiZWw9V2luZG93cworRmlsZXN5c3RlbT13aW45NQorOworOyBUaGUgVU5JWCBSb290IGRpcmVjdG9yeSwgc28gYWxsIG90aGVyIHByb2dyYW1zIGFuZCBkaXJlY3RvcmllcyBhcmUgcmVhY2hhYmxlLgorOworOyB0eXBlIG5ldHdvcmsgaXMgdXNlZCB0byB0ZWxsIHByb2dyYW1zIHRvIG5vdCB3cml0ZSBoZXJlLiAKKzsKK1tEcml2ZSBaXQorUGF0aD0vCitUeXBlPW5ldHdvcmsKK0xhYmVsPVJPT1QKK0ZpbGVzeXN0ZW09d2luOTUKKworOworOyBTdGFuZGFyZCBXaW5kb3dzIHBhdGggZW50cmllcy4gV0lORSB3aWxsIG5vdCB3b3JrIGlmIHRoZXkgYXJlIGluY29ycmVjdC4KKzsKK1t3aW5lXQorOyAKKzsgVGhlIHdpbmRvd3MvIGRpcmVjdG9yeS4gSXQgbXVzdCBiZSB3cml0ZWFibGUsIGZvciBwcm9ncmFtcyB3cml0ZSBpbnRvIGl0LgorOworV2luZG93cz1jOlx3aW5kb3dzCis7Cis7IFRoZSB3aW5kb3dzL3N5c3RlbS8gZGlyZWN0b3J5LiBJdCBtdXN0IGJlIHdyaXRlYWJsZSwgZm9yIGVzcGVjaWFsbHkgc2V0dXAKKzsgcHJvZ3JhbXMgaW5zdGFsbCBkbGxzIGluIHRoZXJlLgorOworU3lzdGVtPWM6XHdpbmRvd3Ncc3lzdGVtCis7Cis7IFRoZSB0ZW1wIGRpcmVjdG9yeS4gU2hvdWxkIGJlIGNsZWFuZWQgcmVndWxhcnksIHNpbmNlIGluc3RhbGwgcHJvZ3JhbXMgbGVhdmUKKzsganVuayB3aXRob3V0IGVuZCBpbiB0aGVyZS4KKzsKK1RlbXA9dDpcCis7Cis7IFRoZSBkbGwgc2VhcmNoIHBhdGguIEl0IHNob3VsZCBjb250YWluIGF0IGxlYXN0OgorOyAtIHRoZSB3aW5kb3dzIGFuZCB0aGUgd2luZG93cy9zeXN0ZW0gZGlyZWN0b3J5IG9mIHRoZSB1c2VyLgorOyAtIHRoZSBnbG9iYWwgd2luZG93cyBhbmQgd2luZG93cy9zeXN0ZW0gZGlyZWN0b3J5IChmcm9tIGEgcG9zc2libGUgcmVhZG9ubHkKKzsgICB3aW5kb3dzIGluc3RhbGxhdGlvbiBlaXRoZXIgb24gbXNkb3MgZmlsZXN5c3RlbXMgb3Igc29tZXdoZXJlIGluIHRoZSBVTklYCis7ICAgZGlyZWN0b3J5IHRyZWUpCis7IC0gYW55IG90aGVyIHdpbmRvd3Mgc3R5bGUgZGlyZWN0b3JpZXMgeW91IHdhbnQgdG8gYWRkLgorOworUGF0aD1jOlx3aW5kb3dzO2M6XHdpbmRvd3Ncc3lzdGVtO2M6XHdpbmRvd3Ncc3lzdGVtMzI7dDpcO3c6XDt3OlxzeXN0ZW07dzpcc3lzdGVtMzIKKzsKKzsgT3V0ZGF0ZWQgYW5kIG5vIGxvbmdlciB1c2VkLiAoYnV0IG5lZWRzIHRvIGJlIHByZXNlbnQpLgorOworU3ltYm9sVGFibGVGaWxlPS4vd2luZS5zeW0KKworIyAmbHQ7d2luZWNvbmYmZ3Q7CisKKzsgCis7IERsbCBsb2Fkb3JkZXIgZGVmYXVsdHMuIE5vIG5lZWQgdG8gbW9kaWZ5LgorOworW0RsbERlZmF1bHRzXQorRVhUUkFfTERfTElCUkFSWV9QQVRIPSR7SE9NRX0vd2luZS9jdnMvbGliCitEZWZhdWx0TG9hZE9yZGVyID0gbmF0aXZlLCBlbGZkbGwsIHNvLCBidWlsdGluCisKKzsKKzsgV2hhdCAzMi8xNiBkbGxzIGJlbG9uZyB0byBlYWNoIG90aGVyIChjb250ZXh0IHdpc2UpLiBObyBuZWVkIHRvIG1vZGlmeS4KKzsKK1tEbGxQYWlyc10KK2tlcm5lbAk9IGtlcm5lbDMyCitnZGkJPSBnZGkzMgordXNlcgk9IHVzZXIzMgorY29tbWRsZwk9IGNvbWRsZzMyCitjb21tY3RybD0gY29tY3RsMzIKK3Zlcgk9IHZlcnNpb24KK3NoZWxsCT0gc2hlbGwzMgorbHpleHBhbmQ9IGx6MzIKK21tc3lzdGVtPSB3aW5tbQorbXN2aWRlbyA9IG1zdmZ3MzIKK3dpbnNvY2sJPSB3c29jazMyCisKKzsKKzsgV2hhdCB0eXBlIG9mIGRsbCB0byB1c2UgaW4gdGhlaXIgcmVzcGVjdGl2ZSBsb2Fkb3JkZXIuCis7IAorW0RsbE92ZXJyaWRlc10KK2tlcm5lbDMyLCBnZGkzMiwgdXNlcjMyCT0gYnVpbHRpbgora2VybmVsLCBnZGksIHVzZXIJPSBidWlsdGluCit0b29saGVscAkJPSBidWlsdGluCitjb21kbGczMiwgY29tbWRsZwk9IGVsZmRsbCwgYnVpbHRpbiwgbmF0aXZlCit2ZXJzaW9uLCB2ZXIJCT0gZWxmZGxsLCBidWlsdGluLCBuYXRpdmUKK3NoZWxsMzIsIHNoZWxsCQk9IGJ1aWx0aW4sIG5hdGl2ZQorbHozMiwgbHpleHBhbmQJCT0gYnVpbHRpbiwgbmF0aXZlCitjb21tY3RybCwgY29tY3RsMzIJPSBidWlsdGluLCBuYXRpdmUKK3dzb2NrMzIsIHdpbnNvY2sJPSBidWlsdGluCithZHZhcGkzMiwgY3J0ZGxsLCBudGRsbAk9IGJ1aWx0aW4sIG5hdGl2ZQorbXByLCB3aW5zcG9vbAkJPSBidWlsdGluLCBuYXRpdmUKK2RkcmF3LCBkaW5wdXQsIGRzb3VuZAk9IGJ1aWx0aW4sIG5hdGl2ZQord2lubW0sIG1tc3lzdGVtICAgICAgICAgPSBidWlsdGluCittc3ZpZGVvLCBtc3ZmdzMyICAgICAgICA9IGJ1aWx0aW4sIG5hdGl2ZQorbWNpY2RhLmRydiwgbWNpc2VxLmRydiAgPSBidWlsdGluLCBuYXRpdmUKK21jaXdhdmUuZHJ2CQk9IGJ1aWx0aW4sIG5hdGl2ZQorbWNpYXZpLmRydiwgbWNpYW5pbS5kcnYgPSBuYXRpdmUsIGJ1aWx0aW4KK3czMnNrcm5sICAgICAgICAgICAgICAgID0gYnVpbHRpbgord25hc3BpMzIsIHdvdzMyCQk9IGJ1aWx0aW4KK3N5c3RlbSwgZGlzcGxheSwgd3Byb2NzCT0gYnVpbHRpbgord2luZXBzCQkJPSBidWlsdGluCisKKzsKKzsgT3B0aW9ucyBzZWN0aW9uLiBEb2VzIG5vdCBuZWVkIHRvIGJlIGVkaXRlZC4KKzsKK1tvcHRpb25zXQorOyBhbGxvY2F0ZSBob3cgbXVjaCBzeXN0ZW0gY29sb3JzIG9uIHN0YXJ0dXAuIE5vIG5lZWQgdG8gbW9kaWZ5LgorQWxsb2NTeXN0ZW1Db2xvcnM9MTAwCisKKzs7Cis7IEZvbnQgc3BlY2lmaWNhdGlvbi4gWW91IHVzdWFsbHkgZG8gbm90IG5lZWQgdG8gZWRpdCB0aGlzIHNlY3Rpb24uCis7IAorOyBSZWFkIGRvY3VtZW50YXRpb24vZm9udHMgYmVmb3JlIGFkZGluZyBhbGlhc2VzCis7CitbZm9udHNdCis7IFRoZSByZXNvbHV0aW9uIGRlZmluZXMgd2hhdCBmb250cyB0byB1c2UgKHVzdWFsbHkgZWl0aGVyIDc1IG9yIDEwMCBkcGkgZm9udHMsCis7IG9yIG5lYXJlc3QgbWF0Y2gpLgorUmVzb2x1dGlvbiA9IDk2Cis7IERlZmF1bHQgZm9udAorRGVmYXVsdCA9IC1hZG9iZS10aW1lcy0KKworOworOyBzZXJpYWwgcG9ydHMgdXNlZCBieSAiQ09NMSIgIkNPTTIiICJDT00zIiAiQ09NNCIuIFVzZWZ1bCBmb3IgYXBwbGljYXRpb25zCis7IHRoYXQgdHJ5IHRvIGFjY2VzcyBzZXJpYWwgcG9ydHMuCis7IAorW3NlcmlhbHBvcnRzXQorQ29tMT0vZGV2L3R0eVMwCitDb20yPS9kZXYvdHR5UzEKK0NvbTM9L2Rldi9tb2RlbSwzODQwMAorQ29tND0vZGV2L21vZGVtCisKKzsKKzsgcGFyYWxsZWwgcG9ydChzKSB1c2VkIGJ5ICJMUFQxIiBldGMuIFVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRoYXQgdHJ5IHRvIAorOyBhY2Nlc3MgdGhlc2UgcG9ydHMuCis7CitbcGFyYWxsZWxwb3J0c10KK0xwdDE9L2Rldi9scDAKKworOworOyBXaGF0IHNwb29saW5nIHByb2dyYW0gdG8gdXNlIG9uIHByaW50aW5nLgorOyBVc2UgInxwcm9ncmFtIiBvciAiZmlsZW5hbWUiLCB3aGVyZSB0aGUgb3V0cHV0IHdpbGwgYmUgZHVtcGVkIGludG8uCis7Citbc3Bvb2xlcl0KK0xQVDE6PXxscHIKK0xQVDI6PXxncyAtc0RFVklDRT1iajIwMCAtc091dHB1dEZpbGU9L3RtcC9mcmVkIC1xIC0KK0xQVDM6PS9kZXYvbHAzCisKKzsgCis7IEFsbG93IHBvcnQgYWNjZXNzIHRvIFdJTkUgc3RhcnRlZCBieSB0aGUgcm9vdCB1c2VyLiBVc2VmdWwgZm9yIHNvbWUKKzsgc3VwcG9ydGVkIGRldmljZXMsIGJ1dCBpdCBjYW4gbWFrZSB0aGUgc3lzdGVtIHVuc3RhYmxlLgorOyBSZWFkIC91c3IvZG9jL3dpbmUtY3ZzLXh4eHh4L2lvcG9ydC10cmFjZS1oaW50cy4KKzsKK1twb3J0c10KKztyZWFkPTB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwCis7d3JpdGU9MHg3NzksMHgzNzksMHgyODAtMHgyYTAKKworOyBkZWJ1Z2dpbmcsIG5vdCBuZWVkIHRvIGJlIG1vZGlmaWVkLgorW3NweV0KK0V4Y2x1ZGU9V01fU0laRTtXTV9USU1FUjsKKworOworOyBXaGF0IG5hbWVzIGZvciB0aGUgcmVnaXN0cnkgZGF0YWZpbGVzLCBubyBuZWVkIHRvIG1vZGlmeS4KKzsKK1tSZWdpc3RyeV0KKzsgUGF0aHMgbXVzdCBiZSBnaXZlbiBpbiAvZGlyL2Rpci9maWxlLnJlZyBmb3JtYXQuCis7IFdpbmUgd2lsbCBub3QgdW5kZXJzdGFuZCBkb3MgZmlsZSBuYW1lcyBoZXJlLi4uCis7VXNlckZpbGVOYW1lPXh4eAkJOyBhbHRlcm5hdGUgcmVnaXN0cnkgZmlsZSBuYW1lICh1c2VyLnJlZykKKztMb2NhbE1hY2hpbmVGaWxlTmFtZT14eHgJOyAoc3lzdGVtLnJlZykKKworOworOyBMYXlvdXQvTG9vayBtb2RpZmljYXRpb25zLiBIZXJlIHlvdSBjYW4gc3dpdGNoIHdpdGggYSBzaW5nbGUgbGluZSBiZXR3ZWVuCis7IHdpbmRvd3MgMy4xIGFuZCB3aW5kb3dzIDk1IHN0eWxlLgorOyBUaGlzIGRvZXMgbm90IGNoYW5nZSBXSU5FIGJlaGF2aW91ciBvciByZXBvcnRlZCB2ZXJzaW9ucywganVzdCB0aGUgbG9vayEKKzsKK1tUd2Vhay5MYXlvdXRdCis7OyBXaW5lTG9vaz14eHggIChzdXBwb3J0ZWQgc3R5bGVzIGFyZSAnV2luMzEnKGRlZmF1bHQpLCAnV2luOTUnLCAnV2luOTgnKQorV2luZUxvb2s9V2luOTUKKworOworOyBXaGF0IHByb2dyYW1zIHRvIHN0YXJ0IG9uIFdJTkUgc3RhcnR1cC4gKHlvdSBzaG91bGQgcHJvYmFibHkgbGVhdmUgaXQgZW1wdHkpCis7CitbcHJvZ3JhbXNdCitEZWZhdWx0PQorU3RhcnR1cD0KKworOyBkZWZ1bmN0IHNlY3Rpb24uCitbQ29uc29sZV0KKztYdGVybVByb2c9bnh0ZXJtCis7SW5pdGlhbFJvd3M9MjUKKztJbml0aWFsQ29sdW1ucz04MAorO1Rlcm1pbmFsVHlwZT1ueHRlcm0KKworIyAmbHQ7L3dpbmVjb25mJmd0OworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJ3aW5lLWRvYy5zZ21sIiAiYm9vayIgInBhcnQiICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9wYXRjaGVzLnNnbWwgYi9kb2N1bWVudGF0aW9uL3BhdGNoZXMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2E5YTJmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wYXRjaGVzLnNnbWwKQEAgLTAsMCArMSwxMSBAQAorICAgIDxjaGFwdGVyIGlkPSJwYXRjaGVzIj4KKyAgICAgIDx0aXRsZT5TdWJtaXR0aW5nIFBhdGNoZXM8L3RpdGxlPgorICAgIDxwYXJhPkhvdyB0byBjcmVhdGUgcGF0Y2hlcywgYW5kIHdoZXJlIHRvIHNlbmQgdGhlbS4uLjwvcGFyYT4KKyAgICA8L2NoYXB0ZXI+CisKKzwhLS0gS2VlcCB0aGlzIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorTG9jYWwgdmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6KCJ3aW5lLWRvYy5zZ21sIiAiYm9vayIgInBhcnQiICJjaGFwdGVyIiAiIikKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9wb3J0aW5nLnNnbWwgYi9kb2N1bWVudGF0aW9uL3BvcnRpbmcuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTBmMGNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wb3J0aW5nLnNnbWwKQEAgLTAsMCArMSwzOTUgQEAKKyAgPGNoYXB0ZXIgaWQ9InBvcnRpbmciPgorICAgIDx0aXRsZT5Qb3J0aW5nIFdpbmUgdG8gbmV3IFBsYXRmb3JtczwvdGl0bGU+CisgICAgPHBhcmE+UG9ydGluZyBXaW5lIHRvIGRpZmZlcmVudCAoVU5JWC1iYXNlZCkgb3BlcmF0aW5nIHN5c3RlbXMuLi48L3BhcmE+CisKKyAgICA8c2VjdDEgaWQ9IndpbmUtcG9ydGluZyI+CisgICAgICA8dGl0bGU+UG9ydGluZzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ID8/PworICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2hvdy10by1wb3J0PC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPldoYXQgaXMgdGhpcz88L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgbm90ZSBpcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5Ib3cgdG8gcG9ydCBXaW5lIHRvIHlvdXIgZmF2b3VyaXRlIG9wZXJhdGluZyBzeXN0ZW08L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5XaHkgeW91IHByb2JhYmx5IHNob3VsZG4ndCB1c2UgPHN5bWJvbD4jaWZkZWYgTXlPUzwvc3ltYm9sPjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPldoYXQgdG8gZG8gaW5zdGVhZC48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBkb2N1bWVudCBkb2VzIG5vdCBzYXkgYSB0aGluZyBhYm91dCBob3cgdG8gcG9ydCBXaW5lIHRvCisgICAgICAgICAgbm9uLTM4NiBvcGVyYXRpbmcgc3lzdGVtcywgdGhvdWdoLiAgWW91IHdvdWxkIG5lZWQgYSBDUFUKKyAgICAgICAgICBlbXVsYXRvci4gIExldCdzIGdldCBXaW5lIGludG8gYSBiZXR0ZXIgc2hhcGUgb24gMzg2IGZpcnN0LAorICAgICAgICAgIE9LPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5XaHkgPHN5bWJvbD4jaWZkZWYgTXlPUzwvc3ltYm9sPiBpcyBwcm9iYWJseSBhIG1pc3Rha2UuPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBPcGVyYXRpbmcgc3lzdGVtcyBjaGFuZ2UuICBNYXliZSB5b3VycyBkb2Vzbid0IGhhdmUgdGhlCisgICAgICAgICAgPGZpbGVuYW1lPmZvby5oPC9maWxlbmFtZT4gaGVhZGVyLCBidXQgbWF5YmUgYSBmdXR1cmUKKyAgICAgICAgICB2ZXJzaW9uIHdpbGwgaGF2ZSBpdC4gIElmIHlvdSB3YW50IHRvIDxzeW1ib2w+I2luY2x1ZGUKKyAgICAgICAgICAgICZsdDtmb28uaCZndDs8L3N5bWJvbD4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgb3BlcmF0aW5nCisgICAgICAgICAgc3lzdGVtIHlvdSBhcmUgdXNpbmc7IGl0IG9ubHkgbWF0dGVycyB3aGV0aGVyCisgICAgICAgICAgPGZpbGVuYW1lPmZvby5oPC9maWxlbmFtZT4gaXMgdGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRnVydGhlcm1vcmUsIG9wZXJhdGluZyBzeXN0ZW1zIGNoYW5nZSBuYW1lcyBvciAiZm9yayIgaW50bworICAgICAgICAgIHNldmVyYWwgb25lcy4gIEFuIDxzeW1ib2w+I2lmZGVmIE15T3M8L3N5bWJvbD4gd2lsbCBicmVhaworICAgICAgICAgIG92ZXIgdGltZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgdXNlIHRoZSBmZWF0dXJlIG9mIDxjb21tYW5kPmF1dG9jb25mPC9jb21tYW5kPiAtLSB0aGUKKyAgICAgICAgICBHbnUgYXV0by1jb25maWd1cmF0aW9uIHV0aWxpdHkgLS0gd2lzZWx5LCB5b3Ugd2lsbCBoZWxwCisgICAgICAgICAgZnV0dXJlIHBvcnRlcnMgYXV0b21hdGljYWxseSBiZWNhdXNlIHlvdXIgY2hhbmdlcyB3aWxsIHRlc3QKKyAgICAgICAgICBmb3IgPGVtcGhhc2lzPmZlYXR1cmVzPC9lbXBoYXNpcz4sIG5vdCBuYW1lcyBvZiBvcGVyYXRpbmcKKyAgICAgICAgICBzeXN0ZW1zLiAgQSBmZWF0dXJlIGNhbiBiZSBtYW55IHRoaW5nczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+ZXhpc3RhbmNlIG9mIGEgaGVhZGVyIGZpbGU8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5leGlzdGFuY2Ugb2YgYSBsaWJyYXJ5IGZ1bmN0aW9uPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+ZXhpc3RhbmNlIG9mIGxpYnJhcmllczwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPmJ1Z3MgaW4gaGVhZGVyIGZpbGVzLCBsaWJyYXJ5IGZ1bmN0aW9ucywgdGhlIGNvbXBpbGVyLCAuLi48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4oeW91IG5hbWUgaXQpPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3Ugd2lsbCBuZWVkIEdudSBBdXRvY29uZiwgd2hpY2ggeW91IGNhbiBnZXQgZnJvbSB5b3VyCisgICAgICAgICAgZnJpZW5kbHkgR251IG1pcnJvci4gIFRoaXMgcHJvZ3JhbSB0YWtlcyBXaW5lJ3MKKyAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlLmluPC9maWxlbmFtZT4gZmlsZSBhbmQgcHJvZHVjZXMgYQorICAgICAgICAgIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzaGVsbCBzY3JpcHQgdGhhdCB1c2VycyB1c2UKKyAgICAgICAgICB0byBjb25maWd1cmUgV2luZSB0byB0aGVpciBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlcmUgPGVtcGhhc2lzPmFyZTwvZW1waGFzaXM+IGV4Y2VwdGlvbnMgdG8gdGhlICJhdm9pZAorICAgICAgICAgIDxzeW1ib2w+I2lmZGVmIE15T1M8L3N5bWJvbD4iIHJ1bGUuIFdpbmUsIGZvciBleGFtcGxlLCBuZWVkcworICAgICAgICAgIHRoZSBpbnRlcm5hbHMgb2YgdGhlIHNpZ25hbCBzdGFjayAtLSB0aGF0IGNhbm5vdCBlYXNpbHkgYmUKKyAgICAgICAgICBkZXNjcmliZWQgaW4gdGVybXMgb2YgZmVhdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTGV0J3Mgbm93IHR1cm4gdG8gc3BlY2lmaWMgcG9ydGluZyBwcm9ibGVtcyBhbmQgaG93IHRvIHNvbHZlCisgICAgICAgICAgdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+TXlPUyBkb2Vzbid0IGhhdmUgdGhlIDxmaWxlbmFtZT5mb28uaDwvZmlsZW5hbWU+IGhlYWRlciE8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZmlyc3Qgc3RlcCBpcyB0byBtYWtlIDxjb21tYW5kPmF1dG9jb25mPC9jb21tYW5kPiBjaGVjaworICAgICAgICAgIGZvciB0aGlzIGhlYWRlci4gSW4gPGZpbGVuYW1lPmNvbmZpZ3VyZS5pbjwvZmlsZW5hbWU+IHlvdQorICAgICAgICAgIGFkZCBhIHNlZ21lbnQgbGlrZSB0aGlzIGluIHRoZSBzZWN0aW9uIHRoYXQgY2hlY2tzIGZvcgorICAgICAgICAgIGhlYWRlciBmaWxlcyAoc2VhcmNoIGZvciAiaGVhZGVyIGZpbGVzIik6CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorQUNfQ0hFQ0tfSEVBREVSKGZvby5oLCBBQ19ERUZJTkUoSEFWRV9GT09fSCkpCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBhIGhlYWRlciBmaWxlIHdpdGggdGhlCisgICAgICAgICAgc2FtZSBjb250ZW50cyBidXQgYSBkaWZmZXJlbnQgbmFtZSwgc2F5CisgICAgICAgICAgPGZpbGVuYW1lPmJhci5oPC9maWxlbmFtZT4sIGFkZCBhIGNoZWNrIGZvciB0aGF0IGFsc28uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTm93IHlvdSBjYW4gY2hhbmdlCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgJmx0O2Zvby5oJmd0OworICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB0bworICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpZmRlZiBIQVZFX0ZPT19ICisjaW5jbHVkZSAmbHQ7Zm9vLmgmZ3Q7CisjZWxpZiBkZWZpbmVkIChIQVZFX0JBUl9IKQorI2luY2x1ZGUgJmx0O2Jhci5oJmd0OworI2VuZGlmCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgZXZlbgorICAgICAgICAgIHRob3VnaCBpdCBoYXMgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGJlaW5nIHVzZWQsIHlvdSBtaWdodAorICAgICAgICAgIGhhdmUgdG8gYWRkIGFuIDxzeW1ib2w+I2Vsc2U8L3N5bWJvbD4gc2VjdGlvbiB0byB0aGUKKyAgICAgICAgICBjb25kaXRpb25hbC4gIEF2b2lkIHRoaXMgaWYgeW91IGNhbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gYWRkIDxzeW1ib2w+I3VuZGVmIEhBVkVfRk9PX0g8L3N5bWJvbD4KKyAgICAgICAgICAoZXRjLikgdG8gPGZpbGVuYW1lPmluY2x1ZGUvY29uZmlnLmguaW48L2ZpbGVuYW1lPgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZpbmlzaCB1cCB3aXRoIDxjb21tYW5kPm1ha2UgY29uZmlndXJlPC9jb21tYW5kPiBhbmQKKyAgICAgICAgICA8Y29tbWFuZD4uL2NvbmZpZ3VyZTwvY29tbWFuZD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPk15T1MgZG9lc24ndCBoYXZlIHRoZSA8ZnVuY3Rpb24+YmFyPC9mdW5jdGlvbj4gZnVuY3Rpb24hPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHR5cGljYWwgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZQorICAgICAgICAgIDxmdW5jdGlvbj5tZW1tb3ZlPC9mdW5jdGlvbj4gZnVuY3Rpb24uICBUbyBzb2x2ZSB0aGlzCisgICAgICAgICAgcHJvYmxlbSB5b3Ugd291bGQgYWRkIDxmdW5jdGlvbj5tZW1tb3ZlPC9mdW5jdGlvbj4gdG8gdGhlCisgICAgICAgICAgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCA8Y29tbWFuZD5hdXRvY29uZjwvY29tbWFuZD4gY2hlY2tzCisgICAgICAgICAgZm9yLiAgSW4gPGZpbGVuYW1lPmNvbmZpZ3VyZS5pbjwvZmlsZW5hbWU+IHlvdSBzZWFyY2ggZm9yCisgICAgICAgICAgPGZ1bmN0aW9uPkFDX0NIRUNLX0ZVTkNTPC9mdW5jdGlvbj4gYW5kIGFkZAorICAgICAgICAgIDxmdW5jdGlvbj5tZW1tb3ZlPC9mdW5jdGlvbj4uICAoWW91IHdpbGwgbm90aWNlIHRoYXQgc29tZW9uZQorICAgICAgICAgIGFscmVhZHkgZGlkIHRoaXMgZm9yIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4pCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU2Vjb25kbHksIHlvdSB3aWxsIGFsc28gbmVlZCB0byBhZGQgPHN5bWJvbD4jdW5kZWYKKyAgICAgICAgICAgIEhBVkVfQkFSPC9zeW1ib2w+IHRvCisgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGUvY29uZmlnLmguaW48L2ZpbGVuYW1lPgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBuZXh0IHN0ZXAgZGVwZW5kcyBvbiB0aGUgbmF0dXJlIG9mIHRoZSBtaXNzaW5nIGZ1bmN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgICAgPHRlcm0+Q2FzZSAxOjwvdGVybT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQncyBlYXN5IHRvIHdyaXRlIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgZnVuY3Rpb24uICAoPGZ1bmN0aW9uPm1lbW1vdmU8L2Z1bmN0aW9uPiBiZWxvbmdzIHRvCisgICAgICAgICAgICAgICAgdGhpcyBjYXNlLikKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgYWRkIHlvdXIgaW1wbGVtZW50YXRpb24gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlzYy9wb3J0LmM8L2ZpbGVuYW1lPiBzdXJyb3VuZGVkIGJ5CisgICAgICAgICAgICAgICAgPHN5bWJvbD4jaWZuZGVmIEhBVkVfTUVNTU9WRTwvc3ltYm9sPiBhbmQKKyAgICAgICAgICAgICAgICA8c3ltYm9sPiNlbmRpZjwvc3ltYm9sPi4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgaGF2ZSB0byBhZGQgYSBwcm90b3R5cGUgZm9yIHlvdXIgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgSWYgc28sIDxmaWxlbmFtZT5pbmNsdWRlL21pc2NlbXUuaDwvZmlsZW5hbWU+IG1pZ2h0IGJlIHRoZSBwbGFjZS4gIERvbid0CisgICAgICAgICAgICAgICAgZm9yZ2V0IHRvIHByb3RlY3QgdGhhdCBkZWZpbml0aW9uIGJ5IDxzeW1ib2w+I2lmbmRlZgorICAgICAgICAgICAgICAgICAgSEFWRV9NRU1NT1ZFPC9zeW1ib2w+IGFuZCA8c3ltYm9sPiNlbmRpZjwvc3ltYm9sPiBhbHNvIQorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgICA8dGVybT5DYXNlIDI6PC90ZXJtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGdlbmVyYWwgaW1wbGVtZW50YXRpb24gaXMgaGFyZCwgYnV0IFdpbmUgaXMgb25seQorICAgICAgICAgICAgICAgIHVzaW5nIGEgc3BlY2lhbCBjYXNlLgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgdGhlIHZhcmlvdXMgPGZ1bmN0aW9uPndhaXQ8L2Z1bmN0aW9uPgorICAgICAgICAgICAgICAgIGNhbGxzIHVzZWQgaW4gPGZ1bmN0aW9uPlNJR05BTF9jaGlsZDwvZnVuY3Rpb24+IGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9hZGVyL3NpZ25hbC5jPC9maWxlbmFtZT4uICBIZXJlIHdlIGhhdmUgYQorICAgICAgICAgICAgICAgIG11bHRpLWJyYW5jaCBjYXNlIG9uIGZlYXR1cmVzOgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpZmRlZiBIQVZFX1RISVMKKy4uLgorI2VsaWYgZGVmaW5lZCAoSEFWRV9USEFUKQorLi4uCisjZWxpZiBkZWZpbmVkIChIQVZFX1NPTUVUSElOR19FTFNFKQorLi4uCisjZW5kaWYKKyAgICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB0ZXN0aW5nIG9uCisgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbXMuICBJZiBhIG5ldyB2ZXJzaW9uIG9mIHlvdXIgb3BlcmF0aW5nCisgICAgICAgICAgICAgICAgc3lzdGVtcyBjb21lcyBvdXQgYW5kIGFkZHMgYSBuZXcgZnVuY3Rpb24sIHRoaXMgY29kZQorICAgICAgICAgICAgICAgIHdpbGwgbWFnaWNhbGx5IHN0YXJ0IHVzaW5nIGl0LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRmluaXNoIHVwIHdpdGggPGNvbW1hbmQ+bWFrZSBjb25maWd1cmU8L2NvbW1hbmQ+IGFuZAorICAgICAgICAgIDxjb21tYW5kPi4vY29uZmlndXJlPC9jb21tYW5kPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9Im9zMi13aW5lIj4KKyAgICAgIDx0aXRsZT5SdW5uaW5nICYgQ29tcGlsaW5nIFdJTkUgaW4gT1MvMjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5IFJvYmVydCBQb3VsaW90ICZsdDtrcnlub3NAY2xpYy5uZXQmZ3Q7LCBKYW51YXJ5IDksIDE5OTcKKworICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3dpbmVfb3MyPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugd2FudCB0byBoZWxwIHRoZSBwb3J0IG9mIFdJTkUgdG8gT1MvMiwgc2VuZCBtZSBhCisgICAgICAgIG1lc3NhZ2UgYXQgPGVtYWlsPmtyeW5vc0BjbGljLm5ldDwvZW1haWw+IEkgY3VycmVudGx5IGRvbid0CisgICAgICAgIHdhbnQgYmV0YSB0ZXN0ZXJzLiBJdCBtdXN0IHdvcmsgYmVmb3JlIHdlIGNhbiB0ZXN0IGl0LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEhlcmUgaXMgd2hhdCB5b3UgbmVlZCB0byAodHJ5IHRvKSBjb21waWxlIFdpbmUgZm9yIE9TLzI6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5FTVggMC45YyAoZml4IDIpPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+WEZyZWU4NiAzLjIgT1MvMiAod2l0aCBkZXZlbG9wbWVudCBsaWJyYXJpZXMpPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8Y29tbWFuZD5iYXNoPC9jb21tYW5kPiwgZ251IDxjb21tYW5kPm1ha2U8L2NvbW1hbmQ+LAorICAgICAgICAgICAgPGNvbW1hbmQ+Z3JlcDwvY29tbWFuZD4sIDxjb21tYW5kPnRhcjwvY29tbWFuZD4sCisgICAgICAgICAgICA8Y29tbWFuZD5iaXNvbjwvY29tbWFuZD4sIDxjb21tYW5kPmZsZXg8L2NvbW1hbmQ+CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+PGNvbW1hbmQ+c2VkPC9jb21tYW5kPiAoYSB3b3JraW5nIGNvcHkgb2YpPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+eHBtPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+PGNvbW1hbmQ+ZGlmZjwvY29tbWFuZD4gYW5kIDxjb21tYW5kPnBhdGNoPC9jb21tYW5kPgorICAgICAgICAgICAgYXJlIHJlY29tbWVuZGVkPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+TG90cyBvZiBkaXNrIHNwYWNlIChhYm91dCA0MC01MCBtZWdzIGFmdGVyIEVNWCBhbmQgWEZyZWUgaW5zdGFsbGVkKTwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gY29tcGlsZToKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNjcmVlbj4KKzxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0PnNoPC91c2VyaW5wdXQ+Cis8cHJvbXB0PiQgPC9wcm9tcHQ+PHVzZXJpbnB1dD50b29scy9tYWtlX29zMi5zaDwvdXNlcmlucHV0PgorPHByb21wdD4kIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+bWFrZSBkZXBlbmQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0Pm1ha2U8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0PmVteGJpbmQgd2luZTwvdXNlcmlucHV0PgorICAgICAgPC9zY3JlZW4+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBDdXJyZW50bHk6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT48Y29tbWFuZD5jb25maWd1cmU8L2NvbW1hbmQ+IGFuZCA8Y29tbWFuZD5tYWtlIGRlcGVuZDwvY29tbWFuZD4gd29yay4uLjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPjxjb21tYW5kPm1ha2U8L2NvbW1hbmQ+IGNvbXBpbGVzICh3aXRoIGEgbW9kaWZpZWQKKyAgICAgICAgICAgIExpbnV4IDxmaWxlbmFtZT5tbWFuLmg8L2ZpbGVuYW1lPiksIGJ1dCBkb2Vzbid0CisgICAgICAgICAgICBsaW5rLjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPnNpZ25hbCBoYW5kbGluZyBpcyBob3JyaWJsZS4uLiAoaWYgYW55KTwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPkVNWCBkb2Vzbid0IHN1cHBvcnQgPGZ1bmN0aW9uPm1tYXA8L2Z1bmN0aW9uPiAoYW5kCisgICAgICAgICAgICByZWxhdGVkKSwgU3lzViBJUEMgYW5kIDxmdW5jdGlvbj5zdGFmcygpPC9mdW5jdGlvbj48L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFhGcmVlODYvT1MyIDMuMiBkb2Vzbid0IHN1cHBvcnQKKyAgICAgICAgICAgIDxmdW5jdGlvbj5YU2htUXVlcnlFeHRlbnNpb24oKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgICAgPGZ1bmN0aW9uPlhTaG1QaXhtYXBGb3JtYXQoKTwvZnVuY3Rpb24+IGR1ZSB0byB0aGUgc2FtZQorICAgICAgICAgICAgbGFjayBpbiBFTVguLi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoYXQgbmVlZHMgdG8gYmUgcmVkb25lOgorICAgICAgPC9wYXJhPgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+TERUICh1c2luZyA8ZnVuY3Rpb24+RG9zQWxsb2NTZWc8L2Z1bmN0aW9uPiBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPm1lbW9yeS9sZHQuYzwvZmlsZW5hbWU+KSAqPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+SW1wbGVtZW50IDxmdW5jdGlvbj5tbWFwKCk8L2Z1bmN0aW9uPiBhbmQgU3lzViBJUEMgaW4gRU1YICo8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5GaWxlIGZ1bmN0aW9ucywgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+SS9PIGFjY2VzcyAoZG8gaXQhKSw8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5Db21tdW5pY2F0aW9uIChtb2RlbSksPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+SW50ZXJydXB0IChpZiBpbnQgdW5rbm93biwgY2FsbCBjdXJyZW50IFJlYWxNb2RlIG9uZS4uLiksIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB0aHJlYWQgc2FmZSAoaG93IGRvZXMgV2luOTUvTlQgaGFuZGxlIG11bHRpLXRocmVhZD8pLAorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTW92ZSBYIGZ1bmN0aW9ucyBpbiBzb21lIGZpbGVzIChhbmQgbWFrZSBhIHdyYXBwZXIsIHRvIHVzZSBQTSBpbnN0ZWFkIGxhdHRlciksCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+UmV0dXJuIHJpZ2h0IENQVSB0eXBlLCA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5NYWtlIHdpbnNvY2sgd29yazwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGdvb2QgdGhpbmdzOgorICAgICAgPC9wYXJhPgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+T1MvMiBoYXZlIERPUyBpbnRlcnJ1cHRzPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+T1MvMiBoYXZlIEkvTyBwb3J0IGFjY2VzczwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPk9TLzIgaGF2ZSBtdWx0aS10aHJlYWQ8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT5NZXJsaW4gaGF2ZSBPcGVuMzIgKHRvIGJlIHVzZWQgbGF0ZXIuLi4pPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3ByaW50aW5nIGIvZG9jdW1lbnRhdGlvbi9wcmludGluZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1NzQwNC4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL3ByaW50aW5nCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotUHJpbnRpbmcgaW4gV2luZQotPT09PT09PT09PT09PT09PQotCi1QcmludGluZyBpbiBXaW5lIGNhbiBiZSBkb25lIGluIG9uZSBvZiB0d28gd2F5cy4gQm90aCBvZiB3aGljaCBhcmUgdmVyeSBhbHBoYS4KLQotMS4gVXNlIGEgd2luZG93cyAzLjEgcHJpbnRlciBkcml2ZXIuCi0KLTIuIFVzZSB0aGUgYnVpbHRpbiBXaW5lIFBvc3RzY3JpcHQgZHJpdmVyICgrIGdob3N0c2NyaXB0IHRvIHByb2R1Y2Ugb3V0cHV0IGZvcgotICAgbm9uLXBvc3RzY3JpcHQgcHJpbnRlcnMpLgotCi0KLU5vdGUgdGhhdCBhdCB0aGUgbW9tZW50IFdpblByaW50ZXJzIChjaGVhcCwgZHVtYiBwcmludGVycyB0aGF0IHJlcXVpcmUgdGhlIGhvc3QKLWNvbXB1dGVyIHRvIGV4cGxpY2l0bHkgY29udHJvbCB0aGUgaGVhZCkgd2lsbCBub3Qgd29yay4gSXQgaXMgdW5jbGVhciB3aGV0aGVyCi10aGV5IGV2ZXIgd2lsbC4KLQotCi0xLiBFeHRlcm5hbCBwcmludGVyIGRyaXZlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQXQgcHJlc2VudCBvbmx5IDE2IGJpdCBkcml2ZXJzIHdpbGwgd29yayAobm90ZSB0aGF0IHRoZXNlIGluY2x1ZGUgd2luOXgKLWRyaXZlcnMpLgotCi1BZGQKLQotcHJpbnRlcj1vbgotCi10byB0aGUgW3dpbmVdIHNlY3Rpb24gb2Ygd2luZS5jb25mIChvciB+Ly53aW5lcmMpLiBUaGlzIGxldHMgQ3JlYXRlREMgcHJvY2VlZAotaWYgaXRzIGRyaXZlciBhcmd1bWVudCBpcyBhIDE2IGJpdCBkcml2ZXIuCi0KLVlvdSB3aWxsIHByb2JhYmx5IGFsc28gbmVlZCB0byBhZGQKLQotVFRFbmFibGU9MAotVFRPbmx5PTAKLQotdG8gdGhlIFtUcnVlVHlwZV0gc2VjdGlvbiBvZiB3aW4uaW5pIC4KLQotVGhlIGNvZGUgZm9yIHRoZSBkcml2ZXIgaW50ZXJmYWNlIGlzIGluIGdyYXBoaWNzL3dpbjE2ZHJ2IC4KLQotCi0yLiBCdWlsdGluIFdpbmUgUG9zdFNjcmlwdCBkcml2ZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRW5hYmxlcyBwcmludGluZyBvZiBQb3N0U2NyaXB0IGZpbGVzIHZpYSBhIGRyaXZlciBidWlsdCBpbnRvIFdpbmUuIFNlZQotZG9jdW1lbnRhdGlvbi9wc2RyaXZlciBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4gVGhlIGNvZGUgZm9yIHRoZQotUG9zdFNjcmlwdCBkcml2ZXIgaXMgaW4gZ3JhcGhpY3MvcHNkcnYgLgotCi0KLQotU3Bvb2xpbmcKLT09PT09PT09Ci1TcG9vbGluZyBpcyByYXRoZXIgcHJpbWl0aXZlLiBUaGUgW3Nwb29sZXJdIHNlY3Rpb24gb2Ygd2luZS5jb25mIG1hcHMgYSBwb3J0Ci0oZS5nLiBMUFQxOikgdG8gYSBmaWxlIG9yIGEgY29tbWFuZCB2aWEgYSBwaXBlLiBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGxpbmVzCi0KLUxQVDE6PWZvby5wcwotTFBUMjo9fGxwcgotCi1tYXAgTFBUMTogdG8gZmlsZSBmb28ucHMgYW5kIExQVDI6IHRvIHRoZSBscHIgY29tbWFuZC4gSWYgYSBqb2IgaXMgc2VudCB0byBhbgotdW5saXN0ZWQgcG9ydCB0aGVuIGEgZmlsZSBpcyBjcmVhdGVkIHdpdGggdGhhdCBwb3J0J3MgbmFtZSBlLmcuIGZvciBMUFQzOiBhCi1maWxlIGNhbGxlZCBMUFQzOiB3b3VsZCBiZSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9wcmludGluZy5zZ21sIGIvZG9jdW1lbnRhdGlvbi9wcmludGluZy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjRjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3ByaW50aW5nLnNnbWwKQEAgLTAsMCArMSwyNjUgQEAKKyAgPGNoYXB0ZXIgaWQ9InByaW50aW5nIj4KKyAgICA8dGl0bGU+UHJpbnRpbmcgaW4gV2luZTwvdGl0bGU+CisgICAgPHBhcmE+SG93IHRvIHByaW50IGRvY3VtZW50cyBpbiBXaW5lLi4uPC9wYXJhPgorCisgICAgPHNlY3QxIGlkPSJ3aW5lLXByaW50aW5nIj4KKyAgICAgIDx0aXRsZT5QcmludGluZzwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICB3cml0dGVuIGJ5ICg/Pz8pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vcHJpbnRpbmc8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFByaW50aW5nIGluIFdpbmUgY2FuIGJlIGRvbmUgaW4gb25lIG9mIHR3byB3YXlzLiBCb3RoIG9mIHdoaWNoIGFyZSB2ZXJ5CisgICAgICAgIGFscGhhLgorICAgICAgPC9wYXJhPgorICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+VXNlIGFuIGV4dGVybmFsIHdpbmRvd3MgMy4xIHByaW50ZXIgZHJpdmVyLjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSBidWlsdGluIFdpbmUgUG9zdHNjcmlwdCBkcml2ZXIgKCsgZ2hvc3RzY3JpcHQgdG8gcHJvZHVjZQorICAgICAgICAgICAgb3V0cHV0IGZvciBub24tcG9zdHNjcmlwdCBwcmludGVycykuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKworICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCBhdCB0aGUgbW9tZW50IFdpblByaW50ZXJzIChjaGVhcCwgZHVtYiBwcmludGVycyB0aGF0IHJlcXVpcmUKKyAgICAgICAgdGhlIGhvc3QgY29tcHV0ZXIgdG8gZXhwbGljaXRseSBjb250cm9sIHRoZSBoZWFkKSB3aWxsIG5vdCB3b3JrLiBJdCBpcworICAgICAgICB1bmNsZWFyIHdoZXRoZXIgdGhleSBldmVyIHdpbGwuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkV4dGVybmFsIHByaW50ZXIgZHJpdmVyczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEF0IHByZXNlbnQgb25seSAxNiBiaXQgZHJpdmVycyB3aWxsIHdvcmsgKG5vdGUgdGhhdCB0aGVzZSBpbmNsdWRlIHdpbjl4CisgICAgICAgICAgZHJpdmVycykuICBUbyB1c2UgdGhlbSwgYWRkCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK3ByaW50ZXI9b24KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvIHRoZSBbd2luZV0gc2VjdGlvbiBvZiA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gKG9yCisgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmVyYzwvZmlsZW5hbWU+KS4gVGhpcyBsZXRzCisgICAgICAgICAgPGZ1bmN0aW9uPkNyZWF0ZURDPC9mdW5jdGlvbj4gcHJvY2VlZCBpZiBpdHMgZHJpdmVyIGFyZ3VtZW50IGlzIGEgMTYKKyAgICAgICAgICBiaXQgZHJpdmVyLiBZb3Ugd2lsbCBwcm9iYWJseSBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK1RURW5hYmxlPTAgVFRPbmx5PTAKKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvIHRoZSBbVHJ1ZVR5cGVdIHNlY3Rpb24gb2YgPGZpbGVuYW1lPndpbi5pbmk8L2ZpbGVuYW1lPi4gVGhlIGNvZGUgZm9yCisgICAgICAgICAgdGhlIGRyaXZlciBpbnRlcmZhY2UgaXMgaW4gPGZpbGVuYW1lPmdyYXBoaWNzL3dpbjE2ZHJ2PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkJ1aWx0aW4gV2luZSBQb3N0U2NyaXB0IGRyaXZlcjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVuYWJsZXMgcHJpbnRpbmcgb2YgUG9zdFNjcmlwdCBmaWxlcyB2aWEgYSBkcml2ZXIgYnVpbHQgaW50byBXaW5lLiBTZWUKKyAgICAgICAgICA8ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi9wc2RyaXZlcjwvZmlsZW5hbWU+IGZvciBpbnN0YWxsYXRpb24KKyAgICAgICAgICBpbnN0cnVjdGlvbnMuIFRoZSBjb2RlIGZvciB0aGUgUG9zdFNjcmlwdCBkcml2ZXIgaXMgaW4KKyAgICAgICAgICA8ZmlsZW5hbWU+Z3JhcGhpY3MvcHNkcnY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+U3Bvb2xpbmc8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTcG9vbGluZyBpcyByYXRoZXIgcHJpbWl0aXZlLiBUaGUgW3Nwb29sZXJdIHNlY3Rpb24gb2YKKyAgICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gbWFwcyBhIHBvcnQgKGUuZy4KKyAgICAgICAgICA8c3lzdGVtaXRlbT5MUFQxOjwvc3lzdGVtaXRlbT4pIHRvIGEgZmlsZSBvciBhIGNvbW1hbmQgdmlhIGEgcGlwZS4gRm9yCisgICAgICAgICAgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGxpbmVzCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHNjcmVlbj4KK0xQVDE6PWZvby5wcyBMUFQyOj18bHByCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBtYXAgPHN5c3RlbWl0ZW0+TFBUMTo8L3N5c3RlbWl0ZW0+IHRvIGZpbGUgPGZpbGVuYW1lPmZvby5wczwvZmlsZW5hbWU+CisgICAgICAgICAgYW5kIDxzeXN0ZW1pdGVtPkxQVDI6PC9zeXN0ZW1pdGVtPiB0byB0aGUgPGNvbW1hbmQ+bHByPC9jb21tYW5kPgorICAgICAgICAgIGNvbW1hbmQuIElmIGEgam9iIGlzIHNlbnQgdG8gYW4gdW5saXN0ZWQgcG9ydCB0aGVuIGEgZmlsZSBpcyBjcmVhdGVkCisgICAgICAgICAgd2l0aCB0aGF0IHBvcnQncyBuYW1lIGUuZy4gZm9yIDxzeXN0ZW1pdGVtPkxQVDM6PC9zeXN0ZW1pdGVtPiBhIGZpbGUKKyAgICAgICAgICBjYWxsZWQgPHN5c3RlbWl0ZW0+TFBUMzo8L3N5c3RlbWl0ZW0+IHdvdWxkIGJlIGNyZWF0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0icHNkcml2ZXIiPgorICAgICAgPHRpdGxlPlRoZSBXaW5lIFBvc3RTY3JpcHQgRHJpdmVyPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgSHV3IERhdmllcyA8ZW1haWw+aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs8L2VtYWlsPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3BzZHJpdmVyPC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIGNvbXBsZXRlIHRoaXMgd2lsbCBhbGxvdyBXaW5lIHRvIGdlbmVyYXRlIFBvc3RTY3JpcHQgZmlsZXMgd2l0aG91dAorICAgICAgICBuZWVkaW5nIGFuIGV4dGVybmFsIHByaW50ZXIgZHJpdmVyLiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcHJpbnQgdG8gYQorICAgICAgICBub24gUG9zdFNjcmlwdCBwcmludGVyIGJ5IGZpbHRlcmluZyB0aGUgb3V0cHV0IHRocm91Z2ggZ2hvc3RzY3JpcHQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkluc3RhbGxhdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBkcml2ZXIgYmVoYXZlcyBhcyBpZiBpdCB3ZXJlIGEgRFJWIGZpbGUgY2FsbGVkCisgICAgICAgICAgPGZpbGVuYW1lPndpbmVwcy5kcnY8L2ZpbGVuYW1lPiB3aGljaCBhdCB0aGUgbW9tZW50IGlzIGJ1aWx0IGludG8gV2luZS4KKyAgICAgICAgICBBbHRob3VnaCBpdCBtaW1pY3MgYSAxNiBiaXQgZHJpdmVyIGl0IHdpbGwgd29yayB3aXRoIGJvdGggMTYgYW5kIDMyIGJpdAorICAgICAgICAgIGFwcHMsIGp1c3QgYXMgd2luOXggZHJpdmVycyBkby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBpbnN0YWxsIGl0IGFkZAorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitXaW5lIFBvc3RTY3JpcHQgRHJpdmVyPVdJTkVQUyxMUFQxOgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgdG8gdGhlIFtkZXZpY2VzXSBzZWN0aW9uIG9mIDxmaWxlbmFtZT53aW4uaW5pPC9maWxlbmFtZT4gYW5kIHRvIHNldCBpdAorICAgICAgICAgIGFzIHRoZSBkZWZhdWx0IHByaW50ZXIgYWxzbyBhZGQKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorZGV2aWNlPVdpbmUgUG9zdFNjcmlwdCBEcml2ZXIsV0lORVBTLExQVDE6CisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICB0byB0aGUgW3dpbmRvd3NdIHNlY3Rpb24gb2YgPGZpbGVuYW1lPndpbi5pbmk8L2ZpbGVuYW1lPiBhbmQgPz8/CisgICAgICAgICAgPGVtcGhhc2lzPltzaWNdPC9lbXBoYXNpcz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBydW4gMzIgYml0IGFwcHMgKGFuZCAxNiBiaXQgYXBwcyB1c2luZyB0aGUKKyAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPiBjb21tZGxnKSB5b3UgYWxzbyBuZWVkIHRvIGFkZCBjZXJ0YWluCisgICAgICAgICAgZW50cmllcyB0byB0aGUgcmVnaXN0cnkuICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBhdCB0aGUgbW9tZW50IGlzCisgICAgICAgICAgdG8gdXNlIHRoZSB3aW5lbGliIHByb2dyYW0gPGNvbW1hbmQ+cHJvZ3JhbXMvcmVnYXBpL3JlZ2FwaTwvY29tbWFuZD4KKyAgICAgICAgICB3aXRoIHRoZSBmaWxlIDxmaWxlbmFtZT5kb2N1bWVudGF0aW9uL3BzZHJ2LnJlZzwvZmlsZW5hbWU+LiAgVG8gZG8gdGhpcworICAgICAgICAgIDxjb21tYW5kPmNkPC9jb21tYW5kPiB0byA8ZmlsZW5hbWU+cHJvZ3JhbXMvcmVnYXBpL3JlZ2FwaTwvZmlsZW5hbWU+CisgICAgICAgICAgYW5kIHR5cGUgPHVzZXJpbnB1dD5tYWtlPC91c2VyaW5wdXQ+IHRvIGFjdHVhbGx5IG1ha2UgdGhlIHByb2dyYW0sIHRoZW4KKyAgICAgICAgICB0eXBlIDx1c2VyaW5wdXQ+Li9yZWdhcGkgc2V0VmFsdWUKKyAgICAgICAgICAgICZsdDsuLi8uLi9kb2N1bWVudGF0aW9uL3BzZHJ2LnJlZzwvdXNlcmlucHV0Pi4gIFlvdSBjYW4gb2J2aW91c2x5CisgICAgICAgICAgZWRpdCA8ZmlsZW5hbWU+cHNkcnYucmVnPC9maWxlbmFtZT4gdG8gc3VpdCB5b3VyIHJlcXVpcmVtZW50cy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3Ugd2lsbCBuZWVkIEFkb2JlIEZvbnQgTWV0cmljIChBRk0pIGZpbGVzIGZvciB0aGUgKHR5cGUgMSBQb3N0U2NyaXB0KQorICAgICAgICAgIGZvbnRzIHRoYXQgeW91IHdpc2ggdG8gdXNlLiBZb3UgY2FuIGdldCB0aGVzZSBmcm9tCisgICAgICAgICAgPHVsaW5rIHVybD0iZnRwOi8vZnRwLmFkb2JlLmNvbS9wdWIvYWRvYmUvdHlwZS93aW4vYWxsL2FmbWZpbGVzIj4KKyAgICAgICAgICAgIGZ0cDovL2Z0cC5hZG9iZS5jb20vcHViL2Fkb2JlL3R5cGUvd2luL2FsbC9hZm1maWxlcyA8L3VsaW5rPi4gVGhlCisgICAgICAgICAgZGlyZWN0b3JpZXMgPGZpbGVuYW1lPmJhc2UxNzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5iYXNlMzU8L2ZpbGVuYW1lPgorICAgICAgICAgIGFyZSBnb29kIHBsYWNlcyB0byBzdGFydC4gTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHRoZSBmb250IG1ldHJpY3MgYW5kCisgICAgICAgICAgbm90IHRoZSBmb250cyB0aGVtc2VsdmVzLiBBdCB0aGUgbW9tZW50IHRoZSBkcml2ZXIgZG9lcyBub3QgZG93bmxvYWQKKyAgICAgICAgICBhZGRpdGlvbmFsIGZvbnRzLCBzbyB5b3UgY2FuIG9ubHkgdXNlIGZvbnRzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCBvbgorICAgICAgICAgIHRoZSBwcmludGVyLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZW4gY3JlYXRlIGEgW2FmbWZpbGVzXSBzZWN0aW9uIGluIHlvdXIKKyAgICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gKG9yCisgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmVyYzwvZmlsZW5hbWU+KSBhbmQgYWRkIGEgbGluZSBvZiB0aGUgZm9ybQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxzY3JlZW4+CitmaWxlJmx0O24mZ3Q7PS91bml4L3BhdGgvbmFtZS9maWxlbmFtZS5hZm0KKyAgICAgICAgPC9zY3JlZW4+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIGZvciBlYWNoIEFGTSBmaWxlIHRoYXQgeW91IHdpc2ggdG8gdXNlLiBbVGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZV0KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBZb3UgYWxzbyByZXF1aXJlIGEgUFBEIGZpbGUgZm9yIHlvdXIgcHJpbnRlci4gIFRoaXMgZGVzY3JpYmVzIGNlcnRhaW4KKyAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHByaW50ZXIgc3VjaCBhcyB3aGljaCBmb250cyBhcmUgaW5zdGFsbGVkLCBob3cKKyAgICAgICAgICB0byBzZWxlY3QgbWFudWFsIGZlZWQgZXRjLiBBZG9iZSBhbHNvIGhhcyBtYW55IG9mIHRoZXNlIG9uIGl0cyB3ZWJzaXRlLAorICAgICAgICAgIGhhdmUgYSBsb29rIGluIDx1bGluayB1cmw9ImZ0cDovL2Z0cC5hZG9iZS5jb20vcHViL2Fkb2JlL3ByaW50ZXJkcml2ZXJzL3dpbi9hbGwvIj4KKyAgICAgICAgICAgIGZ0cDovL2Z0cC5hZG9iZS5jb20vcHViL2Fkb2JlL3ByaW50ZXJkcml2ZXJzL3dpbi9hbGwvPC91bGluaz4uIENyZWF0ZQorICAgICAgICAgIGEgW3BzZHJ2XSBzZWN0aW9uIGluIHlvdXIgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IChvcgorICAgICAgICAgIDxmaWxlbmFtZT5+Ly53aW5lcmM8L2ZpbGVuYW1lPikgYW5kIGFkZCB0aGUgIGZvbGxvd2luZyBlbnRyeToKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8c2NyZWVuPgorcHBkZmlsZT0vc29tZXdoZXJlL2ZpbGUucHBkCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIHdpbGwgbG9vayBmb3IgYSBmaWxlIG5hbWVkCisgICAgICAgICAgPGZpbGVuYW1lPmRlZmF1bHQucHBkPC9maWxlbmFtZT4gaW4gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoCisgICAgICAgICAgeW91IHN0YXJ0ZWQgd2luZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUbyBlbmFibGUgY29sb3VyIHByaW50aW5nIHlvdSBuZWVkIHRvIGhhdmUgdGhlCisgICAgICAgICAgPGxpdGVyYWw+KkNvbG9yRGV2aWNlPC9saXRlcmFsPiBlbnRyeSBpbiB0aGUgUFBEIHNldCB0bworICAgICAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCBvdGhlcndpc2UgdGhlIGRyaXZlciB3aWxsIGdlbmVyYXRlCisgICAgICAgICAgZ3JleXNjYWxlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE5vdGUgdGhhdCB5b3UgbmVlZCBub3Qgc2V0IDxsaXRlcmFsPnByaW50ZXI9b248L2xpdGVyYWw+IGluCisgICAgICAgICAgdGhlIFt3aW5lXSBzZWN0aW9uIG9mIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiwgdGhpcworICAgICAgICAgIGVuYWJsZXMgcHJpbnRpbmcgdmlhIGV4dGVybmFsIHByaW50ZXIgZHJpdmVycyBhbmQgZG9lcyBub3QKKyAgICAgICAgICBhZmZlY3Qgd2luZXBzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSdyZSBsdWNreSB5b3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHByb2R1Y2UgUFMgZmlsZXMKKyAgICAgICAgICBmcm9tIFdpbmUhCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSSd2ZSB0ZXN0ZWQgaXQgd2l0aCB3aW4zLjEgbm90ZXBhZC93cml0ZSwgV2lud29yZDYgYW5kCisgICAgICAgICAgT3JpZ2luNC4wIGFuZCAzMiBiaXQgYXBwcyBzdWNoIGFzIHdpbjk4IHdvcmRwYWQsIFdpbndvcmQ5NywKKyAgICAgICAgICBQb3dlcnBvaW50MjAwMCB3aXRoIHNvbWUgZGVncmVlIG9mIHN1Y2Nlc3MgLSB5b3Ugc2hvdWxkIGJlCisgICAgICAgICAgYWJsZSB0byBnZXQgc29tZXRoaW5nIG91dCwgaXQgbWF5IG5vdCBiZSBpbiB0aGUgcmlnaHQgcGxhY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPlRPRE8gLyBCdWdzPC90aXRsZT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBEcml2ZXIgZG9lcyByZWFkIFBQRCBmaWxlcywgYnV0IGlnbm9yZXMgYWxsIGNvbnN0cmFpbnRzCisgICAgICAgICAgICAgIGFuZCBkb2Vzbid0IGxldCB5b3Ugc3BlY2lmeSB3aGV0aGVyIHlvdSBoYXZlIG9wdGlvbmFsCisgICAgICAgICAgICAgIGV4dHJhcyBzdWNoIGFzIGVudmVsb3BlIGZlZWRlcnMuIFlvdSB3aWxsIHRoZXJlZm9yZSBmaW5kCisgICAgICAgICAgICAgIGEgbGFyZ2VyIHRoYW4gbm9ybWFsIHNlbGVjdGlvbiBvZiBpbnB1dCBiaW5zIGluIHRoZQorICAgICAgICAgICAgICBwcmludCBzZXR1cCBkaWFsb2cgYm94LiBJJ3ZlIG9ubHkgcmVhbGx5IHRlc3RlZCBwcGQKKyAgICAgICAgICAgICAgcGFyc2luZyBvbiB0aGUgPGZpbGVuYW1lPmhwNG02X3YxLnBwZDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5ObyBUcnVlVHlwZSBkb3dubG9hZC48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5TdHJldGNoRElCaXRzIHVzZXMgbGV2ZWwgMiBQb3N0U2NyaXB0LjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPkFkdmFuY2VkU2V0dXAgZGlhbG9nIGJveC48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5NYW55IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBmdW5jdGlvbnMuPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+cHMuYyBpcyBiZWNvbWluZyBtZXNzeS48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgTm90ZXBhZCBvZnRlbiBzdGFydHMgdGV4dCB0b28gZmFyIHRvIHRoZSBsZWZ0IGRlcGVuZGluZworICAgICAgICAgICAgICBvbiB0aGUgbWFyZ2luIHNldHRpbmdzLiBIb3dldmVyIHRoZSB3aW4zLjEKKyAgICAgICAgICAgICAgPGZpbGVuYW1lPnBzY3JpcHQuZHJ2PC9maWxlbmFtZT4gKHVuZGVyIHdpbmUpIGFsc28gZG9lcworICAgICAgICAgICAgICB0aGlzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+UHJvYmFibHkgbWFueSBtb3JlLi4uPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFBsZWFzZSBjb250YWN0IG1lIGlmIHlvdSB3YW50IHRvIGhlbHAgc28gdGhhdCB3ZSBjYW4gYXZvaWQgZHVwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSHV3IERhdmllcyA8ZW1haWw+aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs8L2VtYWlsPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHNkcml2ZXIgYi9kb2N1bWVudGF0aW9uL3BzZHJpdmVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjIwOTg2Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vcHNkcml2ZXIKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotV2luZSBQb3N0U2NyaXB0IERyaXZlcgotPT09PT09PT09PT09PT09PT09PT09PQotCi1XaGVuIGNvbXBsZXRlIHRoaXMgd2lsbCBhbGxvdyBXaW5lIHRvIGdlbmVyYXRlIFBvc3RTY3JpcHQgZmlsZXMgd2l0aG91dCBuZWVkaW5nCi1hbiBleHRlcm5hbCBwcmludGVyIGRyaXZlci4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHByaW50IHRvIGEgbm9uIFBvc3RTY3JpcHQKLXByaW50ZXIgYnkgZmlsdGVyaW5nIHRoZSBvdXRwdXQgdGhyb3VnaCBnaG9zdHNjcmlwdC4KLQotCi1JbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLQotCi1UaGUgZHJpdmVyIGJlaGF2ZXMgYXMgaWYgaXQgd2VyZSBhIERSViBmaWxlIGNhbGxlZCBXSU5FUFMuRFJWIHdoaWNoIGF0IHRoZQotbW9tZW50IGlzIGJ1aWx0IGludG8gV2luZS4gIEFsdGhvdWdoIGl0IG1pbWljcyBhIDE2IGJpdCBkcml2ZXIgaXQgd2lsbCB3b3JrCi13aXRoIGJvdGggMTYgYW5kIDMyIGJpdCBhcHBzLCBqdXN0IGFzIHdpbjl4IGRyaXZlcnMgZG8uCi0KLVRvIGluc3RhbGwgaXQgYWRkCi0KLVdpbmUgUG9zdFNjcmlwdCBEcml2ZXI9V0lORVBTLExQVDE6Ci0KLXRvIHRoZSBbZGV2aWNlc10gc2VjdGlvbiBvZiB3aW4uaW5pIGFuZCB0byBzZXQgaXQgYXMgdGhlIGRlZmF1bHQgcHJpbnRlciBhbHNvCi1hZGQKLQotZGV2aWNlPVdpbmUgUG9zdFNjcmlwdCBEcml2ZXIsV0lORVBTLExQVDE6Ci0KLXRvIHRoZSBbd2luZG93c10gc2VjdGlvbiBvZiB3aW4uaW5pIGFuZAotCi0KLVRvIHJ1biAzMiBiaXQgYXBwcyAoYW5kIDE2IGJpdCBhcHBzIHVzaW5nIHRoZSBidWlsdGluIGNvbW1kbGcpIHlvdSBhbHNvIG5lZWQgdG8KLWFkZCBjZXJ0YWluIGVudHJpZXMgdG8gdGhlIHJlZ2lzdHJ5LiAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgYXQgdGhlIG1vbWVudAotaXMgdG8gdXNlIHRoZSB3aW5lbGliIHByb2dyYW0gcHJvZ3JhbXMvcmVnYXBpL3JlZ2FwaSB3aXRoIHRoZSBmaWxlCi1kb2N1bWVudGF0aW9uL3BzZHJ2LnJlZyAuICBUbyBkbyB0aGlzIGNkIHRvIHByb2dyYW1zL3JlZ2FwaS9yZWdhcGkgYW5kIHR5cGUKLWBtYWtlJyB0byBhY3R1YWxseSBtYWtlIHRoZSBwcm9ncmFtLCB0aGVuIHR5cGUKLWAuL3JlZ2FwaSBzZXRWYWx1ZSA8Li4vLi4vZG9jdW1lbnRhdGlvbi9wc2Rydi5yZWcnIC4gIFlvdSBjYW4gb2J2aW91c2x5IGVkaXQKLXBzZHJ2LnJlZyB0byBzdWl0IHlvdXIgcmVxdWlyZW1lbnRzLgotCi1Zb3Ugd2lsbCBuZWVkIEFkb2JlIEZvbnQgTWV0cmljIChBRk0pIGZpbGVzIGZvciB0aGUgKHR5cGUgMSBQb3N0U2NyaXB0KSBmb250cwotdGhhdCB5b3Ugd2lzaCB0byB1c2UuIFlvdSBjYW4gZ2V0IHRoZXNlIGZyb20KLWZ0cDovL2Z0cC5hZG9iZS5jb20vcHViL2Fkb2JlL3R5cGUvd2luL2FsbC9hZm1maWxlcyAuICBUaGUgZGlyZWN0b3JpZXMgYmFzZTE3Ci1vciBiYXNlMzUgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiAgTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHRoZSBmb250IG1ldHJpY3MKLWFuZCBub3QgdGhlIGZvbnRzIHRoZW1zZWx2ZXMuIEF0IHRoZSBtb21lbnQgdGhlIGRyaXZlciBkb2VzIG5vdCBkb3dubG9hZAotYWRkaXRpb25hbCBmb250cywgc28geW91IGNhbiBvbmx5IHVzZSBmb250cyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlCi1wcmludGVyLgotCi1UaGVuIGNyZWF0ZSBhIFthZm1maWxlc10gc2VjdGlvbiBpbiB5b3VyIHdpbmUuY29uZiAob3Igfi8ud2luZXJjKSBhbmQgYWRkIGEKLWxpbmUgb2YgdGhlIGZvcm0KLQotZmlsZTxuPj0vdW5peC9wYXRoL25hbWUvZmlsZW5hbWUuYWZtCi0KLWZvciBlYWNoIEFGTSBmaWxlIHRoYXQgeW91IHdpc2ggdG8gdXNlLiBbVGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZV0KLQotWW91IGFsc28gcmVxdWlyZSBhIFBQRCBmaWxlIGZvciB5b3VyIHByaW50ZXIuICBUaGlzIGRlc2NyaWJlcyBjZXJ0YWluCi1jaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHByaW50ZXIgc3VjaCBhcyB3aGljaCBmb250cyBhcmUgaW5zdGFsbGVkLCBob3cgdG8gc2VsZWN0Ci1tYW51YWwgZmVlZCBldGMuICBBZG9iZSBhbHNvIGhhcyBtYW55IG9mIHRoZXNlIG9uIGl0cyB3ZWJzaXRlLCBoYXZlIGEgbG9vayBpbgotZnRwOi8vZnRwLmFkb2JlLmNvbS9wdWIvYWRvYmUvcHJpbnRlcmRyaXZlcnMvd2luL2FsbC8KLUNyZWF0ZSBhIFtwc2Rydl0gc2VjdGlvbiBpbiB5b3VyIHdpbmUuY29uZiAob3Igfi8ud2luZXJjKSBhbmQgYWRkIHRoZSAKLWZvbGxvd2luZyBlbnRyeToKLQotcHBkZmlsZT0vc29tZXdoZXJlL2ZpbGUucHBkCi0KLUJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIgd2lsbCBsb29rIGZvciBhIGZpbGUgbmFtZWQgZGVmYXVsdC5wcGQgaW4gdGhlIGRpcmVjdG9yeQotZnJvbSB3aGljaCB5b3Ugc3RhcnRlZCB3aW5lLgotCi1UbyBlbmFibGUgY29sb3VyIHByaW50aW5nIHlvdSBuZWVkIHRvIGhhdmUgdGhlICpDb2xvckRldmljZSBlbnRyeSBpbiB0aGUgUFBECi1zZXQgdG8gdHJ1ZSwgb3RoZXJ3aXNlIHRoZSBkcml2ZXIgd2lsbCBnZW5lcmF0ZSBncmV5c2NhbGUuCi0KLU5vdGUgdGhhdCB5b3UgbmVlZCBub3Qgc2V0IHByaW50ZXI9b24gaW4gdGhlIFt3aW5lXSBzZWN0aW9uIG9mIHdpbmUuY29uZiwgdGhpcwotZW5hYmxlcyBwcmludGluZyB2aWEgZXh0ZXJuYWwgcHJpbnRlciBkcml2ZXJzIGFuZCBkb2VzIG5vdCBhZmZlY3Qgd2luZXBzLgotCi1JZiB5b3UncmUgbHVja3kgeW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBwcm9kdWNlIFBTIGZpbGVzIGZyb20gV2luZSEKLQotSSd2ZSB0ZXN0ZWQgaXQgd2l0aCB3aW4zLjEgbm90ZXBhZC93cml0ZSwgV2lud29yZDYgYW5kIE9yaWdpbjQuMCBhbmQgMzIgYml0Ci1hcHBzIHN1Y2ggYXMgd2luOTggd29yZHBhZCwgV2lud29yZDk3LCBQb3dlcnBvaW50MjAwMCB3aXRoIHNvbWUgZGVncmVlIG9mCi1zdWNjZXNzIC0geW91IHNob3VsZCBiZSBhYmxlIHRvIGdldCBzb21ldGhpbmcgb3V0LCBpdCBtYXkgbm90IGJlIGluIHRoZSByaWdodAotcGxhY2UuCi0KLUlmIHlvdSBkb24ndCBoYXZlIGEgUG9zdFNjcmlwdCBwcmludGVyIGhlcmUgaXMgYSBzaG9ydCBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIAotaG93IHRvIGdldCB0aGUgV2luZSBQb3N0U2NyaXB0IERyaXZlciBydW5uaW5nIHdpdGggZ2hvc3RzY3JpcHQuIEkgaGFkIHNvbWUgCi1zdWNjZXNzIHdpdGggZ2hvc3RzY3JpcHQgNS4xMCBmcm9tIHRoZSBTdVNFIDYuMiBkaXN0cmlidXRpb24uIE15IGdob3N0c2NyaXB0IAotcGFja2FnZSBjb250YWlucyBzb21lIEFGTSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IC91c3Ivc2hhcmUvZ2hvc3RzY3JpcHQvZm9udHMuCi1JIGhhdmUgdXNlZCB0aGVzZSBmb3IgdGhlIFthZm1maWxlc10gc2VjdGlvbiBpbiBteSB3aW5lLmNvbmYgKG9yIH4vLndpbmVyYykgCi1maWxlLgotCi1UaGVyZSBhcmUgYWxzbyB0d28gUFBEIGZpbGUgaW4gbXkgZ2hvc3RzY3JpcHQgcGFja2FnZS4gVGhleSBhcmUgbG9jYXRlZCBpbiB0aGUKLWRpcmVjdG9yeSAvdXNyL3NoYXJlL2dob3N0c2NyaXB0LzUuMTAuIEkgaGF2ZSB1c2VkIHRoZSBmaWxlIGNiamM2MDAucHBkIGJlY2F1c2UKLW9mIHRoZSBzdXBwb3J0ZWQgcGFwZXJzaXplLiBCZWNhdXNlIG15IFBQRCBmaWxlIG5lZWRlZCBzb21lIGNoYW5nZXMgaSBoYXZlIAotY29weWVkIGl0IHRvIC91c3IvbG9jYWwvZXRjL2dzLnBwZCBhbmQgZW50ZXJkIGl0IGludG8gdGhlIFtwc2Rydl0gc2VjdGlvbiBpbiAKLW15IHdpbmUuY29uZiAob3Igfi8ud2luZXJjKSBmaWxlLgotCi1XaGVuIGkgc3RhcnRlZCB3aW5lIGFmdGVyIHRoaXMgc2V0dGluZ3MgaSBnb3QgYW4gZXJyb3Igd2hlbiB3aW5lIHRyaWVkIHRvIHBhcnMgCi10aGUgUFBEIGZpbGUuIFRoZXJlIHdhcyB0aGUgJzonIG1pc3NpbmcgaW4gdGhlIGxpbmU6Ci0KLQkqQ2xvc2VVSTogKlByaW50Q29sb3JzCi0KLUFmdGVyIHRoaXMgZml4IHRoZSBQUEQgZmlsZSB3YXMgc3VjY2Vzc2Z1bGwgcGFyc2VkLCBidXQgcHJpbnRpbmcgd2FzIHN0aWxsIG5vdCAKLXBvc3NpYmxlLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhlIFBQRCBmaWxlIGNvbnRhaW5zIG5vIGZvbnQgaW5mb3JtYXRpb24uIFRvIAotY3JlYXRlIHRoZSBmb250IGluZm9ybWF0aW9uIEkgcnVuIHdpbmUgd2l0aCAtZGVidWdtc2cgK2ZvbnQgYW5kIHJlZGlyZWN0ZWQgdGhlCi1vdXRwdXQgaW50byBhIGZpbGUuIFRoYW4gSSBmaWx0ZXJkIHRoZSBmaWxlIGZvciBsaW5lcyBjb250YWluaW5nICdGb250TmFtZScKLXVzaW5nIHRoZSBncmVwIGNvbW1hbmQgYW5kIGV4dHJhY3RlZCB0aGUgbmFtZXMgb2YgdGhlIGZvbnRzIHdpdGggdGhlIGN1dCAKLWNvbW1hbmQgaW50byBhIG5ldyBmaWxlLgotCi0JZ3JlcCBGb250TmFtZSBMT0dGSUxFIHwgY3V0IC1mIDIgLWRcJyB8IHNvcnQgLXUgPiBhZGQucHBkCi0KLU5vdyAnKkZvbnQgJyBuZWVkcyB0byBiZSBpbnNlcnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSBvZiB0aGUgbmV3IAotZmlsZS4gVGhlIGVuZCBvZiBlYWNoIGxpbmUgbmVlZHMgdG8gYmVjb21lICc6IFN0YW5kYXJkJy4gVGhlIGxhc3Qgc3RlcCBpcyB0bwotYWRkIHRoZXNlIGxpbmUgdG8gdGhlIFBQRCBmaWxlLiBBZnRlciB0aGlzIEkgd2FzIGFibGUgdG8gcHJpbnQgc29tZSB0ZXh0IHVzaW5nIAotd2luZXMgYnVpbGRpbiBQb3N0U2NyaXB0IGRyaXZlciBhbmQgZ2hvc3RzY3JpcHQuCi0KLQotVE9ETyAvIEJ1Z3MKLS0tLS0tLS0tLS0tCi0KLURyaXZlciBkb2VzIHJlYWQgUFBEIGZpbGVzLCBidXQgaWdub3JlcyBhbGwgY29uc3RyYWludHMgYW5kIGRvZXNuJ3QgbGV0IHlvdQotc3BlY2lmeSB3aGV0aGVyIHlvdSBoYXZlIG9wdGlvbmFsIGV4dHJhcyBzdWNoIGFzIGVudmVsb3BlIGZlZWRlcnMuIFlvdSB3aWxsCi10aGVyZWZvcmUgZmluZCBhIGxhcmdlciB0aGFuIG5vcm1hbCBzZWxlY3Rpb24gb2YgaW5wdXQgYmlucyBpbiB0aGUgcHJpbnQgc2V0dXAKLWRpYWxvZyBib3guIEkndmUgb25seSByZWFsbHkgdGVzdGVkIHBwZCBwYXJzaW5nIG9uIHRoZSBocDRtNl92MS5wcGQgZmlsZS4KLQotTm8gVHJ1ZVR5cGUgZG93bmxvYWQuCi0KLVN0cmV0Y2hESUJpdHMgdXNlcyBsZXZlbCAyIFBvc3RTY3JpcHQuCi0KLUFkdmFuY2VkU2V0dXAgZGlhbG9nIGJveC4KLQotTWFueSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgotCi1wcy5jIGlzIGJlY29taW5nIG1lc3N5LgotCi1Ob3RlcGFkIG9mdGVuIHN0YXJ0cyB0ZXh0IHRvbyBmYXIgdG8gdGhlIGxlZnQgZGVwZW5kaW5nIG9uIHRoZSBtYXJnaW4KLXNldHRpbmdzLiBIb3dldmVyIHRoZSB3aW4zLjEgcHNjcmlwdC5kcnYgKHVuZGVyIHdpbmUpIGFsc28gZG9lcyB0aGlzLgotCi1Qcm9iYWJseSBtYW55IG1vcmUuLi4KLQotUGxlYXNlIGNvbnRhY3QgbWUgaWYgeW91IHdhbnQgdG8gaGVscCBzbyB0aGF0IHdlIGNhbiBhdm9pZCBkdXBsaWNhdGlvbi4KLQotSHV3IERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZ2lzdHJ5IGIvZG9jdW1lbnRhdGlvbi9yZWdpc3RyeQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyNTk3NC4uMDAwMDAwMAotLS0gYS9kb2N1bWVudGF0aW9uL3JlZ2lzdHJ5CisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLVRoZSBSZWdpc3RyeQotLS0tLS0tLS0tLS0tCi0KLSAgIEFmdGVyIFdpbjMueCwgdGhlIHJlZ2lzdHJ5IGJlY2FtZSBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgV2luZG93cy4gSXQgaXMKLSAgIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCi0gICBXaW45NS85OC9OVC8yMDAwL3doYXRldmVyLWNvbXBsaWFudCBhcHBsaWNhdGlvbnMsIHN0b3JlIGNvbmZpZ3VyYXRpb24KLSAgIGFuZCBzdGF0ZSBkYXRhLiBXaGlsZSBtb3N0IHNhbmUgc3lzdGVtIGFkbWluaXN0cmF0b3JzIChhbmQgV2luZQotICAgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQgbmF0dXJlIG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LAotICAgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IGZvciBXaW5lIHRvIHN1cHBvcnQgaXQgc29tZWhvdy4KLSAgIAotICBSZWdpc3RyeSBzdHJ1Y3R1cmUKLSAgCi0gICBUaGUgV2luZG93cyByZWdpc3RyeSBpcyBhbiBlbGFib3JhdGUgdHJlZSBzdHJ1Y3R1cmUsIGFuZCBub3QgZXZlbiBtb3N0Ci0gICBXaW5kb3dzIHByb2dyYW1tZXJzIGFyZSBmdWxseSBhd2FyZSBvZiBob3cgdGhlIHJlZ2lzdHJ5IGlzIGxhaWQgb3V0LAotICAgd2l0aCBpdHMgZGlmZmVyZW50ICJoaXZlcyIgYW5kIG51bWVyb3VzIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsCi0gICBjb3ZlcmFnZSBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuIEJ1dCBoZXJlIGFyZSB0aGUgYmFzaWMKLSAgIHJlZ2lzdHJ5IGtleXMgeW91IG1pZ2h0IG5lZWQgdG8ga25vdyBhYm91dCBmb3Igbm93LgotICAgCi0gICBIS0VZX0xPQ0FMX01BQ0hJTkUKLSAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCwgc3RvcmVkIGluIHRoZSBoaWRkZW4gZmlsZQotICAgICAgICAgIHN5c3RlbS5kYXQpIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgcGVydGFpbmluZyB0byB0aGUgY3VycmVudAotICAgICAgICAgIFdpbmRvd3MgaW5zdGFsbGF0aW9uLgotICAgICAgICAgIAotICAgSEtFWV9VU0VSUwotICAgICAgICAgIFRoaXMgZnVuZGFtZW50YWwgcm9vdCBrZXkgKGluIHdpbjl4LCBzdG9yZWQgaW4gdGhlIGhpZGRlbiBmaWxlCi0gICAgICAgICAgdXNlci5kYXQpIGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgZXZlcnkgdXNlciBvZiB0aGUKLSAgICAgICAgICBpbnN0YWxsYXRpb24uCi0gICAgICAgICAgCi0gICBIS0VZX0NMQVNTRVNfUk9PVAotICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxDbGFzc2VzLiBJdAotICAgICAgICAgIGNvbnRhaW5zIGRhdGEgZGVzY3JpYmluZyB0aGluZ3MgbGlrZSBmaWxlIGFzc29jaWF0aW9ucywgT0xFCi0gICAgICAgICAgZG9jdW1lbnQgaGFuZGxlcnMsIGFuZCBDT00gY2xhc3Nlcy4KLSAgICAgICAgICAKLSAgIEhLRVlfQ1VSUkVOVF9VU0VSCi0gICAgICAgICAgVGhpcyBpcyBhIGxpbmsgdG8gSEtFWV9VU0VSU1x5b3VyX3VzZXJuYW1lLCBpLmUuLCB5b3VyIHBlcnNvbmFsCi0gICAgICAgICAgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAKLSAgVXNpbmcgYSBXaW5kb3dzIHJlZ2lzdHJ5Ci0gIAotICAgSWYgeW91IHBvaW50IFdpbmUgYXQgYW4gZXhpc3RpbmcgTVMgV2luZG93cyBpbnN0YWxsYXRpb24gKGJ5IHNldHRpbmcKLSAgIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBpbiB3aW5lLmNvbmYvLndpbmVyYyksIHRoZW4gV2luZSBpcyBhYmxlCi0gICB0byBsb2FkIHJlZ2lzdHJ5IGRhdGEgZnJvbSBpdC4gSG93ZXZlciwgV2luZSB3aWxsIG5vdCBzYXZlIGFueXRoaW5nIHRvCi0gICB0aGUgcmVhbCBXaW5kb3dzIHJlZ2lzdHJ5LCBidXQgcmF0aGVyIHRvIGl0cyBvd24gcmVnaXN0cnkgZmlsZXMgKHNlZQotICAgYmVsb3cpLiBPZiBjb3Vyc2UsIGlmIGEgcGFydGljdWxhciByZWdpc3RyeSB2YWx1ZSBleGlzdHMgaW4gYm90aCB0aGUKLSAgIFdpbmRvd3MgcmVnaXN0cnkgYW5kIGluIHRoZSBXaW5lIHJlZ2lzdHJ5LCB0aGVuIFdpbmUgd2lsbCB1c2UgdGhlCi0gICBsYXR0ZXIuCi0gICAKLSAgIE9jY2FzaW9uYWxseSwgV2luZSBtYXkgaGF2ZSB0cm91YmxlIGxvYWRpbmcgdGhlIFdpbmRvd3MgcmVnaXN0cnkuCi0gICBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzIGluY29uc2lzdGVudCBvciBkYW1hZ2VkIGluCi0gICBzb21lIHdheS4gSWYgdGhhdCBiZWNvbWVzIGEgcHJvYmxlbSwgeW91IG1heSB3YW50IHRvIGRvd25sb2FkIHRoZQotICAgcmVnY2xlYW4uZXhlIGZyb20gdGhlIE1TIHdlYnNpdGUgYW5kIHVzZSBpdCB0byBjbGVhbiB1cCB0aGUgcmVnaXN0cnkuCi0gICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsd2F5cyB1c2UgcmVnZWRpdC5leGUgdG8gZXhwb3J0IHRoZSByZWdpc3RyeQotICAgZGF0YSB5b3Ugd2FudCBpbnRvIGEgdGV4dCBmaWxlLCBhbmQgdGhlbiBpbXBvcnQgaXQgaW4gV2luZS4KLSAgIAotICBXaW5lIHJlZ2lzdHJ5IGRhdGEgZmlsZXMKLSAgCi0gICBJbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIHN1YmRpcmVjdG9yeSBuYW1lZCAud2luZSwKLSAgIHdoZXJlIFdpbmUgd2lsbCB0cnkgdG8gc2F2ZSBpdHMgcmVnaXN0cnkgYnkgZGVmYXVsdC4gSXQgc2F2ZXMgaW50bwotICAgZm91ciBmaWxlcywgd2hpY2ggYXJlOgotICAgCi0gICBzeXN0ZW0ucmVnCi0gICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfTE9DQUxfTUFDSElORS4KLSAgICAgICAgICAKLSAgIHVzZXIucmVnCi0gICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIEhLRVlfQ1VSUkVOVF9VU0VSLgotICAgICAgICAgIAotICAgdXNlcmRlZi5yZWcKLSAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9VU0VSU1wuRGVmYXVsdCAoaS5lLiB0aGUgZGVmYXVsdCB1c2VyCi0gICAgICAgICAgc2V0dGluZ3MpLgotICAgICAgICAgIAotICAgd2luZS51c2VycmVnCi0gICAgICAgICAgV2luZSBzYXZlcyBIS0VZX1VTRVJTIHRvIHRoaXMgZmlsZSAoYm90aCBjdXJyZW50IGFuZCBkZWZhdWx0Ci0gICAgICAgICAgdXNlciksIGJ1dCBkb2VzIG5vdCBsb2FkIGZyb20gaXQsIHVubGVzcyB1c2VyZGVmLnJlZyBpcwotICAgICAgICAgIG1pc3NpbmcuCi0gICAgICAgICAgCi0gICBBbGwgb2YgdGhlc2UgZmlsZXMgYXJlIGh1bWFuLXJlYWRhYmxlIHRleHQgZmlsZXMsIHNvIHVubGlrZSBXaW5kb3dzLAotICAgeW91IGNhbiBhY3R1YWxseSB1c2UgYW4gb3JkaW5hcnkgdGV4dCBlZGl0b3Igb24gdGhlbSBpZiB5b3UgbXVzdC4KLSAgIAotICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgZmlsZXMsIFdpbmUgY2FuIGFsc28gb3B0aW9uYWxseSBsb2FkIGZyb20gZ2xvYmFsCi0gICByZWdpc3RyeSBmaWxlcyByZXNpZGluZyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGdsb2JhbCB3aW5lLmNvbmYKLSAgIChpLmUuIC91c3IvbG9jYWwvZXRjIGlmIHlvdSBjb21waWxlZCBmcm9tIHNvdXJjZSkuIFRoZXNlIGFyZToKLSAgIAotICAgd2luZS5zeXN0ZW1yZWcKLSAgICAgICAgICBDb250YWlucyBIS0VZX0xPQ0FMX01BQ0hJTkUuCi0gICAgICAgICAgCi0gICB3aW5lLnVzZXJyZWcKLSAgICAgICAgICBDb250YWlucyBIS0VZX1VTRVJTLgotICAgICAgICAgIAotICBTeXN0ZW0gYWRtaW5pc3RyYXRpb24KLSAgCi0gICBXaXRoIHRoZSBhYm92ZSBmaWxlIHN0cnVjdHVyZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgc3lzdGVtCi0gICBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIHNvIHRoYXQgYSBzeXN0ZW0gV2luZQotICAgaW5zdGFsbGF0aW9uIChhbmQgYXBwbGljYXRpb25zKSBjYW4gYmUgc2hhcmVkIGJ5IGFsbCB0aGUgdXNlcnMsIGFuZAotICAgc3RpbGwgbGV0IHRoZSB1c2VycyBhbGwgaGF2ZSB0aGVpciBvd24gcGVyc29uYWxpemVkIGNvbmZpZ3VyYXRpb24uIEFuCi0gICBhZG1pbmlzdHJhdG9yIGNhbiwgYWZ0ZXIgaGF2aW5nIGluc3RhbGxlZCBXaW5lIGFuZCBhbnkgV2luZG93cwotICAgYXBwbGljYXRpb24gc29mdHdhcmUgaGUgd2FudHMgdGhlIHVzZXJzIHRvIGhhdmUgYWNjZXNzIHRvLCBjb3B5IHRoZQotICAgcmVzdWx0aW5nIHN5c3RlbS5yZWcgYW5kIHdpbmUudXNlcnJlZyBvdmVyIHRvIHRoZSBnbG9iYWwgcmVnaXN0cnkKLSAgIGZpbGVzICh3aGljaCB3ZSBhc3N1bWUgd2lsbCByZXNpZGUgaW4gL3Vzci9sb2NhbC9ldGMgaGVyZSksIHdpdGg6Ci0gICAKLWNkIH4vLndpbmUKLWNwIHN5c3RlbS5yZWcgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcKLWNwIHdpbmUudXNlcnJlZyAvdXNyL2xvY2FsL2V0Yy93aW5lLnVzZXJyZWcKLQotICAgYW5kIHBlcmhhcHMgZXZlbiBzeW1saW5rIHRoZXNlIGJhY2sgdG8gdGhlIGFkbWluaXN0cmF0b3IncyBhY2NvdW50LCB0bwotICAgbWFrZSBpdCBlYXNpZXIgdG8gaW5zdGFsbCBhcHBzIHN5c3RlbS13aWRlIGxhdGVyOgotICAgCi1sbiAtc2YgL3Vzci9sb2NhbC9ldGMvd2luZS5zeXN0ZW1yZWcgc3lzdGVtLnJlZwotbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZyB3aW5lLnVzZXJyZWcKLQotICAgTm90ZSB0aGF0IHRoZSB0b29scy93aW5laW5zdGFsbCBzY3JpcHQgYWxyZWFkeSBkb2VzIGFsbCBvZiB0aGlzIGZvcgotICAgeW91LCBpZiB5b3UgaW5zdGFsbCBXaW5lIGFzIHJvb3QuIElmIHlvdSB0aGVuIGluc3RhbGwgV2luZG93cwotICAgYXBwbGljYXRpb25zIHdoaWxlIGxvZ2dlZCBpbiBhcyByb290LCBhbGwgeW91ciB1c2VycyB3aWxsCi0gICBhdXRvbWF0aWNhbGx5IGJlIGFibGUgdG8gdXNlIHRoZW0uIFdoaWxlIHRoZSBhcHBsaWNhdGlvbiBzZXR1cCB3aWxsIGJlCi0gICB0YWtlbiBmcm9tIHRoZSBnbG9iYWwgcmVnaXN0cnksIHRoZSB1c2VycycgcGVyc29uYWxpemVkIGNvbmZpZ3VyYXRpb25zCi0gICB3aWxsIGJlIHNhdmVkIGluIHRoZWlyIG93biBob21lIGRpcmVjdG9yaWVzLgotICAgCi0gICBCdXQgYmUgY2FyZWZ1bCB3aXRoIHdoYXQgeW91IGRvIHdpdGggdGhlIGFkbWluaXN0cmF0b3IgYWNjb3VudCAtIGlmCi0gICB5b3UgZG8gY29weSBvciBsaW5rIHRoZSBhZG1pbmlzdHJhdG9yJ3MgcmVnaXN0cnkgdG8gdGhlIGdsb2JhbAotICAgcmVnaXN0cnksIGFueSB1c2VyIG1pZ2h0IGJlIGFibGUgdG8gcmVhZCB0aGUgYWRtaW5pc3RyYXRvcidzCi0gICBwcmVmZXJlbmNlcywgd2hpY2ggbWlnaHQgbm90IGJlIGdvb2QgaWYgc2Vuc2l0aXZlIGluZm9ybWF0aW9uCi0gICAocGFzc3dvcmRzLCBwZXJzb25hbCBpbmZvcm1hdGlvbiwgZXRjKSBpcyBzdG9yZWQgdGhlcmUuIE9ubHkgdXNlIHRoZQotICAgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGluc3RhbGwgc29mdHdhcmUsIG5vdCBmb3IgZGFpbHkgd29yazsgdXNlIGFuCi0gICBvcmRpbmFyeSB1c2VyIGFjY291bnQgZm9yIHRoYXQuCi0gICAKLSAgVGhlIGRlZmF1bHQgcmVnaXN0cnkKLSAgCi0gICBBIFdpbmRvd3MgcmVnaXN0cnkgY29udGFpbnMgbWFueSBrZXlzIGJ5IGRlZmF1bHQsIGFuZCBzb21lIG9mIHRoZW0gYXJlCi0gICBuZWNlc3NhcnkgZm9yIGV2ZW4gaW5zdGFsbGVycyB0byBvcGVyYXRlIGNvcnJlY3RseS4gVGhlIGtleXMgdGhhdCB0aGUKLSAgIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0byBpbnN0YWxsIGFwcGxpY2F0aW9ucyBhcmUKLSAgIGRpc3RyaWJ1dGVkIGluIGEgZmlsZSBjYWxsZWQgIndpbmVkZWZhdWx0LnJlZyIuIEl0IGlzIGF1dG9tYXRpY2FsbHkKLSAgIGluc3RhbGxlZCBmb3IgeW91IGlmIHlvdSB1c2UgdGhlIHRvb2xzL3dpbmVpbnN0YWxsIHNjcmlwdCwgYnV0IGlmIHlvdQotICAgd2FudCB0byBpbnN0YWxsIGl0IG1hbnVhbGx5LCB5b3UgY2FuIGRvIHNvIGJ5IHVzaW5nIHRoZSByZWdhcGkgdG9vbC4KLSAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uL25vLXdpbmRvd3MgZG9jdW1lbnQgaW4gdGhlIFdpbmUgZGlzdHJpYnV0aW9uLgotICAgCi0gIFRoZSBbcmVnaXN0cnldIHNlY3Rpb24KLSAgCi0gICBXaXRoIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmcmVzaCBpbiBtaW5kLCBsZXQncyBsb29rIGF0IHRoZQotICAgd2luZS5jb25mLy53aW5lcmMgb3B0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIHJlZ2lzdHJ5LgotICAgCi0gICBMb2FkR2xvYmFsUmVnaXN0cnlGaWxlcwotICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIGdsb2JhbCByZWdpc3RyeSBmaWxlcywgaWYKLSAgICAgICAgICB0aGV5IGV4aXN0LgotICAgICAgICAgIAotICAgTG9hZEhvbWVSZWdpc3RyeUZpbGVzCi0gICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0byB0cnkgdG8gbG9hZCB0aGUgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzIChpbgotICAgICAgICAgIHRoZSAud2luZSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSkuCi0gICAgICAgICAgCi0gICBMb2FkV2luZG93c1JlZ2lzdHJ5RmlsZXMKLSAgICAgICAgICBDb250cm9scyB3aGV0aGVyIFdpbmUgd2lsbCBhdHRlbXB0IHRvIGxvYWQgcmVnaXN0cnkgZGF0YSBmcm9tIGEKLSAgICAgICAgICByZWFsIFdpbmRvd3MgcmVnaXN0cnkgaW4gYW4gZXhpc3RpbmcgTVMgV2luZG93cyBpbnN0YWxsYXRpb24uCi0gICAgICAgICAgCi0gICBXcml0ZXRvSG9tZVJlZ2lzdHJ5RmlsZXMKLSAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHJlZ2lzdHJ5IGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSB1c2VyJ3MKLSAgICAgICAgICByZWdpc3RyeSBmaWxlcy4gKEN1cnJlbnRseSwgdGhlcmUgaXMgbm8gYWx0ZXJuYXRpdmUsIHNvIGlmIHlvdQotICAgICAgICAgIHR1cm4gdGhpcyBvZmYsIFdpbmUgY2Fubm90IHNhdmUgdGhlIHJlZ2lzdHJ5IG9uIGRpc2sgYXQgYWxsOwotICAgICAgICAgIGFmdGVyIHlvdSBleGl0IFdpbmUsIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGxvc3QuKQotICAgICAgICAgIAotICAgVXNlTmV3Rm9ybWF0Ci0gICAgICAgICAgVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuIFdpbmUgbm93IGFsd2F5cyB1c2UgdGhlIG5ldyBmb3JtYXQ7Ci0gICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIG9sZCBmb3JtYXQgd2FzIHJlbW92ZWQgYSB3aGlsZSBhZ28uCi0gICAgICAgICAgCi0gICBQZXJpb2RpY1NhdmUKLSAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBpdCBzcGVjaWZpZXMgdGhhdCB5b3UKLSAgICAgICAgICB3YW50IHRoZSByZWdpc3RyeSB0byBiZSBzYXZlZCB0byBkaXNrIGF0IHRoZSBnaXZlbiBpbnRlcnZhbC4gSWYKLSAgICAgICAgICBpdCBpcyBub3Qgc2V0LCB0aGUgcmVnaXN0cnkgd2lsbCBvbmx5IGJlIHNhdmVkIHRvIGRpc2sgd2hlbiB0aGUKLSAgICAgICAgICB3aW5lc2VydmVyIHRlcm1pbmF0ZXMuCi0gICAgICAgICAgCi0gICBTYXZlT25seVVwZGF0ZWRLZXlzCi0gICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgZW50aXJlIHJlZ2lzdHJ5IGlzIHNhdmVkIHRvIHRoZSB1c2VyJ3MKLSAgICAgICAgICByZWdpc3RyeSBmaWxlcywgb3Igb25seSBzdWJrZXlzIHRoZSB1c2VyIGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KLSAgICAgICAgICBDb25zaWRlcmluZyB0aGF0IHRoZSB1c2VyJ3MgcmVnaXN0cnkgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsCi0gICAgICAgICAgcmVnaXN0cnkgZmlsZXMgYW5kIFdpbmRvd3MgcmVnaXN0cnkgZmlsZXMsIGl0IHVzdWFsbHkgbWFrZXMKLSAgICAgICAgICBzZW5zZSB0byBvbmx5IHNhdmUgdXNlci1tb2RpZmllZCBzdWJrZXlzOyB0aGF0IHdheSwgY2hhbmdlcyB0bwotICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBnbG9iYWwgb3IgV2luZG93cyByZWdpc3RyaWVzIHdpbGwgc3RpbGwgYWZmZWN0Ci0gICAgICAgICAgdGhlIHVzZXIuCi0gICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gT3ZlIEvldmVuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZ2lzdHJ5LnNnbWwgYi9kb2N1bWVudGF0aW9uL3JlZ2lzdHJ5LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwMGVlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVnaXN0cnkuc2dtbApAQCAtMCwwICsxLDM0NCBAQAorICA8c2VjdDEgaWQ9InJlZ2lzdHJ5Ij4KKyAgICA8dGl0bGU+VGhlIFJlZ2lzdHJ5PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkgT3ZlIEvldmVuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3JlZ2lzdHJ5PC9maWxlbmFtZT4pCisgICAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEFmdGVyIFdpbjMueCwgdGhlIHJlZ2lzdHJ5IGJlY2FtZSBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgV2luZG93cy4KKyAgICAgIEl0IGlzIHRoZSBwbGFjZSB3aGVyZSBib3RoIFdpbmRvd3MgaXRzZWxmLCBhbmQgYWxsCisgICAgICBXaW45NS85OC9OVC8yMDAwL3doYXRldmVyLWNvbXBsaWFudCBhcHBsaWNhdGlvbnMsIHN0b3JlCisgICAgICBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZSBkYXRhLiBXaGlsZSBtb3N0IHNhbmUgc3lzdGVtCisgICAgICBhZG1pbmlzdHJhdG9ycyAoYW5kIFdpbmUgZGV2ZWxvcGVycykgY3Vyc2UgYmFkbHkgYXQgdGhlIHR3aXN0ZWQKKyAgICAgIG5hdHVyZSBvZiB0aGUgV2luZG93cyByZWdpc3RyeSwgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IGZvciBXaW5lCisgICAgICB0byBzdXBwb3J0IGl0IHNvbWVob3cuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3QyPgorICAgICAgPHRpdGxlPlJlZ2lzdHJ5IHN0cnVjdHVyZTwvdGl0bGU+CisgIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGlzIGFuIGVsYWJvcmF0ZSB0cmVlIHN0cnVjdHVyZSwgYW5kIG5vdAorICAgICAgICBldmVuIG1vc3QgV2luZG93cyBwcm9ncmFtbWVycyBhcmUgZnVsbHkgYXdhcmUgb2YgaG93IHRoZQorICAgICAgICByZWdpc3RyeSBpcyBsYWlkIG91dCwgd2l0aCBpdHMgZGlmZmVyZW50ICJoaXZlcyIgYW5kIG51bWVyb3VzCisgICAgICAgIGxpbmtzIGJldHdlZW4gdGhlbTsgYSBmdWxsIGNvdmVyYWdlIGlzIG91dCBvZiB0aGUgc2NvcGUgb2YKKyAgICAgICAgdGhpcyBkb2N1bWVudC4gQnV0IGhlcmUgYXJlIHRoZSBiYXNpYyByZWdpc3RyeSBrZXlzIHlvdSBtaWdodAorICAgICAgICBuZWVkIHRvIGtub3cgYWJvdXQgZm9yIG5vdy4KKyAgICAgIDwvcGFyYT4KKworCisgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPkhLRVlfTE9DQUxfTUFDSElORTwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhpcyBmdW5kYW1lbnRhbCByb290IGtleSAoaW4gd2luOXgsIHN0b3JlZCBpbiB0aGUKKyAgICAgICAgICAgICAgaGlkZGVuIGZpbGUgPGZpbGVuYW1lPnN5c3RlbS5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKKyAgICAgICAgICAgICAgZXZlcnl0aGluZyBwZXJ0YWluaW5nIHRvIHRoZSBjdXJyZW50IFdpbmRvd3MKKyAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dGVybT5IS0VZX1VTRVJTPC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGlzIGZ1bmRhbWVudGFsIHJvb3Qga2V5IChpbiB3aW45eCwgc3RvcmVkIGluIHRoZQorICAgICAgICAgICAgICBoaWRkZW4gZmlsZSA8ZmlsZW5hbWU+dXNlci5kYXQ8L2ZpbGVuYW1lPikgY29udGFpbnMKKyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBkYXRhIGZvciBldmVyeSB1c2VyIG9mIHRoZSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPkhLRVlfQ0xBU1NFU19ST09UPC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGlzIGlzIGEgbGluayB0byBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcQ2xhc3Nlcy4KKyAgICAgICAgICAgICAgSXQgY29udGFpbnMgZGF0YSBkZXNjcmliaW5nIHRoaW5ncyBsaWtlIGZpbGUKKyAgICAgICAgICAgICAgYXNzb2NpYXRpb25zLCBPTEUgZG9jdW1lbnQgaGFuZGxlcnMsIGFuZCBDT00gY2xhc3Nlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+SEtFWV9DVVJSRU5UX1VTRVI8L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoaXMgaXMgYSBsaW5rIHRvIEhLRVlfVVNFUlNceW91cl91c2VybmFtZSwgaS5lLiwgeW91cgorICAgICAgICAgICAgICBwZXJzb25hbCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0Mj4KKyAgICAgIDx0aXRsZT5Vc2luZyBhIFdpbmRvd3MgcmVnaXN0cnk8L3RpdGxlPgorICAKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgcG9pbnQgV2luZSBhdCBhbiBleGlzdGluZyBNUyBXaW5kb3dzIGluc3RhbGxhdGlvbiAoYnkKKyAgICAgICAgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3JpZXMgaW4KKyAgICAgICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgIDxmaWxlbmFtZT4ud2luZXJjPC9maWxlbmFtZT4pLCB0aGVuIFdpbmUgaXMgYWJsZSB0byBsb2FkCisgICAgICAgIHJlZ2lzdHJ5IGRhdGEgZnJvbSBpdC4gSG93ZXZlciwgV2luZSB3aWxsIG5vdCBzYXZlIGFueXRoaW5nIHRvCisgICAgICAgIHRoZSByZWFsIFdpbmRvd3MgcmVnaXN0cnksIGJ1dCByYXRoZXIgdG8gaXRzIG93biByZWdpc3RyeQorICAgICAgICBmaWxlcyAoc2VlIGJlbG93KS4gT2YgY291cnNlLCBpZiBhIHBhcnRpY3VsYXIgcmVnaXN0cnkgdmFsdWUKKyAgICAgICAgZXhpc3RzIGluIGJvdGggdGhlIFdpbmRvd3MgcmVnaXN0cnkgYW5kIGluIHRoZSBXaW5lIHJlZ2lzdHJ5LAorICAgICAgICB0aGVuIFdpbmUgd2lsbCB1c2UgdGhlIGxhdHRlci4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPY2Nhc2lvbmFsbHksIFdpbmUgbWF5IGhhdmUgdHJvdWJsZSBsb2FkaW5nIHRoZSBXaW5kb3dzCisgICAgICAgIHJlZ2lzdHJ5LiBVc3VhbGx5LCB0aGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdHJ5IGlzCisgICAgICAgIGluY29uc2lzdGVudCBvciBkYW1hZ2VkIGluIHNvbWUgd2F5LiBJZiB0aGF0IGJlY29tZXMgYQorICAgICAgICBwcm9ibGVtLCB5b3UgbWF5IHdhbnQgdG8gZG93bmxvYWQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5yZWdjbGVhbi5leGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBNUyB3ZWJzaXRlIGFuZCB1c2UKKyAgICAgICAgaXQgdG8gY2xlYW4gdXAgdGhlIHJlZ2lzdHJ5LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsd2F5cyB1c2UKKyAgICAgICAgPGZpbGVuYW1lPnJlZ2VkaXQuZXhlPC9maWxlbmFtZT4gdG8gZXhwb3J0IHRoZSByZWdpc3RyeSBkYXRhCisgICAgICAgIHlvdSB3YW50IGludG8gYSB0ZXh0IGZpbGUsIGFuZCB0aGVuIGltcG9ydCBpdCBpbiBXaW5lLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDI+CisgICAgICA8dGl0bGU+V2luZSByZWdpc3RyeSBkYXRhIGZpbGVzcjwvdGl0bGU+CisgIAorICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHRoZXJlIGlzIGEgc3ViZGlyZWN0b3J5IG5hbWVkCisgICAgICAgIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+LCB3aGVyZSBXaW5lIHdpbGwgdHJ5IHRvIHNhdmUgaXRzCisgICAgICAgIHJlZ2lzdHJ5IGJ5IGRlZmF1bHQuIEl0IHNhdmVzIGludG8gZm91ciBmaWxlcywgd2hpY2ggYXJlOgorICAgICAgPC9wYXJhPgorCisgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT5zeXN0ZW0ucmVnPC9maWxlbmFtZT48L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyBIS0VZX0xPQ0FMX01BQ0hJTkUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9DVVJSRU5UX1VTRVIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT51c2VyZGVmLnJlZzwvZmlsZW5hbWU+PC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgSEtFWV9VU0VSU1wuRGVmYXVsdCAoaS5lLiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICB1c2VyIHNldHRpbmdzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPndpbmUudXNlcnJlZzwvZmlsZW5hbWU+PC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBXaW5lIHNhdmVzIEhLRVlfVVNFUlMgdG8gdGhpcyBmaWxlIChib3RoIGN1cnJlbnQgYW5kCisgICAgICAgICAgICAgIGRlZmF1bHQgdXNlciksIGJ1dCBkb2VzIG5vdCBsb2FkIGZyb20gaXQsIHVubGVzcworICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlcmRlZi5yZWc8L2ZpbGVuYW1lPiBpcyBtaXNzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIG9mIHRoZXNlIGZpbGVzIGFyZSBodW1hbi1yZWFkYWJsZSB0ZXh0IGZpbGVzLCBzbyB1bmxpa2UKKyAgICAgICAgV2luZG93cywgeW91IGNhbiBhY3R1YWxseSB1c2UgYW4gb3JkaW5hcnkgdGV4dCBlZGl0b3Igb24gdGhlbQorICAgICAgICBpZiB5b3UgbXVzdC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVzZSBmaWxlcywgV2luZSBjYW4gYWxzbyBvcHRpb25hbGx5IGxvYWQgZnJvbQorICAgICAgICBnbG9iYWwgcmVnaXN0cnkgZmlsZXMgcmVzaWRpbmcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQorICAgICAgICBnbG9iYWwgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IChpLmUuCisgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0YzwvZmlsZW5hbWU+IGlmIHlvdSBjb21waWxlZCBmcm9tCisgICAgICAgIHNvdXJjZSkuIFRoZXNlIGFyZToKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+d2luZS5zeXN0ZW1yZWc8L2ZpbGVuYW1lPjwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5Db250YWlucyBIS0VZX0xPQ0FMX01BQ0hJTkUuPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT53aW5lLnVzZXJyZWc8L2ZpbGVuYW1lPjwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT5Db250YWlucyBIS0VZX1VTRVJTLjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDI+CisgICAgICA8dGl0bGU+U3lzdGVtIGFkbWluaXN0cmF0aW9uPC90aXRsZT4KKyAgCisgICAgICA8cGFyYT4KKyAgICAgICAgV2l0aCB0aGUgYWJvdmUgZmlsZSBzdHJ1Y3R1cmUsIGl0IGlzIHBvc3NpYmxlIGZvciBhIHN5c3RlbQorICAgICAgICBhZG1pbmlzdHJhdG9yIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIHNvIHRoYXQgYSBzeXN0ZW0gV2luZQorICAgICAgICBpbnN0YWxsYXRpb24gKGFuZCBhcHBsaWNhdGlvbnMpIGNhbiBiZSBzaGFyZWQgYnkgYWxsIHRoZQorICAgICAgICB1c2VycywgYW5kIHN0aWxsIGxldCB0aGUgdXNlcnMgYWxsIGhhdmUgdGhlaXIgb3duIHBlcnNvbmFsaXplZAorICAgICAgICBjb25maWd1cmF0aW9uLiBBbiBhZG1pbmlzdHJhdG9yIGNhbiwgYWZ0ZXIgaGF2aW5nIGluc3RhbGxlZAorICAgICAgICBXaW5lIGFuZCBhbnkgV2luZG93cyBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBoZSB3YW50cyB0aGUgdXNlcnMKKyAgICAgICAgdG8gaGF2ZSBhY2Nlc3MgdG8sIGNvcHkgdGhlIHJlc3VsdGluZworICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtLnJlZzwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+d2luZS51c2VycmVnPC9maWxlbmFtZT4gb3ZlciB0byB0aGUgZ2xvYmFsIHJlZ2lzdHJ5CisgICAgICAgIGZpbGVzICh3aGljaCB3ZSBhc3N1bWUgd2lsbCByZXNpZGUgaW4KKyAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjPC9maWxlbmFtZT4gaGVyZSksIHdpdGg6CisgICAgICA8L3BhcmE+CisgICAgICA8c2NyZWVuPgorY2Qgfi8ud2luZQorY3Agc3lzdGVtLnJlZyAvdXNyL2xvY2FsL2V0Yy93aW5lLnN5c3RlbXJlZworY3Agd2luZS51c2VycmVnIC91c3IvbG9jYWwvZXRjL3dpbmUudXNlcnJlZworICAgICAgPC9zY3JlZW4+CisgICAgICA8cGFyYT4KKyAgICAgICAgYW5kIHBlcmhhcHMgZXZlbiBzeW1saW5rIHRoZXNlIGJhY2sgdG8gdGhlIGFkbWluaXN0cmF0b3IncworICAgICAgICBhY2NvdW50LCB0byBtYWtlIGl0IGVhc2llciB0byBpbnN0YWxsIGFwcHMgc3lzdGVtLXdpZGUgbGF0ZXI6CisgICAgICA8L3BhcmE+CisgICAgICA8c2NyZWVuPgorbG4gLXNmIC91c3IvbG9jYWwvZXRjL3dpbmUuc3lzdGVtcmVnIHN5c3RlbS5yZWcKK2xuIC1zZiAvdXNyL2xvY2FsL2V0Yy93aW5lLnVzZXJyZWcgd2luZS51c2VycmVnCisgICAgICA8L3NjcmVlbj4KKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdGhlIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICBhbHJlYWR5IGRvZXMgYWxsIG9mIHRoaXMgZm9yIHlvdSwgaWYgeW91IGluc3RhbGwgV2luZSBhcyByb290LgorICAgICAgICBJZiB5b3UgdGhlbiBpbnN0YWxsIFdpbmRvd3MgYXBwbGljYXRpb25zIHdoaWxlIGxvZ2dlZCBpbiBhcworICAgICAgICByb290LCBhbGwgeW91ciB1c2VycyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWJsZSB0byB1c2UgdGhlbS4KKyAgICAgICAgV2hpbGUgdGhlIGFwcGxpY2F0aW9uIHNldHVwIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsCisgICAgICAgIHJlZ2lzdHJ5LCB0aGUgdXNlcnMnIHBlcnNvbmFsaXplZCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIHNhdmVkCisgICAgICAgIGluIHRoZWlyIG93biBob21lIGRpcmVjdG9yaWVzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEJ1dCBiZSBjYXJlZnVsIHdpdGggd2hhdCB5b3UgZG8gd2l0aCB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50CisgICAgICAgIC0gaWYgeW91IGRvIGNvcHkgb3IgbGluayB0aGUgYWRtaW5pc3RyYXRvcidzIHJlZ2lzdHJ5IHRvIHRoZQorICAgICAgICBnbG9iYWwgcmVnaXN0cnksIGFueSB1c2VyIG1pZ2h0IGJlIGFibGUgdG8gcmVhZCB0aGUKKyAgICAgICAgYWRtaW5pc3RyYXRvcidzIHByZWZlcmVuY2VzLCB3aGljaCBtaWdodCBub3QgYmUgZ29vZCBpZgorICAgICAgICBzZW5zaXRpdmUgaW5mb3JtYXRpb24gKHBhc3N3b3JkcywgcGVyc29uYWwgaW5mb3JtYXRpb24sIGV0YykKKyAgICAgICAgaXMgc3RvcmVkIHRoZXJlLiBPbmx5IHVzZSB0aGUgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGluc3RhbGwKKyAgICAgICAgc29mdHdhcmUsIG5vdCBmb3IgZGFpbHkgd29yazsgdXNlIGFuIG9yZGluYXJ5IHVzZXIgYWNjb3VudCBmb3IKKyAgICAgICAgdGhhdC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyPgorICAgICAgPHRpdGxlPlRoZSBkZWZhdWx0IHJlZ2lzdHJ5PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEEgV2luZG93cyByZWdpc3RyeSBjb250YWlucyBtYW55IGtleXMgYnkgZGVmYXVsdCwgYW5kIHNvbWUgb2YKKyAgICAgICAgdGhlbSBhcmUgbmVjZXNzYXJ5IGZvciBldmVuIGluc3RhbGxlcnMgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisgICAgICAgIFRoZSBrZXlzIHRoYXQgdGhlIFdpbmUgZGV2ZWxvcGVycyBoYXZlIGZvdW5kIG5lY2Vzc2FyeSB0bworICAgICAgICBpbnN0YWxsIGFwcGxpY2F0aW9ucyBhcmUgZGlzdHJpYnV0ZWQgaW4gYSBmaWxlIGNhbGxlZAorICAgICAgICA8ZmlsZW5hbWU+d2luZWRlZmF1bHQucmVnPC9maWxlbmFtZT4uIEl0IGlzIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgaW5zdGFsbGVkIGZvciB5b3UgaWYgeW91IHVzZSB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gc2NyaXB0LCBidXQgaWYgeW91IHdhbnQKKyAgICAgICAgdG8gaW5zdGFsbCBpdCBtYW51YWxseSwgeW91IGNhbiBkbyBzbyBieSB1c2luZyB0aGUKKyAgICAgICAgPGNvbW1hbmQ+cmVnYXBpPC9jb21tYW5kPiB0b29sLiBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB0aGlzIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi9uby13aW5kb3dzPC9maWxlbmFtZT4gZG9jdW1lbnQgaW4gdGhlCisgICAgICAgIFdpbmUgZGlzdHJpYnV0aW9uLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDI+CisgICAgICA8dGl0bGU+VGhlIFtyZWdpc3RyeV0gc2VjdGlvbjwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaXRoIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmcmVzaCBpbiBtaW5kLCBsZXQncyBsb29rIGF0IHRoZQorICAgICAgICA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4vPGZpbGVuYW1lPi53aW5lcmM8L2ZpbGVuYW1lPgorICAgICAgICBvcHRpb25zIGZvciBoYW5kbGluZyB0aGUgcmVnaXN0cnkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+TG9hZEdsb2JhbFJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIGdsb2JhbCByZWdpc3RyeQorICAgICAgICAgICAgICBmaWxlcywgaWYgdGhleSBleGlzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dGVybT5Mb2FkSG9tZVJlZ2lzdHJ5RmlsZXM8L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdG8gdHJ5IHRvIGxvYWQgdGhlIHVzZXIncyByZWdpc3RyeQorICAgICAgICAgICAgICBmaWxlcyAoaW4gdGhlIDxmaWxlbmFtZT4ud2luZTwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgICA8dGVybT5Mb2FkV2luZG93c1JlZ2lzdHJ5RmlsZXM8L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgV2luZSB3aWxsIGF0dGVtcHQgdG8gbG9hZCByZWdpc3RyeSBkYXRhCisgICAgICAgICAgICAgIGZyb20gYSByZWFsIFdpbmRvd3MgcmVnaXN0cnkgaW4gYW4gZXhpc3RpbmcgTVMgV2luZG93cworICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+V3JpdGV0b0hvbWVSZWdpc3RyeUZpbGVzPC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHJlZ2lzdHJ5IGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZQorICAgICAgICAgICAgICB1c2VyJ3MgcmVnaXN0cnkgZmlsZXMuIChDdXJyZW50bHksIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgIGFsdGVybmF0aXZlLCBzbyBpZiB5b3UgdHVybiB0aGlzIG9mZiwgV2luZSBjYW5ub3Qgc2F2ZQorICAgICAgICAgICAgICB0aGUgcmVnaXN0cnkgb24gZGlzayBhdCBhbGw7IGFmdGVyIHlvdSBleGl0IFdpbmUsIHlvdXIKKyAgICAgICAgICAgICAgY2hhbmdlcyB3aWxsIGJlIGxvc3QuKQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPlVzZU5ld0Zvcm1hdDwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuIFdpbmUgbm93IGFsd2F5cyB1c2UgdGhlIG5ldworICAgICAgICAgICAgICBmb3JtYXQ7IHN1cHBvcnQgZm9yIHRoZSBvbGQgZm9ybWF0IHdhcyByZW1vdmVkIGEgd2hpbGUKKyAgICAgICAgICAgICAgYWdvLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPlBlcmlvZGljU2F2ZTwvdGVybT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgaXQgc3BlY2lmaWVzCisgICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdGhlIHJlZ2lzdHJ5IHRvIGJlIHNhdmVkIHRvIGRpc2sgYXQgdGhlCisgICAgICAgICAgICAgIGdpdmVuIGludGVydmFsLiBJZiBpdCBpcyBub3Qgc2V0LCB0aGUgcmVnaXN0cnkgd2lsbCBvbmx5CisgICAgICAgICAgICAgIGJlIHNhdmVkIHRvIGRpc2sgd2hlbiB0aGUgd2luZXNlcnZlciB0ZXJtaW5hdGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgIDx0ZXJtPlNhdmVPbmx5VXBkYXRlZEtleXM8L3Rlcm0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgdGhlIGVudGlyZSByZWdpc3RyeSBpcyBzYXZlZCB0byB0aGUKKyAgICAgICAgICAgICAgdXNlcidzIHJlZ2lzdHJ5IGZpbGVzLCBvciBvbmx5IHN1YmtleXMgdGhlIHVzZXIgaGF2ZQorICAgICAgICAgICAgICBhY3R1YWxseSBjaGFuZ2VkLiBDb25zaWRlcmluZyB0aGF0IHRoZSB1c2VyJ3MgcmVnaXN0cnkKKyAgICAgICAgICAgICAgd2lsbCBvdmVycmlkZSBhbnkgZ2xvYmFsIHJlZ2lzdHJ5IGZpbGVzIGFuZCBXaW5kb3dzCisgICAgICAgICAgICAgIHJlZ2lzdHJ5IGZpbGVzLCBpdCB1c3VhbGx5IG1ha2VzIHNlbnNlIHRvIG9ubHkgc2F2ZQorICAgICAgICAgICAgICB1c2VyLW1vZGlmaWVkIHN1YmtleXM7IHRoYXQgd2F5LCBjaGFuZ2VzIHRvIHRoZSByZXN0IG9mCisgICAgICAgICAgICAgIHRoZSBnbG9iYWwgb3IgV2luZG93cyByZWdpc3RyaWVzIHdpbGwgc3RpbGwgYWZmZWN0IHRoZQorICAgICAgICAgICAgICB1c2VyLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooImNvbmZpZ3VyaW5nLnNnbWwiICJjaGFwdGVyIiAic2VjdDEiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Jlc291cmNlcyBiL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzRkZGJjLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotVGhpcyBkb2N1bWVudCBkZXNyaWJlcyB0b29scyBmb3IgaGFuZGxpbmcgcmVzb3VyY2VzIHdpdGhpbiB3aW5lCi0KLSMjIyBiaW4ycmVzICMjIwotCi0gVGhpcyB0b29sIGFsbG93cyB0aGUgZWRpdGluZyBvZiBlbWJlZGRlZCBiaW5hcnkgcmVzb3VyY2VzIHdpdGhpbiAKLSAqLnJjIGZpbGVzLiBUaGVzZSByZXNvdXJjZXMgYXJlIHN0b3JlZCBhcyBoZXggZHVtcCBzbyB0aGV5IGNhbiBiZQotIHN0b3JlZCB3aXRoaW4gdGhlIGN2cy4gVGhpcyBtYWtlcyB0aGUgZWRpdGluZyBvZiB0aGUgZW1iZWRkZWQKLSBiaXRtYXBzIGFuZCBpY29ucyBoYXJkZXIuCi0gCi0gIyMjIENyZWF0ZSBiaW5hcnkgZmlsZXMgZnJvbS5yYyAjIyMKLQotICB0aGUgcmVzb3VyY2VzIGluIHRoZSAucmMgZmlsZSBoYXZlIHRvIGJlIG1hcmtlZCBieSBhIGhlYWRlcjoKLQotCS8qIEJJTlJFUyBpZGJfc3RkX3NtYWxsLmJtcCAqLwotIAlJREJfU1REX1NNQUxMIEJJVE1BUCBMT0FET05DQUxMIERJU0NBUkRBQkxFCi0JewotCSAnNDIgNEQgMjAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgNzYgMDAgMDAgMDAgMjggMDAnCi0KLSAgQklOUkVTIGlzIHRoZSBrZXl3b3JkIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUuCi0gICJiaW4ycmVzIC1kIGJpbiByc3JjLnJjIiBnZW5lcmF0ZXMgYmluYXJ5IGZpbGVzIGZyb20gYWxsIG1hcmtlZAotICByZXNvdXJjZXMuIElmIHRoZSBiaW5hcnkgZmlsZSBpcyBuZXdlciBpdCBnZXRzIG5vdCBvdmVyd3JpdHRlbi4KLSAgVG8gZm9yY2Ugb3ZlcndyaXRpbmcgdXNlIHRoZSAtZiBzd2l0Y2guCi0gIAotICMjIyBDcmVhdGUgYSAucmMgZmlsZSBmcm9tIGJpbmFyaWVzICMjIwotCi0gIFB1dCBhIGhlYWRlciBmb2xsb3dlZCBieSBlbXB0eSBicmFja2V0cyBpbiB0aGUucmMgZmlsZS4KLQotCS8qIEJJTlJFUyBpZGJfc3RkX3NtYWxsLmJtcCAqLwotCXt9Ci0KLSAgVGhlbiBydW4gImJpbjJyZXMgcnNyYy5yYyIuIEl0IHdpbGwgbWVyZ2UgdGhlIHJlc291cmNlcyBpbnRvIHRoZQotICAucmMgZmlsZSBpZiB0aGUgYmluYXJ5IHJlc291cmNlcyBhcmUgbmV3ZXIgdGhhbiB0aGUucmMgZmlsZS4KLSAgVG8gZm9yY2UgdGhlIHJlc291cmNlcyBpbnRvIHRoZS5yYyBmaWxlIHVzZSB0aGUgLWYgc3dpdGNoLgotICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVzb3VyY2Ugd2l0aCB0aGUgc2FtZSBmaWxlbmFtZSBpbiB0aGUucmMgCi0gIGZpbGUgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KLQotICAjIyMgb3V0cHV0IG9mIGJpbjJyZXMgIyMjCi0KLQliYXNoLTIuMDMjIC4uLy4uL3Rvb2xzL2JpbjJyZXMgLWQgYmluIHNocmVzLnJjCi0JWzAwMC5pY286Y11bMDAzLmljbzpjXVswMDguaWNvOnNdWzAxNS5pY286c11bMDM0LmljbzpzXQotCQotICAgcyBtZWFucyBza2lwZWQsIGMgbWVhbnMgY2hhbmdlZAotLS0tCi0KLWp1ZXJnZW4uc2NobWllZEBkZWJpdGVsLm5ldCAoMTEvOTkpCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3J1bm5pbmcuc2dtbCBiL2RvY3VtZW50YXRpb24vcnVubmluZy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4M2RiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3J1bm5pbmcuc2dtbApAQCAtMCwwICsxLDE4IEBACisgIDxjaGFwdGVyIGlkPSJydW5uaW5nIj4KKyAgICA8dGl0bGU+UnVubmluZyBXaW5lPC90aXRsZT4KKyAgICA8cGFyYT5FeHBsYWluIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB5b3UgY2FuIHVzZSB0byBydW4gV2luZTwvcGFyYT4KKworICAgIDxzZWN0MSBpZD0icnVubmluZy13aW5lIj4KKyAgICAgIDx0aXRsZT5Ib3cgdG8gcnVuIFdpbmU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcy4uLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAiY2hhcHRlciIgIiIpCitFbmQ6CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdG9vbHMuc2dtbCBiL2RvY3VtZW50YXRpb24vdG9vbHMuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JmNTcxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b29scy5zZ21sCkBAIC0wLDAgKzEsOTQgQEAKKyAgPGNoYXB0ZXIgaWQ9InRvb2xzIj4KKyAgICA8dGl0bGU+VG9vbHM8L3RpdGxlPgorCisgICAgPHNlY3QxIGlkPSJiaW4ycmVzIj4KKyAgICAgIDx0aXRsZT5iaW4ycmVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIHdyaXR0ZW4gYnkganVlcmdlbi5zY2htaWVkQGRlYml0ZWwubmV0ICgxMS85OSkKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXM8L2ZpbGVuYW1lPikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZG9jdW1lbnQgZGVzcmliZXMgdG9vbHMgZm9yIGhhbmRsaW5nIHJlc291cmNlcyB3aXRoaW4gd2luZQorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5iaW4ycmVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIHRvb2wgYWxsb3dzIHRoZSBlZGl0aW5nIG9mIGVtYmVkZGVkIGJpbmFyeSByZXNvdXJjZXMKKyAgICAgICAgICB3aXRoaW4gIDxmaWxlbmFtZT4qLnJjPC9maWxlbmFtZT4gZmlsZXMuIFRoZXNlIHJlc291cmNlcyBhcmUKKyAgICAgICAgICBzdG9yZWQgYXMgaGV4IGR1bXAgc28gdGhleSBjYW4gYmUgc3RvcmVkIHdpdGhpbiB0aGUgY3ZzCisgICAgICAgICAgdHJlZS4gVGhpcyBtYWtlcyB0aGUgZWRpdGluZyBvZiB0aGUgZW1iZWRkZWQgYml0bWFwcyBhbmQKKyAgICAgICAgICBpY29ucyBoYXJkZXIuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDI+CisKKyAgICAgIDxzZWN0Mj4KKyAgICAgICAgPHRpdGxlPkNyZWF0ZSBiaW5hcnkgZmlsZXMgZnJvbSBhbiA8ZmlsZW5hbWU+LnJjPC9maWxlbmFtZT4gZmlsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlc291cmNlcyBpbiB0aGUgPGZpbGVuYW1lPi5yYzwvZmlsZW5hbWU+IGZpbGUgaGF2ZSB0bworICAgICAgICAgIGJlIG1hcmtlZCBieSBhIGhlYWRlcjoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiBCSU5SRVMgaWRiX3N0ZF9zbWFsbC5ibXAgKi8KK0lEQl9TVERfU01BTEwgQklUTUFQIExPQURPTkNBTEwgRElTQ0FSREFCTEUKK3sKKyAgJzQyIDREIDIwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDc2IDAwIDAwIDAwIDI4IDAwJworICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8Y29uc3RhbnQ+QklOUkVTPC9jb25zdGFudD4gaXMgdGhlIGtleXdvcmQgZm9sbG93ZWQgYnkgYQorICAgICAgICAgIGZpbGVuYW1lLiA8Y29tbWFuZD5iaW4ycmVzIC1kIGJpbiByc3JjLnJjPC9jb21tYW5kPgorICAgICAgICAgIGdlbmVyYXRlcyBiaW5hcnkgZmlsZXMgZnJvbSBhbGwgbWFya2VkIHJlc291cmNlcy4gSWYgdGhlCisgICAgICAgICAgYmluYXJ5IGZpbGUgaXMgbmV3ZXIgaXQgZ2V0cyBub3Qgb3ZlcndyaXR0ZW4uIFRvIGZvcmNlCisgICAgICAgICAgb3ZlcndyaXRpbmcgdXNlIHRoZSA8cGFyYW1ldGVyPi1mPC9wYXJhbWV0ZXI+IHN3aXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyPgorICAgICAgICA8dGl0bGU+Q3JlYXRlIGEgPGZpbGVuYW1lPi5yYzwvZmlsZW5hbWU+IGZpbGUgZnJvbSBiaW5hcmllczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUHV0IGEgaGVhZGVyIGZvbGxvd2VkIGJ5IGVtcHR5IGJyYWNrZXRzIGluIHRoZQorICAgICAgICAgIDxmaWxlbmFtZT4ucmM8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKy8qIEJJTlJFUyBpZGJfc3RkX3NtYWxsLmJtcCAqLwore30KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlbiBydW4gPGNvbW1hbmQ+YmluMnJlcyByc3JjLnJjPC9jb21tYW5kPi4gSXQgd2lsbCBtZXJnZQorICAgICAgICAgIHRoZSByZXNvdXJjZXMgaW50byB0aGUgPGZpbGVuYW1lPi5yYzwvZmlsZW5hbWU+IGZpbGUgaWYgdGhlCisgICAgICAgICAgYmluYXJ5IHJlc291cmNlcyBhcmUgbmV3ZXIgdGhhbiB0aGUucmMgZmlsZS4gVG8gZm9yY2UgdGhlCisgICAgICAgICAgcmVzb3VyY2VzIGludG8gdGhlIDxmaWxlbmFtZT4ucmM8L2ZpbGVuYW1lPiBmaWxlIHVzZSB0aGUKKyAgICAgICAgICA8cGFyYW1ldGVyPi1mPC9wYXJhbWV0ZXI+IHN3aXRjaC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhCisgICAgICAgICAgcmVzb3VyY2Ugd2l0aCB0aGUgc2FtZSBmaWxlbmFtZSBpbiB0aGUKKyAgICAgICAgICA8ZmlsZW5hbWU+LnJjPC9maWxlbmFtZT4gZmlsZSBpdCBnZXRzIG92ZXJ3cml0dGVuLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorCisgICAgICA8c2VjdDI+CisgICAgICAgIDx0aXRsZT5vdXRwdXQgb2YgPGNvbW1hbmQ+YmluMnJlczwvY29tbWFuZD48L3RpdGxlPgorCisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK2Jhc2gtMi4wMyMgLi4vLi4vdG9vbHMvYmluMnJlcyAtZCBiaW4gc2hyZXMucmMKK1swMDAuaWNvOmNdWzAwMy5pY286Y11bMDA4LmljbzpzXVswMTUuaWNvOnNdWzAzNC5pY286c10KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxpdGVyYWw+czwvbGl0ZXJhbD4gbWVhbnMgc2tpcHBlZCwgPGxpdGVyYWw+YzwvbGl0ZXJhbD4KKyAgICAgICAgICBtZWFucyBjaGFuZ2VkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QyPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPCEtLSBLZWVwIHRoaXMgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDooIndpbmUtZG9jLnNnbWwiICJib29rIiAicGFydCIgImNoYXB0ZXIiICIiKQorRW5kOgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlciBiL2RvY3VtZW50YXRpb24vdHRmc2VydmVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzMwMTk5Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vdHRmc2VydmVyCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotMS4gR2V0IGZyZWV0eXBlLTEuMC5mdWxsLnRhci5neiAKLTIuIFJlYWQgZG9jdXMsIHVucGFjaywgY29uZmlndXJlIGFuZCBpbnN0YWxsCi0zLiBUZXN0IHRoZSBsaWJyYXJ5LCBlLmcuICJmdHZpZXcgMjAgL2Rvc2Mvd2luOTUvZm9udHMvdGltZXMgIgotNC4gR2V0IHhmc2Z0LWJldGExZS5saW51eC1pNTg2Ci01LiBJbnN0YWxsIGl0IGFuZCBzdGFydCBpdCB3aGVuIGJvb3RpbmcsIGUuZy4gaW4gYW4gcmMtc2NyaXB0LiAKLQlUaGUgbWFucGFnZSBmb3IgeGZzIGFwcGxpZXMuCi02LiBGb2xsb3cgdGhlIGhpbnRzIGdpdmVuIGJ5IHdpbGxpYW1jQGRhaS5lZC5hYy51awotPT09PT09PT09PQotSSBnb3QgeGZzZnQgZnJvbSBodHRwOi8vd3d3LmRjcy5lZC5hYy51ay9ob21lL2plYy9wcm9naW5kZXguaHRtbC4KLUkgaGF2ZSBpdCBydW5uaW5nIGFsbCB0aGUgdGltZS4gIEhlcmUgaXMgL3Vzci9YMTFSNi9saWIvWDExL2ZzL2NvbmZpZzoKLWNsb25lLXNlbGYgPSBvbgotdXNlLXN5c2xvZyA9IG9mZgotY2F0YWxvZ3VlID0gL2Mvd2luZG93cy9mb250cwotZXJyb3ItZmlsZSA9IC91c3IvWDExUjYvbGliL1gxMS9mcy9mcy1lcnJvcnMKLWRlZmF1bHQtcG9pbnQtc2l6ZSA9IDEyMAotZGVmYXVsdC1yZXNvbHV0aW9ucyA9IDc1LDc1LDEwMCwxMDAKLU9idmlvdXNseSAvYy93aW5kb3dzL2ZvbnRzIGlzIHdoZXJlIG15IFdpbmRvd3MgZm9udHMgb24gbXkKLVdpbjk1IEM6IGRyaXZlIGxpdmU7IGNvdWxkIGJlIGUuZy4gL21udC9kb3NDL3dpbmRvd3Mvc3lzdGVtCi1mb3IgV2luMzEuCi1JbiAvYy93aW5kb3dzL2ZvbnRzL2ZvbnRzLnNjYWxlIEkgaGF2ZQotMTQKLWFyaWFsLnR0ZiAtbW9ub3R5cGUtYXJpYWwtbWVkaXVtLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLWFyaWFsYmQudHRmIC1tb25vdHlwZS1hcmlhbC1ib2xkLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLWFyaWFsYmkudHRmIC1tb25vdHlwZS1hcmlhbC1ib2xkLW8tbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLWFyaWFsaS50dGYgLW1vbm90eXBlLWFyaWFsLW1lZGl1bS1vLW5vcm1hbC0tMC0wLTAtMC1wLTAtaXNvODg1OS0xCi1jb3VyLnR0ZiAtbW9ub3R5cGUtY291cmllci1tZWRpdW0tci1ub3JtYWwtLTAtMC0wLTAtcC0wLWlzbzg4NTktMQotY291cmJkLnR0ZiAtbW9ub3R5cGUtY291cmllci1ib2xkLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLWNvdXJiaS50dGYgLW1vbm90eXBlLWNvdXJpZXItYm9sZC1vLW5vcm1hbC0tMC0wLTAtMC1wLTAtaXNvODg1OS0xCi1jb3VyaS50dGYgLW1vbm90eXBlLWNvdXJpZXItbWVkaXVtLW8tbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLXRpbWVzLnR0ZiAtbW9ub3R5cGUtdGltZXMtbWVkaXVtLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLXRpbWVzYmQudHRmIC1tb25vdHlwZS10aW1lcy1ib2xkLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLXRpbWVzYmkudHRmIC1tb25vdHlwZS10aW1lcy1ib2xkLWktbm9ybWFsLS0wLTAtMC0wLXAtMC1pc284ODU5LTEKLXRpbWVzaS50dGYgLW1vbm90eXBlLXRpbWVzLW1lZGl1bS1pLW5vcm1hbC0tMC0wLTAtMC1wLTAtaXNvODg1OS0xCi1zeW1ib2wudHRmIC1tb25vdHlwZS1zeW1ib2wtbWVkaXVtLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1taWNyb3NvZnQtc3ltYm9sCi13aW5nZGluZy50dGYgLW1pY3Jvc29mdC13aW5nZGluZ3MtbWVkaXVtLXItbm9ybWFsLS0wLTAtMC0wLXAtMC1taWNyb3NvZnQtc3ltYm9sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1JbiAvYy93aW5kb3dzL2ZvbnRzL2ZvbnRzLmRpciBJIGhhdmUgZXhhY3RseSB0aGUgc2FtZS4KLQotSW4gL3Vzci9YMTFSNi9saWIvWDExL1hGODZDb25maWcgSSBoYXZlCi1Gb250UGF0aCAidGNwL2xvY2FsaG9zdDo3MTAwIgotaW4gZnJvbnQgb2YgdGhlIG90aGVyIEZvbnRQYXRoIGxpbmVzLgotVGhhdCdzIGl0ISAgQXMgYW4gaW50ZXJlc3RpbmcgYnktcHJvZHVjdCBvZiBjb3Vyc2UsIGFsbCB0aG9zZSB3ZWIKLXBhZ2VzIHdoaWNoIHNwZWNpZnkgQXJpYWwgY29tZSB1cCBpbiBBcmlhbCBpbiBOZXRzY2FwZSAuLi4KLT09PT09PT0KLTcuIFNodXQgZG93biBYIGFuZCByZXN0YXJ0ICggYW5kIGRlYnVnIGVycm9ycyB5b3UgZGlkIHdoaWxlIHNldHRpbmcKLSAgIHVwIGV2ZXJ5dGhpbmcuCi0KLTguIFRlc3Qgd2l0aCBlLmcgInhsc2ZvbnQgfGdyZXAgYXJpYWwiCi0KLUhvcGUgdGhpcyBoZWxwcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vd2luOTVsb29rIGIvZG9jdW1lbnRhdGlvbi93aW45NWxvb2sKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMjYwNDkuLjAwMDAwMDAKLS0tIGEvZG9jdW1lbnRhdGlvbi93aW45NWxvb2sKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1XaW45NS9XaW45OCBpbnRlcmZhY2UgY29kZSBpcyBiZWluZyBpbnRyb2R1Y2VkLgotCi1JbnN0ZWFkIG9mIGNvbXBpbGluZyBXaW5lIGZvciBXaW4zLjEgdnMuIFdpbjk1IHVzaW5nICNkZWZpbmUgc3dpdGNoZXMsCi10aGUgY29kZSBub3cgbG9va3MgaW4gYSBzcGVjaWFsIFtUd2Vhay5MYXlvdXRdIHNlY3Rpb24gb2Ygd2luZS5jb25mCi1mb3IgYSAiV2luZUxvb2s9V2luOTUiIG9yICJXaW5lTG9vaz1XaW45OCIgZW50cnkuCi0KLUEgZmV3IG5ldyBzZWN0aW9ucyBhbmQgYSBudW1iZXIgb2YgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCi13aW5lLmNvbmYgZmlsZSAtLSB0aGVzZSBhcmUgZm9yIGRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heQotYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlISAgVGhlc2UgZW50cmllcy9zZWN0aW9ucyBhcmU6Ci0KLVtUd2Vhay5Gb250c10KLVN5c3RlbS5IZWlnaHQ9PHBvaW50IHNpemU+ICAgICMgU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBzeXN0ZW0gdHlwZWZhY2UKLVN5c3RlbS5Cb2xkPVt0cnVlfGZhbHNlXSAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAotU3lzdGVtLkl0YWxpYz1bdHJ1ZXxmYWxzZV0gICAgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgaXRhbGljaXplZAotU3lzdGVtLlVuZGVybGluZT1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgdW5kZXJsaW5lZAotU3lzdGVtLlN0cmlrZU91dD1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAotT0VNRml4ZWQueHh4ICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBPRU0gZml4ZWQgdHlwZWZhY2UKLUFuc2lGaXhlZC54eHggICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgQW5zaSBmaXhlZCB0eXBlZmFjZQotQW5zaVZhci54eHggICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCi1TeXN0ZW1GaXhlZC54eHggICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIFN5c3RlbSBmaXhlZCB0eXBlZmFjZQotCi1bVHdlYWsuTGF5b3V0XQotV2luZUxvb2s9W1dpbjMxfFdpbjk1fFdpbjk4XSAgIyBDaGFuZ2VzIFdpbmUncyBsb29rIGFuZCBmZWVsCi0KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vd2luZS1kb2Muc2dtbCBiL2RvY3VtZW50YXRpb24vd2luZS1kb2Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJkYTIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi93aW5lLWRvYy5zZ21sCkBAIC0wLDAgKzEsOTQgQEAKKzwhZG9jdHlwZSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFYzLjEvL0VOIiBbCisKKzwhZW50aXR5IHJ1bm5pbmcgU1lTVEVNICJydW5uaW5nLnNnbWwiPgorPCFlbnRpdHkgaW5zdGFsbGluZyBTWVNURU0gImluc3RhbGxpbmcuc2dtbCI+Cis8IWVudGl0eSBjb25maWd1cmluZyBTWVNURU0gImNvbmZpZ3VyaW5nLnNnbWwiPgorPCFlbnRpdHkgcmVnaXN0cnkgU1lTVEVNICJyZWdpc3RyeS5zZ21sIj4KKzwhZW50aXR5IGJ1Z3MgU1lTVEVNICJidWdzLnNnbWwiPgorPCFlbnRpdHkgZm9udHMgU1lTVEVNICJmb250cy5zZ21sIj4KKzwhZW50aXR5IHByaW50aW5nIFNZU1RFTSAicHJpbnRpbmcuc2dtbCI+CisKKzwhZW50aXR5IGNvbXBpbGluZyBTWVNURU0gImNvbXBpbGluZy5zZ21sIj4KKzwhZW50aXR5IGRlYnVnZ2luZyBTWVNURU0gImRlYnVnZ2luZy5zZ21sIj4KKzwhZW50aXR5IGRvY3VtZW50YXRpb24gU1lTVEVNICJkb2N1bWVudGF0aW9uLnNnbWwiPgorPCFlbnRpdHkgcGF0Y2hlcyBTWVNURU0gInBhdGNoZXMuc2dtbCI+Cis8IWVudGl0eSBpMThuIFNZU1RFTSAiaTE4bi5zZ21sIj4KKzwhZW50aXR5IHBvcnRpbmcgU1lTVEVNICJwb3J0aW5nLnNnbWwiPgorCis8IWVudGl0eSBwYWNrYWdpbmcgU1lTVEVNICJwYWNrYWdpbmcuc2dtbCI+CisKKzwhZW50aXR5IGFyY2hpdGVjdHVyZSBTWVNURU0gImFyY2hpdGVjdHVyZS5zZ21sIj4KKzwhZW50aXR5IGRlYnVnZ2VyIFNZU1RFTSAiZGVidWdnZXIuc2dtbCI+Cis8IWVudGl0eSBjb25zb2xlcyBTWVNURU0gImNvbnNvbGVzLnNnbWwiPgorPCFlbnRpdHkgaW1wbGVtZW50YXRpb24gU1lTVEVNICJpbXBsZW1lbnRhdGlvbi5zZ21sIj4KKzwhZW50aXR5IG9wZW5nbCBTWVNURU0gIm9wZW5nbC5zZ21sIj4KKzwhZW50aXR5IGJ1aWxkIFNZU1RFTSAiYnVpbGQuc2dtbCI+Cis8IWVudGl0eSB0b29scyBTWVNURU0gInRvb2xzLnNnbWwiPgorPCFlbnRpdHkgZGxscyBTWVNURU0gImRsbHMuc2dtbCI+Cis8IWVudGl0eSBzdGF0dXMgU1lTVEVNICJzdGF0dXMuc2dtbCI+CitdPgorCis8Ym9vayBpZD0iaW5kZXgiPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPldpbmUgRG9jdW1lbnRhdGlvbjwvdGl0bGU+CisgIDwvYm9va2luZm8+CisKKyAgPHByZWZhY2UgaWQ9InByZWZhY2UiPgorICAgIDx0aXRsZT5Ob3RlcyBBYm91dCB0aGlzIERvY3VtZW50PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBleHRyYWN0ZWQgZnJvbSB0aGUgV2luZQorICAgICAgc291cmNlIHRyZWUsIGZyb20gdGhlIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb248L2ZpbGVuYW1lPgorICAgICAgZGlyZWN0b3J5LiAgU28gZmFyLCBubyBuZXcgY29udGVudCBoYXMgYmVlbiBhZGRlZCBhc2lkZSBmcm9tCisgICAgICBtYXJraW5nIGl0IHVwIGZvciBEb2NCb29rIGFuZCBhIGZldyBtaW5vciB0d2Vha3MgdG8gc21vb3RoCisgICAgICB0aGF0IHByb2Nlc3MuICBBbGwgY3JlZGl0IHNob3VsZCBnbyB0byB0aGUgb3JpZ2luYWwgYXV0aG9ycywKKyAgICAgIHdobyBhcmUgYXR0cmlidXRlZCBhY2NvcmRpbmcgdGhlIHRoZSAid3JpdHRlbiBieSIgY29tbWVudHMKKyAgICAgIGluIHRob3NlIGZpbGVzLiAgSWYgSSd2ZSBtaXNzZWQgYW55b25lLCBwbGVhc2UgY29udGFjdAorICAgICAgPGVtYWlsPkpvaG4gUi4gU2hlZXRzICZsdDtqc2hlZXRzQGNvZGV3ZWF2ZXJzLmNvbT48L2VtYWlsPgorICAgIDwvcGFyYT4KKyAgPC9wcmVmYWNlPgorCisgIDxwYXJ0IGlkPSJwYXJ0LW9uZSI+CisgICAgPHRpdGxlPlVzaW5nIFdpbmU8L3RpdGxlPgorCisgICAgJnJ1bm5pbmc7CisgICAgJmluc3RhbGxpbmc7CisgICAgJmNvbmZpZ3VyaW5nOworICAgICZidWdzOworICAgICZmb250czsKKyAgICAmcHJpbnRpbmc7CisKKyAgPC9wYXJ0PgorCisgIDxwYXJ0IGlkPSJwYXJ0LXR3byI+CisgICAgPHRpdGxlPkRldmVsb3BpbmcgV2luZTwvdGl0bGU+CisKKyAgICAmY29tcGlsaW5nOworICAgICZkZWJ1Z2dpbmc7CisgICAgJmRvY3VtZW50YXRpb247CisgICAgJnBhdGNoZXM7CisgICAgJmkxOG47CisgICAgJnBvcnRpbmc7CisKKyAgPC9wYXJ0PgorCisgIDxwYXJ0IGlkPSJwYXJ0LXRocmVlIj4KKyAgICA8dGl0bGU+RGlzdHJpYnV0aW5nIFdpbmU8L3RpdGxlPgorCisgICAgJnBhY2thZ2luZzsKKworICA8L3BhcnQ+CisKKyAgPHBhcnQgaWQ9InBhcnQtZm91ciI+CisgICAgPHRpdGxlPldpbmUgQXJjaGl0ZWN0dXJlPC90aXRsZT4KKworICAgICZhcmNoaXRlY3R1cmU7CisgICAgJmRlYnVnZ2VyOworICAgICZjb25zb2xlczsKKyAgICAmaW1wbGVtZW50YXRpb247CisgICAgJm9wZW5nbDsKKyAgICAmYnVpbGQ7CisgICAgJnRvb2xzOworICAgICZkbGxzOworCisgIDwvcGFydD4KKzwvYm9vaz4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vd2luZV9vczIgYi9kb2N1bWVudGF0aW9uL3dpbmVfb3MyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTc4NDQzLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vd2luZV9vczIKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0JUnVubmluZyAmIENvbXBpbGluZyBXSU5FIGluIE9TLzIKLQotSWYgeW91IHdhbnQgdG8gaGVscCBmb3IgdGhlIHBvcnQgb2YgV0lORSB0byBPUy8yLCAKLXNlbmQgbWUgYSBtZXNzYWdlIGF0IGtyeW5vc0BjbGljLm5ldAotSSBjdXJyZW50bHkgZG9uJ3Qgd2FudCBiZXRhIHRlc3RlcnMuIEl0IG11c3Qgd29yayBiZWZvcmUgd2UgY2FuIHRlc3QgaXQuCi0KLUhlcmUgaXMgd2hhdCB5b3UgbmVlZCB0byAodHJ5IHRvKSBjb21waWxlIFdpbmUgZm9yIE9TLzI6Ci1FTVggMC45YyAoZml4IDIpCi1YRnJlZTg2IDMuMiBPUy8yICh3aXRoIGRldmVsb3BtZW50IGxpYnJhcmllcykKLWJhc2gsIGdudSBtYWtlLCBncmVwLCB0YXIsIGJpc29uLCBmbGV4Ci1zZWQgKGEgd29ya2luZyBjb3B5IG9mKQoteHBtCi1kaWZmIGFuZCBwYXRjaCBhcmUgcmVjb21tZW5kZWQKLUxvdHMgb2YgZGlzayBzcGFjZSAoYWJvdXQgNDAtNTAgbWVncyBhZnRlciBFTVggYW5kIFhGcmVlIGluc3RhbGxlZCkKLQotVG8gY29tcGlsZToKLXNoIAotdG9vbHMvbWFrZV9vczIuc2gKLW1ha2UgZGVwZW5kCi1tYWtlCi1lbXhiaW5kIHdpbmUKLQotQ3VycmVudGx5OgotLSBjb25maWd1cmUgYW5kIG1ha2UgZGVwZW5kIHdvcmsuLi4KLS0gbWFrZSBjb21waWxlcyAod2l0aCBhIG1vZGlmaWVkIExpbnV4IG1tYW4uaCksIGJ1dCBkb2Vzbid0IGxpbmsuCi0tIHNpZ25hbCBoYW5kbGluZyBpcyBob3JyaWJsZS4uLiAoaWYgYW55KQotLSBFTVggZG9lc24ndCBzdXBwb3J0IG1tYXAgKGFuZCByZWxhdGVkKSwgU3lzViBJUEMgYW5kIHN0YWZzKCkKLS0gWEZyZWU4Ni9PUzIgMy4yIGRvZXNuJ3Qgc3VwcG9ydCBYU2htUXVlcnlFeHRlbnNpb24oKSBhbmQgWFNobVBpeG1hcEZvcm1hdCgpCi0gIGR1ZSB0byB0aGUgc2FtZSBsYWNrIGluIEVNWC4uLgotCi1XaGF0IG5lZWRzIHRvIGJlIHJlZG9uZToKLS0gTERUICh1c2luZyBEb3NBbGxvY1NlZyBpbiBtZW1vcnkvbGR0LmMpICoKLS0gaW1wbGVtZW50IG1tYXAoKSBhbmQgU3lzViBJUEMgaW4gRU1YICoKLS0gRmlsZSBmdW5jdGlvbnMsIAotLSBJL08gYWNjZXNzIChkbyBpdCEpLAotLSBDb21tdW5pY2F0aW9uIChtb2RlbSksCi0tIEludGVycnVwdCAoaWYgaW50IHVua25vd24sIGNhbGwgY3VycmVudCBSZWFsTW9kZSBvbmUuLi4pLCAKLS0gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB0aHJlYWQgc2FmZSAoaG93IGRvZXMgV2luOTUvTlQgaGFuZGxlIG11bHRpLXRocmVhZD8pLCAKLS0gbW92ZSBYIGZ1bmN0aW9ucyBpbiBzb21lIGZpbGVzIChhbmQgbWFrZSBhIHdyYXBwZXIsIHRvIHVzZSBQTSBpbnN0ZWFkIGxhdHRlciksIAotLSByZXR1cm4gcmlnaHQgQ1BVIHR5cGUsIAotLSBtYWtlIHdpbnNvY2sgd29yawotKiBUb3AgcHJpb3JpdHkKLQotVGhlIGdvb2QgdGhpbmdzOgotLSBPUy8yIGhhdmUgRE9TIGludGVycnVwdHMKLS0gT1MvMiBoYXZlIEkvTyBwb3J0IGFjY2VzcwotLSBPUy8yIGhhdmUgbXVsdGktdGhyZWFkCi0tIE1lcmxpbiBoYXZlIE9wZW4zMiAodG8gYmUgdXNlZCBsYXRlci4uLikKLQotUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KLUphbnVhcnkgOSwgMTk5NwotGgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi93aW5lZGJnIGIvZG9jdW1lbnRhdGlvbi93aW5lZGJnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGEwZDNhLi4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24vd2luZWRiZworKysgL2Rldi9udWxsCkBAIC0xLDQ3NiArMCwwIEBACi1JIEludHJvZHVjdGlvbgotPT09PT09PT09PT09PT0KLQotSS4xIFByb2Nlc3NlcyBhbmQgdGhyZWFkczogaW4gdW5kZXJseWluZyBPUyBhbmQgaW4gV2luZG93cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQmVmb3JlIGdvaW5nIGludG8gdGhlIGRlcHRocyBvZiBkZWJ1Z2dpbmcgaW4gV2luZSwgaGVyZSdzIGEgc21hbGwKLW92ZXJ2aWV3IG9mIHByb2Nlc3MgYW5kIHRocmVhZCBoYW5kbGluZyBpbiBXaW5lLiBJdCBoYXMgdG8gYmUgY2xlYXIKLXRoYXQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgYmVhc3RzOiBwcm9jZXNzZXMvdGhyZWFkcyBmcm9tIHRoZSBVbml4Ci1wb2ludCBvZiB2aWV3IGFuZCBwcm9jZXNzZXMvdGhyZWFkcyBmcm9tIGEgV2luZG93cyBwb2ludCBvZiB2aWV3LgotCi1FYWNoIFdpbmRvd3MnIHRocmVhZCBpcyBpbXBsZW1lbnRlZCBhcyBhIFVuaXggcHJvY2VzcyAodW5kZXIgTGludXgKLXVzaW5nIHRoZSBjbG9uZSBzeXNjYWxsKSwgbWVhbmluZyB0aGF0IGFsbCB0aHJlYWRzIG9mIGEgc2FtZSBXaW5kb3dzJwotcHJvY2VzcyBzaGFyZSB0aGUgc2FtZSAodW5peCkgYWRkcmVzcyBzcGFjZS4KLQotSW4gdGhlIGZvbGxvd2luZzoKLSsgVy1wcm9jZXNzIG1lYW5zIGEgcHJvY2VzcyBpbiBXaW5kb3dzJyB0ZXJtaW5vbG9neQotKyBVLXByb2Nlc3MgbWVhbnMgYSBwcm9jZXNzIGluIFVuaXgnIHRlcm1pbm9sb2d5Ci0rIFctdGhyZWFkIG1lYW5zIGEgdGhyZWFkIGluIFdpbmRvd3MnIHRlcm1pbm9sb2d5Ci0KLUEgVy1wcm9jZXNzIGlzIG1hZGUgb2Ygb25lIG9yIHNldmVyYWwgVy10aHJlYWRzLgotRWFjaCBXLXRocmVhZCBpcyBtYXBwZWQgdG8gb25lIGFuZCBvbmx5IG9uZSBVLXByb2Nlc3MuIEFsbCBVLXByb2Nlc3NlcyAKLW9mIGEgc2FtZSBXLXByb2Nlc3Mgc2hhcmUgdGhlIHNhbWUgYWRkcmVzcyBzcGFjZS4KLQotRWFjaCBVbml4IHByb2Nlc3MgY2FuIGJlIGlkZW50aWZpZWQgYnkgdHdvIHZhbHVlczoKLS0gdGhlIFVuaXggcHJvY2VzcyBpZCAodXBpZCBpbiB0aGUgZm9sbG93aW5nKQotLSB0aGUgV2luZG93cydzIHRocmVhZCBpZCAodGlkKQotRWFjaCBXaW5kb3dzJyBwcm9jZXNzIGhhcyBhbHNvIGEgV2luZG93cycgcHJvY2VzcyAod3BpZCBpbiB0aGUKLWZvbGxvd2luZykuIEl0IG11c3QgYmUgY2xlYXIgdGhhdCB1cGlkIGFuZCB3cGlkIGFyZSBkaWZmZXJlbnQgYW5kCi1zaGFsbCBub3QgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvdGhlci4KLQotV3BpZCBhbmQgdGlkIGFyZSBkZWZpbmVkIChXaW5kb3dzKSBzeXN0ZW0gd2lkZS4gVGhleSBtdXN0IG5vdCBiZQotY29uZnVzZWQgd2l0aCBwcm9jZXNzIG9yIHRocmVhZCBoYW5kbGVzIHdoaWNoLCBhcyBhbnkgaGFuZGxlLCBpcyBhbgotaW5kaXJlY3Rpb24gdG8gYSBzeXN0ZW0gb2JqZWN0IChpbiB0aGlzIGNhc2UgcHJvY2VzcyBvciB0aHJlYWQpLiBBCi1zYW1lIHByb2Nlc3MgY2FuIGhhdmUgc2V2ZXJhbCBkaWZmZXJlbnQgaGFuZGxlcyBvbiB0aGUgc2FtZSBrZXJuZWwKLW9iamVjdC4gVGhlIGhhbmRsZXMgY2FuIGJlIGRlZmluZWQgYXMgbG9jYWwgKHRoZSB2YWx1ZXMgaXMgb25seSB2YWxpZAotaW4gYSBwcm9jZXNzKSwgb3Igc3lzdGVtIHdpZGUgKHRoZSBzYW1lIGhhbmRsZSBjYW4gYmUgdXNlZCBieSBhbnkKLVctcHJvY2VzcykuCi0KLQotSS4yIFdpbmUsIGRlYnVnZ2luZyBhbmQgV2luZURiZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2hlbiB0YWxraW5nIG9mIGRlYnVnZ2luZyBpbiBXaW5lLCB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIGxldmVscyB0bwotdGhpbmsgb2Y6Ci0rIHRoZSBXaW5kb3dzJyBkZWJ1Z2dpbmcgQVBJLgotKyB0aGUgV2luZSBpbnRlZ3JhdGVkIGRlYnVnZ2VyLCBkdWJiZWQgV2luZURiZy4KLQotV2luZSBpbXBsZW1lbnRzIG1vc3QgdGhlIHRoZSBXaW5kb3dzJyBkZWJ1Z2dpbmcgQVBJICh0aGUgcGFydCBpbgotS0VSTkVMMzIsIG5vdCB0aGUgb25lIGluIElNQUdFSExQLkRMTCksIGFuZCBhbGxvd3MgYW55IHByb2dyYW0KLShlbXVsYXRlZCBvciBXaW5lTGliKSB1c2luZyB0aGF0IEFQSSB0byBkZWJ1ZyBhIFctcHJvY2Vzcy4KLQotV2luZURiZyBpcyBhIFdpbmVMaWIgYXBwbGljYXRpb24gbWFraW5nIHVzZSBvZiB0aGlzIEFQSSB0byBhbGxvdwotZGVidWdnaW5nIGJvdGggYW55IFdpbmUgb3IgV2luZUxpYiBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcyBXaW5lIGl0c2VsZiAKLShrZXJuZWwgYW5kIGFsbCBETExzKS4KLQotSUkgV2luZURiZydzIG1vZGVzIG9mIGludm9jYXRpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlJLjEgU3RhcnRpbmcgYSBwcm9jZXNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQW55IGFwcGxpY2F0aW9uIChlaXRoZXIgYSBXaW5kb3dzJyBuYXRpdmUgZXhlY3V0YWJsZSwgb3IgYSBXaW5lTGliCi1hcHBsaWNhdGlvbikgY2FuIGJlIHJ1biB0aHJvdWdoIFdpbmVEYmcuIENvbW1hbmQgbGluZSBvcHRpb25zIGFuZAotdHJpY2tzIGFyZSB0aGUgc2FtZSB0aGFuIGZvciB3aW5lOgotCi13aW5lZGJnIHRlbG5ldC5leGUKLXdpbmVkYmcgImhsLmV4ZSAtd2luZG93ZWQiCi0KLUlJLjIgQXR0YWNoaW5nCi0tLS0tLS0tLS0tLS0tLQotV2luZURiZyBjYW4gYWxzbyBsYXVuY2hlZCB3aXRob3V0IGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnQ6Ci0tIFdpbmVEYmcgaXMgc3RhcnRlZCB3aXRob3V0IGFueSBhdHRhY2hlZCBwcm9jZXNzLiBZb3UgY2FuIGdldCBhIGxpc3QKLW9mIHJ1bm5pbmcgVy1wcm9jZXNzZXMgKGFuZCB0aGVpciB3cGlkOnMpIHVzaW5nICd3YWxrIHByb2Nlc3MnCi1jb21tYW5kLCBhbmQgdGhlbiwgd2l0aCB0aGUgYXR0YWNoIGNvbW1hbmQsIHBpY2sgdXAgdGhlIHdwaWQgb2YgdGhlCi1XLXByb2Nlc3MgeW91IHdhbnQgdG8gZGVidWcuCi0KLVRoaXMgaXMgKGZvciBub3cpIGEgbmVhdCBmZWF0dXJlIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6IAotKiBkZWJ1ZyBhbiBhbHJlYWR5IHN0YXJ0ZWQgYXBwbGljYXRpb24KLQotSUkuMyBPbiBleGNlcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tCi1XaGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLCBXaW5kb3dzIHRyYWNrIHRoaXMgYXMgYW4KLWV4Y2VwdGlvbi4gRXhjZXB0aW9ucyBleGlzdCBmb3Igc2VnbWVudGF0aW9uIHZpb2xhdGlvbiwgc3RhY2sKLW92ZXJmbG93LCBkaXZpc2lvbiBieSB6ZXJvLi4uCi0KLVdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycywgV2luZSBjaGVja3MgaWYgdGhlIFctcHJvY2VzcyBpcyBkZWJ1Z2dlZC4gSWYKLXNvLCB0aGUgZXhjZXB0aW9uIGV2ZW50IGlzIHNlbnQgdG8gdGhlIGRlYnVnZ2VyLCB3aGljaCB0YWtlcyBjYXJlIG9mCi1pdDogZW5kIG9mIHRoZSBzdG9yeS4gVGhpcyBtZWNoYW5pc20gaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgV2luZG93cycKLWRlYnVnZ2luZyBBUEkuIAotCi1JZiB0aGUgVy1wcm9jZXNzIGlzIG5vdCBkZWJ1Z2dlZCwgV2luZSB0cmllcyB0byBsYXVuY2ggYQotZGVidWdnZXIuIFRoaXMgZGVidWdnZXIgKG5vcm1hbGx5IFdpbmVEYmcsIHNlZSBJSUkgQ29uZmlndXJhdGlvbiBmb3IKLW1vcmUgZGV0YWlscyksIGF0IHN0YXJ0dXAsIGF0dGFjaGVzIHRvIHRoZSBXLXByb2Nlc3Mgd2hpY2ggZ2VuZXJhdGVkCi10aGUgZXhjZXB0aW9uIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHlvdSBhcmUgYWJsZSB0byBsb29rIGF0IHRoZSBjYXVzZXMKLW9mIHRoZSBleGNlcHRpb24sIGFuZCBlaXRoZXIgZml4IHRoZSBjYXVzZXMgKGFuZCBjb250aW51ZSBmdXJ0aGVyIHRoZQotZXhlY3V0aW9uKSBvciBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCB3ZW50IHdyb25nLgotCi1JZiBXaW5lRGJnIGlzIHRoZSBzdGFuZGFyZCBkZWJ1Z2dlciwgdGhlICdwYXNzJyBhbmQgJ2NvbnQnIGNvbW1hbmRzCi1hcmUgdGhlIHR3byB3YXlzIHRvIGxldCB0aGUgcHJvY2VzcyBnbyBmdXJ0aGVyIGZvciB0aGUgaGFuZGxpbmcgb2YgdGhlIAotZXhjZXB0aW9uIGV2ZW50LgotCi1UbyBiZSBtb3JlIHByZWNpc2Ugb24gdGhlIHdheSBXaW5lIChhbmQgV2luZG93cykgZ2VuZXJhdGVzIGV4Y2VwdGlvbgotZXZlbnRzLCB3aGVuIGEgZmF1bHQgb2NjdXJzIChzZWdtZW50YXRpb24gdmlvbGF0aW9uLCBzdGFjawotb3ZlcmZsb3cuLi4pLCB0aGUgZXZlbnQgaXMgZmlyc3Qgc2VudCB0byB0aGUgZGVidWdnZXIgKHRoaXMgaXMga25vdyBhcyAKLWEgZmlyc3QgY2hhbmNlIGV4Y2VwdGlvbikuIFRoZSBkZWJ1Z2dlciBjYW4gZ2l2ZSB0d28gYW5zd2VyczoKLS0gY29udGludWU6IHRoZSBkZWJ1Z2dlciBoYWQgdGhlIGFiaWxpdHkgdG8gY29ycmVjdCB3aGF0J3MgZ2VuZXJhdGVkCi10aGUgZXhjZXB0aW9uLCBhbmQgaXMgbm93IGFibGUgdG8gY29udGludWUgcHJvY2VzcyBleGVjdXRpb24uCi0tIHBhc3M6IHRoZSBkZWJ1Z2dlciBjb3VsZG4ndCBjb3JyZWN0IHRoZSBjYXVzZSBvZiB0aGUgKGZpcnN0IGNoYW5jZQotZXhjZXB0aW9uKS4gV2luZSB3aWxsIG5vdyB0cnkgdG8gd2FsayB0aGUgbGlzdCBvZiBleGNlcHRpb24gaGFuZGxlcnMKLXRvIHNlZSBpZiBvbmUgb2YgdGhlbSBjYW4gaGFuZGxlIHRoZSBleGNlcHRpb24uIElmIG5vIGV4Y2VwdGlvbgotaGFuZGxlciBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBzZW50IG9uY2UgYWdhaW4gdG8gdGhlIGRlYnVnZ2VyIHRvCi1pbmRpY2F0ZSB0aGUgZmFpbHVyZSBvZiB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nLgotCi1Ob3RlOiBzaW5jZSBzb21lIG9mIFdpbmUncyBjb2RlIHVzZXMgZXhjZXB0aW9ucyBhbmQgdHJ5L2NhdGNoIGJsb2NrcwotdG8gcHJvdmlkZSBzb21lIGZ1bmN0aW9uYWxpdHksIFdpbmVEYmcgY2FuIGJlIGVudGVyZWQgaW4gc3VjaCBjYXNlcwotd2l0aCBzZWd2IGV4Y2VwdGlvbnMuIFRoaXMgaGFwcGVucywgZm9yIGV4YW1wbGUsIHdpdGggSXNCYWRSZWFkUHRyCi1mdW5jdGlvbi4gSW4gdGhhdCBjYXNlLCB0aGUgcGFzcyBjb21tYW5kIHNoYWxsIGJlIHVzZWQsIHRvIGxldCB0aGUKLWhhbmRsaW5nIG9mIHRoZSBleGNlcHRpb24gdG8gYmUgZG9uZSBieSB0aGUgY2F0Y2ggYmxvY2sgaW4KLUlzQmFkUmVhZFB0ci4KLQotSUkuNCBRdWl0dGluZwotLS0tLS0tLS0tLS0tLQotVW5mb3J0dW5hdGVseSwgV2luZG93cycgZG9uJ3QgcHJvdmlkZSBhIGRldGFjaCBraW5kIG9mIEFQSSwgbWVhbmluZwotdGhhdCBvbmNlIHlvdSBzdGFydGVkIGRlYnVnZ2luZyBhIHByb2Nlc3MsIHlvdSBtdXN0IGRvIHNvIHVudGlsIHRoZQotcHJvY2VzcyBkaWVzLiBLaWxsaW5nIChvciBzdG9wcGluZy9hYm9ydGluZykgdGhlIGRlYnVnZ2VyIHdpbGwgYWxzbwota2lsbCB0aGUgZGVidWdnZWQgcHJvY2Vzcy4KLVRoaXMgd2lsbCBiZSB0cnVlIGZvciBhbnkgV2luZG93cycgZGVidWdnaW5nIEFQSSBjb21wbGlhbnQgZGVidWdnZXIsCi1zdGFydGluZyB3aXRoIFdpbmVEYmcuCi0KLUlJSSBDb25maWd1cmF0aW9uCi09PT09PT09PT09PT09PT09PQotCi1JSUkuMSBSZWdpc3RyeSBjb25maWd1cmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgV2luZG93cycgZGVidWdnaW5nIEFQSSB1c2VzIGEgcmVnaXN0cnkgZW50cnkgdG8ga25vdyB3aXRoIGRlYnVnZ2VyIAotdG8gaW52b2tlIHdoZW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBvY2N1cnMgKHNlZSBJSS4zIGZvciBzb21lCi1kZXRhaWxzKS4KLVR3byB2YWx1ZXMgaW4ga2V5IAotIk1BQ0hJTkVcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uXFxBZURlYnVnIgotZGV0ZXJtaW5lIHRoZSBiZWhhdmlvcjoKLSsgRGVidWdnZXI6IHRoaXMgaXMgdGhlIGNvbW1hbmQgbGluZSB1c2VkIHRvIGxhdW5jaCB0aGUgZGVidWdnZXIgKGl0Ci11c2VzIHR3byBwcmludGYgZm9ybWF0cyAoJWxkKSB0byBwYXNzIGNvbnRleHQgZGVwZW5kZW50IGluZm9ybWF0aW9uIHRvIAotdGhlIGRlYnVnZ2VyKS4gWW91IHNob3VsZCBwdXQgaGVyZSBhIGNvbXBsZXRlIHBhdGggdG8geW91ciBkZWJ1Z2dlcgotKFdpbmVEYmcgY2FuIG9mIGNvdXJzZSBiZSB1c2VkLCBidXQgYW55IG90aGVyIFdpbmRvd3MnIGRlYnVnZ2luZyBBUEkKLWF3YXJlIGRlYnVnZ2VyIHdpbGwgZG8pLgotKyBBdXRvOiBpZiB0aGlzIHZhbHVlIGlzIHplcm8sIGEgbWVzc2FnZSBib3ggd2lsbCBhc2sgdGhlIHVzZXIgaWYKLWhlL3NoZSB3aXNoZXMgdG8gbGF1bmNoIHRoZSBkZWJ1Z2dlciB3aGVuIGFuIHVuaGFuZGxlZCBleGNlcHRpb24KLW9jY3Vycy4gT3RoZXJ3aXNlLCB0aGUgZGVidWdnZXIgaXMgYXV0b21hdGljYWxseSBzdGFydGVkLgotCi1BIHJlZ3VsYXIgV2luZSByZWdpc3RyeSBsb29rcyBsaWtlOgotW01BQ0hJTkVcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uXFxBZURlYnVnXSA5NTc2MzY1MzgKLSJBdXRvIj1kd29yZDowMDAwMDAwMQotIkRlYnVnZ2VyIj0iL3Vzci9sb2NhbC9iaW4vd2luZWRiZyAlbGQgJWxkIgotCi1Ob3RlIDE6IGNyZWF0aW5nIHRoaXMga2V5IGlzIG1hbmRhdG9yeS4gTm90IGRvaW5nIHNvIHdpbGwgbm90IGZpcmUgdGhlCi1kZWJ1Z2dlciB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCi0KLU5vdGUgMjogd2luZWluc3RhbGwgc2V0cyB1cCB0aGlzIGNvcnJlY3RseS4gSG93ZXZlciwgZHVlIHRvIHNvbWUKLWxpbWl0YXRpb24gb2YgdGhlIHJlZ2lzdHJ5IGluc3RhbGxlZCwgaWYgYSBwcmV2aW91cyBXaW5lIGluc3RhbGxhdGlvbgotZXhpc3RzLCBpdCdzIHNhZmVyIHRvIHJlbW92ZSB0aGUgd2hvbGUgCi1bTUFDSElORVxcU29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93cyBOVFxcQ3VycmVudFZlcnNpb25cXEFlRGVidWddCi1rZXkgYmVmb3JlIHJ1bm5pbmcgYWdhaW4gd2luZWluc3RhbGwgdG8gcmVnZW5lcmF0ZSB0aGlzIGtleS4KLQotSUlJLjIgV2luZURiZyBjb25maWd1cmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdpbmVEYmcgY2FuIGJlIGNvbmZpZ3VyZWQgdGhydSBhIG51bWJlciBvZiBvcHRpb25zLiBUaG9zZSBvcHRpb25zIGFyZQotc3RvcmVkIGluIHRoZSByZWdpc3RyeSwgb24gYSBwZXIgdXNlciBiYXNpcy4gVGhlIGtleSBpcyAoaW4gKm15KgotcmVnaXN0cnkpIFtlcmljXFxTb2Z0d2FyZVxcV2luZVxcV2luZURiZ10KLVRob3NlIG9wdGlvbnMgY2FuIGJlIHJlYWQvd3JpdHRlbiB3aGlsZSBpbnNpZGUgV2luZURiZywgYXMgcGFydCBvZiB0aGUgCi1kZWJ1Z2dlciBleHByZXNzaW9ucy4gVG8gcmVmZXIgdG8gb25lIG9mIHRoaXMgb3B0aW9uLCBpdHMgbmFtZSBtdXN0IGJlIAotcHJlZml4ZWQgYnkgYSAkIHNpZ24uCi1Gb3IgZXhhbXBsZSwgCi1zZXQgJEJyZWFrQWxsVGhyZWFkc1N0YXJ0dXAgPSAxCi1zZXRzIHRoZSBvcHRpb24gJ0JyZWFrQWxsVGhyZWFkc1N0YXJ0dXAnIHRvIFRSVUUuCi1BbGwgdGhlIG9wdGlvbnMgYXJlIHJlYWQgZnJvbSB0aGUgcmVnaXN0cnkgd2hlbiBXaW5lRGJnIHN0YXJ0cyAoaWYgbm8KLWNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgZm91bmQsIGEgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkKSwgYW5kIGFyZQotd3JpdHRlbiBiYWNrIHRvIHRoZSByZWdpc3RyeSB3aGVuIFdpbmVEYmcgZXhpdHMgKGhlbmNlLCBhbGwKLW1vZGlmaWNhdGlvbnMgdG8gdGhvc2Ugb3B0aW9ucyBhcmUgYXV0b21hdGljYWxseSBzYXZlZCB3aGVuIFdpbmVEYmcKLXRlcm1pbmF0ZXMpLgotCi1IZXJlJ3MgdGhlIGxpc3Qgb2YgYWxsIG9wdGlvbnM6Ci0KLUlJSS4yLjEgQ29udHJvbGluZyB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBlbnRlcmVkCi0KLUJyZWFrQWxsVGhyZWFkc1N0YXJ0dXAgIHNldCB0byBUUlVFIGlmIGF0IGFsbCB0aHJlYWRzIHN0YXJ0LXVwIHRoZQotCQkJZGVidWdnZXIgc3RvcHMgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gRkFMU0UgaWYgb25seSBhdCB0aGUgZmlyc3QgdGhyZWFkCi0JCQlzdGFydHVwIG9mIGEgZ2l2ZW4gcHJvY2VzcyB0aGUgZGVidWdnZXIgc3RvcHMuCi0JCQlGQUxTRSBieSBkZWZhdWx0LgotQnJlYWtPbkNyaXRTZWN0VGltZU91dCAgc2V0IHRvIFRSVUUgaWYgdGhlIGRlYnVnZ2VyIHN0b3BzIHdoZW4gYQotCQkJY3JpdGljYWwgc2VjdGlvbiB0aW1lcyBvdXQgKDUgbWludXRlcyk7Ci0JCQlUUlVFIGJ5IGRlZmF1bHQuCi1CcmVha09uQXR0YWNoLAkJc2V0IHRvIFRSVUUgaWYgd2hlbiBXaW5lRGJnIGF0dGFjaGVzIHRvIGFuCi0JCQlleGlzdGluZyBwcm9jZXNzIGFmdGVyIGFuIHVuaGFuZGxlZCBleGNlcHRpb24sCi0JCQlXaW5lRGJnIHNoYWxsIGJlIGVudGVyZWQgb24gdGhlIGZpcnN0IGF0dGFjaAotCQkJZXZlbnQuCi0JCQlTaW5jZSB0aGUgYXR0YWNoIGV2ZW50IGlzIG1lYW5pbmdsZXNzIGluIHRoZSAKLQkJCWNvbnRleHQJb2YgYW4gZXhjZXB0aW9uIGV2ZW50ICh0aGUgbmV4dCBldmVudCAKLQkJCXdoaWNoIGlzIHRoZSBleGNlcHRpb24gZXZlbnQgaXMgb2YgY291cnNlCi0JCQlyZWxldmFudCksIHRoYXQgb3B0aW9uIGlzIGxpa2VseSB0byBiZSBGQUxTRS4KLUJyZWFrT25EbGxMb2FkCQlXaGVuIHNldCB0byBUUlVFLCBhbGxvd3MgdGhlIGRlYnVnZ2VyIHRvIGJlCi0JCQllbnRlcmVkIHdoZW4gYSBuZXcgRExMIGlzIGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0uCi0JCQlGQUxTRSBieSBkZWZhdWx0LgotQnJlYWtPbkZpcnN0Q2hhbmNlCWFuIGV4Y2VwdGlvbiBjYW4gZ2VuZXJhdGUgdHdvIGRlYnVnIGV2ZW50cy4KLQkJCVRoZSBmaXJzdCBvbmUgaXMgcGFzc2VkIHRvIHRoZSBkZWJ1Z2dlciAoa25vd24KLQkJCWFzIGEgZmlyc3QgY2hhbmNlKSBqdXN0IGFmdGVyIHRoZQotCQkJZXhjZXB0aW9uLiBUaGUgZGVidWdnZXIgY2FuIHRoZW4gZGVjaWRlcwotCQkJZWl0aGVyIHRvIHJlc3VtZSBleGVjdXRpb24gKHNlZSB3aW5lZGJnJ3MgY29udAotCQkJY29tbWFuZCkgb3IgcGFzcyB0aGUgZXhjZXB0aW9uIHVwIHRvIHRoZQotCQkJZXhjZXB0aW9uIGhhbmRsZXIgY2hhaW4gaW4gdGhlIHByb2dyYW0gKGlmIGl0Ci0JCQlleGlzdHMpICh3aW5lZGJnIGltcGxlbWVudHMgdGhpcyB0aHJ1IHRoZSBwYXNzCi0JCQljb21tYW5kKS4gSWYgbm9uZSBvZiB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzCi0JCQl0YWtlcyBjYXJlIG9mIHRoZSBleGNlcHRpb24sIHRoZSBleGNlcHRpb24KLQkJCWV2ZW50IGlzIHNlbnQgYWdhaW4gdG8gdGhlIGRlYnVnZ2VyIChrbm93biBhcwotCQkJbGFzdCBjaGFuY2UgZXhjZXB0aW9uKS4gWW91IGNhbm5vdCBwYXNzIG9uIGEKLQkJCWxhc3QgZXhjZXB0aW9uLiBXaGVuIHRoZSBCcmVha09uRmlyc3RDaGFuY2UKLQkJCWV4Y2VwdGlvbiBpcyBUUlVFLCB0aGVuIHdpbmVkYmcgaXMgZW50ZXJlZCBmb3IKLQkJCWJvdGggIGZpcnN0IGFuZCBsYXN0IGNoYW5jZSBleGVjcHRpb25zICh0bwotCQkJRkFMU0UsIGl0J3Mgb25seSBlbnRlcmVkIGZvciBsYXN0IGNoYW5jZSBleGNlcHRpb25zKS4KLQotSUlJLjIuMSBPdXRwdXQgaGFuZGxpbmcKLQotQ29uQ2hhbm5lbE1hc2sgICAgICAgICAgbWFzayBvZiBhY3RpdmUgZGVidWdnZXIgb3V0cHV0IGNoYW5uZWxzIG9uCi0JCQljb25zb2xlIAotU3RkQ2hhbm5lbE1hc2sgICAgICAgICAgbWFzayBvZiBhY3RpdmUgZGVidWdnZXIgb3V0cHV0IGNoYW5uZWxzIG9uCi0JCQlzdGRlcnIgCi0KLVVzZVhUZXJtICAgICAgICAgICAgICAgIHNldCB0byBUUlVFIGlmIHRoZSBkZWJ1Z2dlciB1c2VzIGl0cyBvd24geHRlcm0KLQkJCXdpbmRvdyBmb3IgY29uc29sZSBpbnB1dC9vdXRwdXQgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gRkFMU0UgaXMgdGhlIGRlYnVnZ2VyIHVzZXMgdGhlIGN1cnJlbnQKLQkJCVVuaXggY29uc29sZSBmb3IgaW5wdXQvb3V0cHV0Ci0KLVRob3NlIGxhc3QgMyB2YXJpYWJsZXMgYXJlIGpvaW50bHkgdXNlZCBpbiB0d28gZ2VuZXJpYyB3YXlzOgotMS8gZGVmYXVsdAotIAlDb25DaGFubmVsTWFzayA9IERCR19DSE5fTUVTRyAoMSkKLSAgICAgICAgU3RkQ2hhbm5lbE1hc2sgPSAwCi0gICAgICAgIFVzZVhUZXJtID0gMQotSW4gdGhpcyBjYXNlLCBhbGwgaW5wdXQvb3V0cHV0IGdvZXMgaW50byBhIHNwZWNpZmljIHh0ZXJtIHdpbmRvdyAoYnV0Ci1hbGwgZGVidWcgbWVzc2FnZXMgVFJBQ0UvV0FSTi4uLiBzdGlsbCBnb2VzIHRvIHR0eSB3aGVyZSB3aW5lIGlzIHJ1bgotZnJvbSkuCi0KLTIvIHRvIGhhdmUgYWxsIGlucHV0L291dHB1dCBnbyBpbnRvIHRoZSB0dHkgd2hlcmUgV2luZSB3YXMgc3RhcnRlZAotZnJvbSAodG8gYmUgdXNlZCBpbiBhIFgxMS1mcmVlIGVudmlyb25tZW50KQotCUNvbkNoYW5uZWxNYXNrID0gMAotICAgICAgICBTdGRDaGFubmVsTWFzayA9IERCR19DSE5fTUVTRyAoMSkKLSAgICAgICAgVXNlWFRlcm0gPSAxCi0KLVRob3NlIHZhcmlhYmxlcyBhbHNvIGFsbG93LCBmb3IgZXhhbXBsZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB0bwotdXNlOiAKLQlDb25DaGFubmVsTWFzayA9IDB4ZmZmCi0gICAgICAgIFN0ZENoYW5uZWxNYXNrID0gMHhmZmYKLSAgICAgICAgVXNlWFRlcm0gPSAxCi1UaGlzIGFsbG93cyB0byByZWRpcmVjdCBhbGwgV2luZURiZyBvdXRwdXQgdG8gYm90aCB0dHkgV2luZSB3YXMKLXN0YXJ0ZWQgZnJvbSwgYW5kIHh0ZXJtIGRlYnVnZ2luZyB3aW5kb3cuIElmIFdpbmUgKG9yIFdpbmVEYmcpIHdhcwotc3RhcnRlZCB3aXRoIGEgcmVkaXJlY3Rpb24gb2Ygc3Rkb3V0IGFuZC9vciBzdGRlcnIgdG8gYSBmaWxlICh3aXRoIGZvciAKLWV4YW1wbGUgPiYgc2hlbGwgcmVkaXJlY3QgY29tbWFuZCksIHlvdSdsbCBnZXQgaW4gdGhhdCBmaWxlIGJvdGgKLW91dHB1dHMuIEl0IG1heSBiZSBpbnRlcmVzdGluZyB0byBsb29rIGluIHRoZSByZWxheSB0cmFjZSBmb3Igc3BlY2lmaWMKLXZhbHVlcyB3aGljaCB0aGUgcHJvY2VzcyBzZWd2OmVkIG9uLgotCi1JSUkuMi4zIENvbnRleHQgaW5mb3JtYXRpb24KLQotVGhyZWFkSWQJCUlEIG9mIHRoZSBXLXRocmVhZCBjdXJyZW50bHkgZXhhbWluZWQgYnkgdGhlCi0JCQlkZWJ1Z2dlcgotUHJvY2Vzc0lkCQlJRCBvZiB0aGUgVy10aHJlYWQgY3VycmVudGx5IGV4YW1pbmVkIGJ5IHRoZQotCQkJZGVidWdnZXIKLTxyZWdpc3RlcnM+CQlBbGwgQ1BVIHJlZ2lzdGVycyBhcmUgYWxzbyBhdmFpbGFibGUKLQotVGhlIFRocmVhZElkIGFuZCBQcm9jZXNzSWQgdmFyaWFibGVzIGNhbiBiZSBoYW5keSB0byBzZXQgY29uZGl0aW9uYWwKLWJyZWFrcG9pbnRzIG9uIGEgZ2l2ZW4gdGhyZWFkIG9yIHByb2Nlc3MuCi0KLUlWIFdpbmVEYmcgY29tbWFuZHMKLT09PT09PT09PT09PT09PT09PT0KLQotSVYuMSBNaXNjCi0tLS0tLS0tLS0KLWFib3J0CQlhYm9ydHMgdGhlIGRlYnVnZ2VyCi1xdWl0CQlleGl0cyB0aGUgZGVidWdnZXIKLQotYXR0YWNoIE4JYXR0YWNoIHRvIGEgVy1wcm9jZXNzIChOIGlzIGl0cyBJRCkuIElEcyBjYW4gYmUKLQkJb2J0YWluZWQgdGhydSB3YWxrIHByb2Nlc3MgY29tbWFuZAotCi1oZWxwCQlwcmludHMgc29tZSBoZWxwIG9uIHRoZSBjb21tYW5kcwotaGVscCBpbmZvCXByaW50cyBzb21lIGhlbHAgb24gaW5mbyBjb21tYW5kcwotCi1tb2RlIDE2CQlzd2l0Y2ggdG8gMTYgYml0IG1vZGUKLW1vZGUgMzIJCXN3aXRjaCB0byAzMiBiaXQgbW9kZQotCi1JVi4yIEZsb3cgY29udHJvbAotLS0tLS0tLS0tLS0tLS0tLS0KLWNvbnQJCWNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyZWFrcG9pbnQgb3IgZXhjZXB0aW9uLgotcGFzcwkJcGFzcyB0aGUgZXhjZXB0aW9uIGV2ZW50IHVwIHRvIHRoZSBmaWx0ZXIgY2hhaW4uIAotc3RlcAkJY29udGludWUgZXhlY3V0aW9uIHVudGlsIG5leHQgQyBsaW5lIG9mIGNvZGUgKGVudGVycwotCQlmdW5jdGlvbiBjYWxsKQotbmV4dCAJCWNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IEMgbGluZSBvZiBjb2RlIChkb2Vzbid0Ci0JCWVudGVyIGZ1bmN0aW9uIGNhbGwpIAotc3RlcGkJCWV4ZWN1dGUgbmV4dCBhc3NlbWJseSBpbnN0cnVjdGlvbiAoZW50ZXJzIGZ1bmN0aW9uCi0JCWNhbGwpCi1uZXh0aQkJZXhlY3V0ZSBuZXh0IGFzc2VtYmx5IGluc3RydWN0aW9uIChkb2Vzbid0IGVudGVyCi0JCWZ1bmN0aW9uIGNhbGwpCi1maW5pc2gJCWRvIG5leHRpIGNvbW1hbmRzIHVudGlsIGN1cnJlbnQgZnVuY3Rpb24gaXMgZXhpdGVkCi0KLWNvbnQsIHN0ZXAsIG5leHQsIHN0ZXBpLCBuZXh0aSBjYW4gYmUgcG9zdGZpeGVkIGJ5IGEgbnVtYmVyIChOKSwKLW1lYW5pbmcgdGhhdCB0aGUgY29tbWFuZCBtdXN0IGJlIGV4ZWN1dGVkIE4gdGltZXMuCi0KLUlWLjMgQnJlYWtwb2ludHMsIHdhdGNoIHBvaW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmFibGUgTgllbmFibGVzIChicmVha3x3YXRjaClwb2ludCAjTgotZGlzYWJsZSBOCWRpc2FibGVzIChicmVha3x3YXRjaClwb2ludCAjTgotZGVsZXRlIE4JZGVsZXRlcyAgKGJyZWFrfHdhdGNoKXBvaW50ICNOCi1jb25kIE4JCXJlbW92ZXMgYW55IGEgZXhpc3RpbmcgY29uZGl0aW9uIHRvIChicmVha3x3YXRjaClwb2ludCBOCi1jb25kIE4gPGV4cHI+CWFkZHMgY29uZGl0aW9uIDxleHByPiB0byAoYnJlYWt8d2F0Y2gpcG9pbnQgTi4gPGV4cHI+Ci0JCXdpbGwgYmUgZXZhbHVhdGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyBoaXQuIElmCi0JCXRoZSByZXN1bHQgaXMgYSB6ZXJvIHZhbHVlLCB0aGUgYnJlYWtwb2ludCBpc24ndAotCQl0cmlnZ2VyZWQgCi1icmVhayAqIE4JYWRkcyBhIGJyZWFrcG9pbnQgYXQgYWRkcmVzcyBOCi1icmVhayA8aWQ+CWFkZHMgYSBicmVha3BvaW50IGF0IHRoZSBhZGRyZXNzIG9mIHN5bWJvbCA8aWQ+Ci1icmVhayA8aWQ+IE4JYWRkcyBhIGJyZWFrcG9pbnQgYXQgdGhlIGFkZHJlc3Mgb2Ygc3ltYm9sIDxpZD4gKE4gPykKLWJyZWFrIE4JCWFkZHMgYSBicmVha3BvaW50IGF0IGxpbmUgTiBvZiBjdXJyZW50IHNvdXJjZSBmaWxlCi1icmVhawkJYWRkcyBhIGJyZWFrcG9pbnQgYXQgY3VycmVudCAkcGMgYWRkcmVzcwotd2F0Y2ggKiBOCWFkZHMgYSB3YXRjaCBjb21tYW5kIChvbiB3cml0ZSkgYXQgYWRkcmVzcyBOIChvbiA0IGJ5dGVzKQotd2F0Y2ggPGlkPglhZGRzIGEgd2F0Y2ggY29tbWFuZCAob24gd3JpdGUpIGF0IHRoZSBhZGRyZXNzIG9mCi0JCXN5bWJvbCA8aWQ+Ci1pbmZvIGJyZWFrCWxpc3RzIGFsbCAoYnJlYWt8d2F0Y2gpcG9pbnRzICh3aXRoIHN0YXRlKQotCi1JVi40IFN0YWNrIG1hbmlwdWxhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWJ0CQlwcmludCBjYWxsaW5nIHN0YWNrIG9mIGN1cnJlbnQgdGhyZWFkCi11cAkJZ29lcyB1cCBvbmUgZnJhbWUgaW4gY3VycmVudCB0aHJlYWQncyBzdGFjawotdXAgTgkJZ29lcyB1cCBOIGZyYW1lcyBpbiBjdXJyZW50IHRocmVhZCdzIHN0YWNrCi1kbgkJZ29lcyBkb3duIG9uZSBmcmFtZSBpbiBjdXJyZW50IHRocmVhZCdzIHN0YWNrCi1kbiBOCQlnb2VzIGRvd24gTiBmcmFtZXMgaW4gY3VycmVudCB0aHJlYWQncyBzdGFjawotZnJhbWUgTgkJc2V0IE4gYXMgdGhlIGN1cnJlbnQgZnJhbWUKLWluZm8gbG9jYWwJcHJpbnRzIGluZm9ybWF0aW9uIG9uIGxvY2FsIHZhcmlhYmxlcyBmb3IgY3VycmVudAotCQlmdW5jdGlvbiAKLQotSVYuNSBEaXJlY3RvcnkgJiBzb3VyY2UgZmlsZSBtYW5pcHVsYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zaG93IGRpcgotZGlyIDxwYXRobmFtZT4KLWRpcgotc3ltYm9sZmlsZSA8cGF0aG5hbWU+Ci0KLWxpc3QJCWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLWxpc3QgLSAJCWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBiZWZvcmUgY3VycmVudCBwb3NpdGlvbgotbGlzdCBOCQlsaXN0cyAxMCBzb3VyY2UgbGluZXMgZnJvbSBsaW5lIE4gaW4gY3VycmVudCBmaWxlCi1saXN0IDxwYXRoPjpOCWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBmcm9tIGxpbmUgTiBpbiBmaWxlIDxwYXRoPgotbGlzdCA8aWQ+CWxpc3RzIDEwIHNvdXJjZSBsaW5lcyBvZiBmdW5jdGlvbiA8aWQ+Ci1saXN0ICogTglsaXN0cyAxMCBzb3VyY2UgbGluZXMgZnJvbSBhZGRyZXNzIE4KLQotWW91IGNhbiBzcGVjaWZ5IHRoZSBlbmQgdGFyZ2V0ICh0byBjaGFuZ2UgdGhlIDEwIGxpbmVzIHZhbHVlKSB1c2luZwotdGhlICcsJy4gRm9yIGV4YW1wbGU6Ci1saXN0IDEyMywgMjM0IAlsaXN0cyBzb3VyY2UgbGluZXMgZnJvbSBsaW5lIDEyMyB1cCB0byBsaW5lIDIzNCBpbgotCQljdXJyZW50IGZpbGUKLWxpc3QgZm9vLmM6MSw1NglsaXN0cyBzb3VyY2UgbGluZXMgZnJvbSBsaW5lIDEgdXAgdG8gNTYgaW4gZmlsZSBmb28uYwotCi1JVi42IERpc3BsYXlpbmcKLS0tLS0tLS0tLS0tLS0tLQotYSBkaXNwbGF5IGlzIGFuIGV4cHJlc3Npb24gdGhhdCdzIGV2YWx1YXRlZCBhbmQgcHJpbnRlZCBhZnRlciB0aGUKLWV4ZWN1dGlvbiBvZiBhbnkgV2luZURiZyBjb21tYW5kCi0KLWRpc3BsYXkJCWxpc3RzIHRoZSBhY3RpdmUgZGlzcGxheXMKLWluZm8gZGlzcGxheQkoc2FtZSBhcyBhYm92ZSBjb21tYW5kKQotZGlzcGxheSA8ZXhwcj4JYWRkcyBhIGRpc3BsYXkgZm9yIGV4cHJlc3Npb24gPGV4cHI+Ci1kaXNwbGF5IC9mbXQgPGV4cHI+CWFkZHMgYSBkaXNwbGF5IGZvciBleHByZXNzaW9uIDxleHByPi4gUHJpbnRpbmcgCi0JCWV2YWx1YXRlZCA8ZXhwcj4gaXMgZG9uZSB1c2luZyB0aGUgZ2l2ZW4gZm9ybWF0IChzZWUKLQkJcHJpbnQgY29tbWFuZCBmb3IgbW9yZSBvbiBmb3JtYXRzKQotZGVsIGRpc3BsYXkgTglkZWxldGVzIGRpc3BsYXkgI04KLXVuZGlzcGxheSBOCShzYW1lIGFzIGRlbCBkaXNwbGF5KQotCi1JVi43IERpc2Fzc2VtYmx5Ci0tLS0tLS0tLS0tLS0tLS0tCi1kaXNhcwkJZGlzYXNzZW1ibGUgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi1kaXNhcyA8ZXhwcj4JZGlzYXNzZW1ibGUgZnJvbSBhZGRyZXNzIDxleHByPgotZGlzYXMgPGV4cHI+LDxleHByPmRpc2Fzc2VtYmxlcyBjb2RlIGJldHdlZW4gYWRkcmVzc2VzIHNwZWNpZmllZCBieQotCQl0aGUgdHdvIDxleHByPgotCi1JVi44IEluZm9ybWF0aW9uIG9uIFdpbmUncyBpbnRlcm5hbHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW5mbyBjbGFzcyA8aWQ+CXByaW50cyBpbmZvcm1hdGlvbiBvbiBXaW5kb3dzJ3MgY2xhc3MgPGlkPgotd2FsayBjbGFzcwlsaXN0cyBhbGwgV2luZG93cycgY2xhc3MgcmVnaXN0ZXJlZCBpbiBXaW5lCi1pbmZvIHNoYXJlCWxpc3RzIGFsbCB0aGUgZHluYW1pYyBsaWJyYXJpZXMgbG9hZGVkIHRoZSBkZWJ1Z2dlZAotCQlwcm9ncmFtIChpbmNsdWRpbmcgLnNvIGZpbGVzLCBORSBhbmQgUEUgRExMcykKLWluZm8gbW9kdWxlIE4JcHJpbnRzIGluZm9ybWF0aW9uIG9uIG1vZHVsZSBvZiBoYW5kbGUgTgotd2FsayBtb2R1bGUJbGlzdHMgYWxsIG1vZHVsZXMgbG9hZGVkIGJ5IGRlYnVnZ2VkIHByb2dyYW0KLWluZm8gcXVldWUgTglwcmludHMgaW5mb3JtYXRpb24gb24gV2luZSdzIHF1ZXVlIE4KLXdhbGsgcXVldWUJbGlzdHMgYWxsIHF1ZXVlcyBhbGxvY2F0ZWQgaW4gV2luZQotaW5mbyByZWdzCXByaW50cyB0aGUgdmFsdWUgb2YgQ1BVIHJlZ2lzdGVyCi1pbmZvIHNlZ21lbnQgTglwcmludHMgaW5mb3JtYXRpb24gb24gc2VnbWVudCBOCi1pbmZvIHNlZ21lbnQJbGlzdHMgYWxsIGFsbG9jYXRlZCBzZWdtZW50cwotaW5mbyBzdGFjawlwcmludHMgdGhlIHZhbHVlcyBvbiB0b3Agb2YgdGhlIHN0YWNrCi1pbmZvIG1hcAlsaXN0cyBhbGwgdmlydHVhbCBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBkZWJ1Z2dlZAotCQlwcm9ncmFtIAotaW5mbyB3bmQgTglwcmludHMgaW5mb3JtYXRpb24gb2YgV2luZG93IG9mIGhhbmRsZSBOCi13YWxrIHduZAlsaXN0cyBhbGwgdGhlIHdpbmRvdyBoaWVyYXJjaHkgc3RhcnRpbmcgZnJvbSB0aGUKLQkJZGVza3RvcCB3aW5kb3cKLXdhbGsgd25kIE4JbGlzdHMgYWxsIHRoZSB3aW5kb3cgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gdGhlCi0JCXdpbmRvdyBvZiBoYW5kbGUgTgotd2FsayBwcm9jZXNzCWxpc3RzIGFsbCB3LXByb2Nlc3NlcyBpbiBXaW5lIHNlc3Npb24KLXdhbGsgdGhyZWFkCWxpc3RzIGFsbCB3LXRocmVhZHMgaW4gV2luZSBzZXNzaW9uCi13YWxrIG1vZHJlZgkobm8gbG9uZ2VyIGF2YWlsKQotCi1JVi45IE1lbW9yeSAocmVhZGluZywgd3JpdGluZywgdHlwaW5nKQotCi14IDxleHByPglleGFtaW5lcyBtZW1vcnkgYXQgPGV4cHI+IGFkZHJlc3MKLXggL2ZtdCA8ZXhwcj4JZXhhbWluZXMgbWVtb3J5IGF0IDxleHByPiBhZGRyZXNzIHVzaW5nIGZvcm1hdCAvZm10Ci1wcmludCA8ZXhwcj4JcHJpbnRzIHRoZSB2YWx1ZSBvZiA8ZXhwcj4gKHBvc3NpYmx5IHVzaW5nIGl0cyB0eXBlKQotcHJpbnQgL2ZtdCA8ZXhwcj4JcHJpbnRzIHRoZSB2YWx1ZSBvZiA8ZXhwcj4gKHBvc3NpYmx5IHVzaW5nIGl0cwotCQl0eXBlKSAKLXNldCA8bHZhbD49PGV4cHI+CXdyaXRlcyB0aGUgdmFsdWUgb2YgPGV4cHI+IGluIDxsdmFsPiAKLXdoYXRpcyA8ZXhwcj4JcHJpbnRzIHRoZSBDIHR5cGUgb2YgZXhwcmVzc2lvbiA8ZXhwcj4KLQotL2ZtdCBpcyBlaXRoZXIgLzxsZXR0ZXI+IG9yIC88Y291bnQ+PGxldHRlcj4KLWxldHRlciBjYW4gYmUJCi0JCXMgPT4gYW4gQVNDSUkgc3RyaW5nCi0JCXUgPT4gYW4gVW5pY29kZSBVVEYxNiBzdHJpbmcKLQkJaSA9PiBpbnN0cnVjdGlvbnMgKGRpc2Fzc2VtYmxlKQotCQl4ID0+IDMyIGJpdCB1bnNpZ25lZCBoZXhhZGVjaW1hbCBpbnRlZ2VyCi0JCWQgPT4gMzIgYml0IHNpZ25lZCBkZWNpbWFsIGludGVnZXIKLQkJdyA9PiAxNiBiaXQgdW5zaWduZWQgaGV4YWRlY2ltYWwgaW50ZWdlcgotCQljID0+IGNoYXJhY3RlciAob25seSBwcmludGFibGUgMHgyMC0weDdmIGFyZSBhY3R1YWxseQotCQkgICAgIHByaW50ZWQpIAotCQliID0+IDggYml0IHVuc2lnbmVkIGhleGFkZWNpbWFsIGludGVnZXIKLQotViBPdGhlciBkZWJ1Z2dlcnMKLT09PT09PT09PT09PT09PT09Ci0KLVYuMSBVc2luZyBvdGhlciBVbml4IGRlYnVnZ2VycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Zb3UgY2FuIGFsc28gdXNlIG90aGVyIGRlYnVnZ2VycyAobGlrZSBnZGIpLCBidXQgeW91IG11c3QgYmUgYXdhcmUgb2YKLWEgZmV3IGl0ZW1zOgotLSB5b3UgbmVlZCB0byBhdHRhY2ggdGhlIHVuaXggZGVidWdnZXIgdG8gdGhlIGNvcnJlY3QgdW5peCBwcm9jZXNzCi0ocmVwcmVzZW50aW5nIHRoZSBjb3JyZWN0IHdpbmRvd3MgdGhyZWFkKSAoeW91IGNhbiAiZ3Vlc3MiIGl0IGZyb20gYQotJ3BzIGZheCcgZm9yIGV4YW1wbGU6IFdoZW4gcnVubmluZyB0aGUgZW11bGF0b3IsIHVzdWFsbHkgdGhlIGZpcnN0Ci10d28gdXBpZHMgYXJlIGZvciB0aGUgV2luZG93cycgYXBwbGljYXRpb24gcnVubmluZyB0aGUgZGVza3RvcCwgdGhlCi1maXJzdCB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGdlbmVyYWxseSB0aGUgdGhpcmQgdXBpZDsgd2hlbgotcnVubmluZyBhIFdpbmVMaWIgcHJvZ3JhbSwgdGhlIGZpcnN0IHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gaXMKLWdlbmVyYWxseSB0aGUgZmlyc3QgdXBpZCkKLQotTm90ZTogZXZlbiBpZiBsYXRlc3QgZ2RiIGltcGxlbWVudHMgdGhlIG5vdGlvbiBvZiB0aHJlYWRzLCBpdCB3b24ndAotd29yayB3aXRoIFdpbmUgYmVjYXVzZSB0aGUgdGhyZWFkIGFic3RyYWN0aW9uIHVzZWQgZm9yIGltcGxlbWVudGluZwotV2luZG93cycgdGhyZWFkIGlzIG5vdCAxMDAlIG1hcHBlZCBvbnRvIHRoZSBsaW51eCBwb3NpeCB0aHJlYWRzCi1pbXBsZW1lbnRhdGlvbi4gSXQgbWVhbnMgdGhhdCB5b3UnbGwgaGF2ZSB0byBzcGF3biBhIGRpZmZlcmVudCBnZGIKLXNlc3Npb24gZm9yIGVhY2ggV2luZG93cycgdGhyZWFkIHlvdSB3aXNoIHRvIGRlYnVnLgotCi1WLjIgVXNpbmcgb3RoZXIgV2luZG93cyBkZWJ1Z2dlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWW91IGNhbiB1c2UgYW55IFdpbmRvd3MnIGRlYnVnZ2luZyBBUEkgY29tcGxpYW50IGRlYnVnZ2VyIHdpdGgKLVdpbmUuIFNvbWUgcmVwb3J0cyBoYXZlIGJlZW4gbWFkZSBvZiBzdWNjZXNzIHdpdGggVmlzdWFsU3R1ZGlvCi1kZWJ1Z2dlciAoaW4gcmVtb3RlIG1vZGUsIG9ubHkgdGhlIGh1YiBydW5zIGluIFdpbmUpLgotR29WZXN0IGZ1bGx5IHJ1bnMgaW4gV2luZS4KLQotVi4zIE1haW4gZGlmZmVyZW5jZXMgYmV0d2VlbiB3aW5lZGJnIGFuZCByZWd1bGFyIFVuaXggZGVidWdnZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAgICAgICAgICAgICBXaW5lRGJnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICBnZGIgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfFdpbmVEYmcgZGVidWdzIGEgV2luZG93cycgcHJvY2Vzczp8Z2RiIGRlYnVncyBhIFdpbmRvd3MnIHRocmVhZDogICAgfAotfCsgdGhlIHZhcmlvdXMgdGhyZWFkcyB3aWxsIGJlICAgICB8KyBhIHNlcGFyYXRlIGdkYiBzZXNzaW9uIGlzICAgICAgfAotfCAgaGFuZGxlZCBieSB0aGUgc2FtZSBXaW5lRGJnICAgICB8ICBuZWVkZWQgZm9yIGVhY2ggdGhyZWFkIG9mICAgICAgfAotfCBzZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBXaW5kb3dzJyBwcm9jZXNzICAgICAgICAgICAgICAgfAotfCsgYSBicmVha3BvaW50IHdpbGwgYmUgdHJpZ2dlcmVkICB8KyBhIGJyZWFrcG9pbnQgd2lsbCBiZSB0cmlnZ2VyZWQgfAotfCAgZm9yIGFueSB0aHJlYWQgb2YgdGhlIHctcHJvY2VzcyB8ICBvbmx5IGZvciB0aGUgdy10aHJlYWQgZGVidWdnZWQgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfFdpbmVEYmcgc3VwcG9ydHMgZGVidWcgaW5mb3JtYXRpb258Z2RiIHN1cHBvcnRzIGRlYnVnIGluZm9ybWF0aW9uICAgfAotfGZyb206ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZnJvbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCsgc3RhYnMgKHN0YW5kYXJkIFVuaXggZm9ybWF0KSAgICB8KyBzdGFicyAoc3RhbmRhcmQgVW5peCBmb3JtYXQpICAgfAotfCsgTWljcm9zb2Z0J3MgQywgQ29kZVZpZXcsIC5EQkcgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi1WSSBMaW1pdGF0aW9ucwotPT09PT09PT09PT09PT0KLQotKyAxNiBiaXQgcHJvY2Vzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIChidXQgY2FsbHMgdG8gMTYgYml0IGNvZGUgaW4gMzIgCi0gIGJpdCBhcHBsaWNhdGlvbnMgaXMpLgotKyB0aGVyZSBhcmUgcmVwb3J0cyBvZiBkZWJ1Z2dlcidzIGZyZWV6ZSB3aGVuIGxvYWRpbmcgbGFyZ2UgUERCIGZpbGVzCi0KLUxhc3QgdXBkYXRlZDogNi8xNC8yMDAwIGJ5IGVyaWNQCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3gxMWRydiBiL2RvY3VtZW50YXRpb24veDExZHJ2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzBjMjc1Li4wMDAwMDAwCi0tLSBhL2RvY3VtZW50YXRpb24veDExZHJ2CisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLVRoZSBYMTEgZHJpdmVyCi0tLS0tLS0tLS0tLS0tLQotCi0gICBNb3N0IFdpbmUgdXNlcnMgcnVuIFdpbmUgdW5kZXIgdGhlIHdpbmRvd2luZyBzeXN0ZW0ga25vd24gYXMgWDExLgotICAgRHVyaW5nIG1vc3Qgb2YgV2luZSdzIGhpc3RvcnksIHRoaXMgd2FzIHRoZSBvbmx5IGRpc3BsYXkgZHJpdmVyCi0gICBhdmFpbGFibGUsIGJ1dCBpbiByZWNlbnQgeWVhcnMsIHBhcnRzIG9mIFdpbmUgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8KLSAgIGFsbG93IGZvciBvdGhlciBkaXNwbGF5IGRyaXZlcnMgKGFsdGhvdWdoIHRoZSBvbmx5IGFsdGVybmF0aXZlCi0gICBjdXJyZW50bHkgYXZhaWxhYmxlIGlzIFBhdHJpayBTdHJpZHZhbGwncyBuY3Vyc2VzLWJhc2VkIHR0eWRydiwgd2hpY2gKLSAgIGhlIGNsYWltcyB3b3JrcyBmb3IgZGlzcGxheWluZyBjYWxjLmV4ZSkuIFRoZSBkaXNwbGF5IGRyaXZlciBpcyBjaG9zZW4KLSAgIHdpdGggdGhlICJHcmFwaGljc0RyaXZlciIgb3B0aW9uIGluIHRoZSBbd2luZV0gc2VjdGlvbiBvZgotICAgd2luZS5jb25mLy53aW5lcmMsIGJ1dCBJIHdpbGwgb25seSBjb3ZlciB0aGUgeDExZHJ2IGluIHRoaXMgZG9jdW1lbnQuCi0gICAKLSAgeDExZHJ2IG1vZGVzIG9mIG9wZXJhdGlvbgotICAKLSAgIFRoZSB4MTFkcnYgY29uc2lzdHMgb2YgdHdvIGNvbmNlcHR1YWxseSBkaXN0aW5jdCBwaWVjZXMsIHRoZSBncmFwaGljcwotICAgZHJpdmVyIChHREkgcGFydCksIGFuZCB0aGUgd2luZG93aW5nIGRyaXZlciAoVVNFUiBwYXJ0KS4gQm90aCBvZiB0aGVzZQotICAgYXJlIGxpbmtlZCBpbnRvIHRoZSBsaWJ4MTFkcnYuc28gbW9kdWxlLCB0aG91Z2ggKHdoaWNoIHlvdSBsb2FkIHdpdGgKLSAgIHRoZSAiR3JhcGhpY3NEcml2ZXIiIG9wdGlvbikuIEluIFdpbmUsIHJ1bm5pbmcgb24gWDExLCB0aGUgZ3JhcGhpY3MKLSAgIGRyaXZlciBtdXN0IGRyYXcgb24gZHJhd2FibGVzICh3aW5kb3cgaW50ZXJpb3JzKSBwcm92aWRlZCBieSB0aGUKLSAgIHdpbmRvd2luZyBkcml2ZXIuIFRoaXMgZGlmZmVycyBhIGJpdCBmcm9tIHRoZSBXaW5kb3dzIG1vZGVsLCB3aGVyZSB0aGUKLSAgIHdpbmRvd2luZyBzeXN0ZW0gY3JlYXRlcyBhbmQgY29uZmlndXJlcyBkZXZpY2UgY29udGV4dHMgY29udHJvbGxlZCBieQotICAgdGhlIGdyYXBoaWNzIGRyaXZlciwgYW5kIGFwcGxpY2F0aW9ucyBhcmUgYWxsb3dlZCB0byBob29rIGludG8gdGhpcwotICAgcmVsYXRpb25zaGlwIGFueXdoZXJlIHRoZXkgbGlrZS4gVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZQotICAgdHJhZGVvZmYgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCB1c2FiaWxpdHksIHRoZSB4MTFkcnYgaGFzIHRocmVlCi0gICBkaWZmZXJlbnQgbW9kZXMgb2Ygb3BlcmF0aW9uLgotICAgCi0gICBVbm1hbmFnZWQvTm9ybWFsCi0gICAgICAgICAgVGhlIGRlZmF1bHQuIFdpbmRvdy1tYW5hZ2VyLWluZGVwZW5kZW50IChhbnkgcnVubmluZyB3aW5kb3cKLSAgICAgICAgICBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdyBkZWNvcmF0aW9ucyAodGl0bGUgYmFycywKLSAgICAgICAgICBib3JkZXJzLCBldGMpIGFyZSBkcmF3biBieSBXaW5lIHRvIGxvb2sgYW5kIGZlZWwgbGlrZSB0aGUgcmVhbAotICAgICAgICAgIFdpbmRvd3MuIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IGRlcGVuZCBvbgotICAgICAgICAgIGJlaW5nIGFibGUgdG8gY29tcHV0ZSB0aGUgZXhhY3Qgc2l6ZXMgb2YgYW55IHN1Y2ggZGVjb3JhdGlvbnMsCi0gICAgICAgICAgb3IgdGhhdCB3YW50IHRvIGRyYXcgdGhlaXIgb3duLgotICAgICAgICAgIAotICAgTWFuYWdlZAotICAgICAgICAgIFNwZWNpZmllZCBieSB1c2luZyB0aGUgLS1tYW5hZ2VkIGNvbW1hbmQtbGluZSBvcHRpb24gb3IgdGhlCi0gICAgICAgICAgTWFuYWdlZCB3aW5lLmNvbmYgb3B0aW9uIChzZWUgYmVsb3cpLiBPcmRpbmFyeSB0b3AtbGV2ZWwgZnJhbWUKLSAgICAgICAgICB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywgdGl0bGUgYmFycywgYW5kIHN5c3RlbSBtZW51cyB3aWxsCi0gICAgICAgICAgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdyBtYW5hZ2VyLiBUaGlzIGxldHMgdGhlc2UgYXBwbGljYXRpb25zCi0gICAgICAgICAgaW50ZWdyYXRlIGJldHRlciB3aXRoIHRoZSByZXN0IG9mIHlvdXIgZGVza3RvcCwgYnV0IG1heSBub3QKLSAgICAgICAgICBhbHdheXMgd29yayBwZXJmZWN0bHkuIChBIHJld3JpdGUgb2YgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiwgdG8KLSAgICAgICAgICBtYWtlIGl0IG1vcmUgcm9idXN0IGFuZCBsZXNzIHBhdGNoeSwgaXMgaGlnaGx5IGRlc2lyYWJsZSwKLSAgICAgICAgICB0aG91Z2gsIGFuZCBpcyBwbGFubmVkIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBXaW5lIDEuMCByZWxlYXNlLikKLSAgICAgICAgICAKLSAgIERlc2t0b3AtaW4tYS1Cb3gKLSAgICAgICAgICBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlIC0tZGVza3RvcCBjb21tYW5kLWxpbmUgb3B0aW9uICh3aXRoIGEKLSAgICAgICAgICBnZW9tZXRyeSwgZS5nLiAtLWRlc2t0b3AgODAweDYwMCBmb3IgYSBzdWNoLXNpemVkIGRlc2t0b3AsIG9yCi0gICAgICAgICAgZXZlbiAtLWRlc2t0b3AgODAweDYwMCswKzAgdG8gYXV0b21hdGljYWxseSBwb3NpdGlvbiB0aGUKLSAgICAgICAgICBkZXNrdG9wIGF0IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgZGlzcGxheSkuIFRoaXMgaXMgdGhlCi0gICAgICAgICAgbW9kZSBtb3N0IGNvbXBhdGlibGUgd2l0aCB0aGUgV2luZG93cyBtb2RlbC4gQWxsIGFwcGxpY2F0aW9uCi0gICAgICAgICAgd2luZG93cyB3aWxsIGp1c3QgYmUgV2luZS1kcmF3biB3aW5kb3dzIGluc2lkZSB0aGUKLSAgICAgICAgICBXaW5lLXByb3ZpZGVkIGRlc2t0b3Agd2luZG93ICh3aGljaCB3aWxsIGl0c2VsZiBiZSBtYW5hZ2VkIGJ5Ci0gICAgICAgICAgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzIGFwcGxpY2F0aW9ucyBjYW4gcm9hbSBmcmVlbHkKLSAgICAgICAgICB3aXRoaW4gdGhpcyB2aXJ0dWFsIHdvcmtzcGFjZSBhbmQgdGhpbmsgdGhleSBvd24gaXQgYWxsLAotICAgICAgICAgIHdpdGhvdXQgZGlzdHVyYmluZyB5b3VyIG90aGVyIFggYXBwcy4KLSAgICAgICAgICAKLSAgVGhlIFt4MTFkcnZdIHNlY3Rpb24KLSAgCi0gICBBbGxvY1N5c3RlbUNvbG9ycwotICAgICAgICAgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLiBpZiB5b3VyCi0gICAgICAgICAgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcCwgYW5kIGlmIHlvdSBoYXZlbid0Ci0gICAgICAgICAgcmVxdWVzdGVkIGEgcHJpdmF0ZSBjb2xvciBtYXAuIEl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIKLSAgICAgICAgICBvZiBzaGFyZWQgY29sb3JtYXAgY2VsbHMgKHBhbGV0dGUgZW50cmllcykgV2luZSBzaG91bGQgb2NjdXB5LgotICAgICAgICAgIFRoZSBoaWdoZXIgdGhpcyB2YWx1ZSwgdGhlIGxlc3MgY29sb3JzIHdpbGwgYmUgYXZhaWxhYmxlIHRvCi0gICAgICAgICAgb3RoZXIgYXBwbGljYXRpb25zLgotICAgICAgICAgIAotICAgUHJpdmF0ZUNvbG9yTWFwCi0gICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuIGlmIHlvdXIKLSAgICAgICAgICBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLiBJdCBzcGVjaWZpZXMgdGhhdCB5b3UgZG9uJ3QKLSAgICAgICAgICB3YW50IHRvIHVzZSB0aGUgc2hhcmVkIGNvbG9yIG1hcCwgYnV0IGEgcHJpdmF0ZSBjb2xvciBtYXAsCi0gICAgICAgICAgd2hlcmUgYWxsIDI1NiBjb2xvcnMgYXJlIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0Ci0gICAgICAgICAgV2luZSdzIHByaXZhdGUgY29sb3IgbWFwIGlzIG9ubHkgc2VlbiB3aGlsZSB0aGUgbW91c2UgcG9pbnRlcgotICAgICAgICAgIGlzIGluc2lkZSBhIFdpbmUgd2luZG93LCBzbyBwc3ljaGVkZWxpYyBmbGFzaGluZyBhbmQgZnVua3kKLSAgICAgICAgICBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZSBhIGxvdC4KLSAgICAgICAgICAKLSAgIFBlcmZlY3RHcmFwaGljcwotICAgICAgICAgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzIG9yIGV4YWN0Ci0gICAgICAgICAgV2luZSByb3V0aW5lcyB3aWxsIGJlIHVzZWQgZm9yIGNlcnRhaW4gUk9QIGNvZGVzIGluIGJsaXQKLSAgICAgICAgICBvcGVyYXRpb25zLiBNb3N0IHVzZXJzIHdvbid0IG5vdGljZSBhbnkgZGlmZmVyZW5jZS4KLSAgICAgICAgICAKLSAgIFNjcmVlbkRlcHRoCi0gICAgICAgICAgQXBwbGllcyBvbmx5IHRvIG11bHRpLWRlcHRoIGRpc3BsYXlzLiBJdCBzcGVjaWZpZXMgd2hpY2ggb2YgdGhlCi0gICAgICAgICAgYXZhaWxhYmxlIGRlcHRocyBXaW5lIHNob3VsZCB1c2UgKGFuZCB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCi0gICAgICAgICAgCi0gICBEaXNwbGF5Ci0gICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hpY2ggWDExIGRpc3BsYXkgdG8gdXNlLCBhbmQgaWYgc3BlY2lmaWVkLCB3aWxsCi0gICAgICAgICAgb3ZlcnJpZGUgYm90aCB0aGUgRElTUExBWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgdGhlCi0gICAgICAgICAgLS1kaXNwbGF5IGNvbW1hbmQtbGluZSBvcHRpb24uCi0gICAgICAgICAgCi0gICBNYW5hZ2VkCi0gICAgICAgICAgV2luZSBjYW4gbGV0IGZyYW1lIHdpbmRvd3MgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdyBtYW5hZ2VyLgotICAgICAgICAgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoYXQgYnkgZGVmYXVsdC4KLSAgICAgICAgICAKLSAgIFVzZURHQQotICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UgWEZyZWU4NidzCi0gICAgICAgICAgRGlyZWN0IEdyYXBoaWNzIEFyY2hpdGVjdHVyZSAoREdBKSwgd2hpY2ggaXMgYWJsZSB0byB0YWtlIG92ZXIKLSAgICAgICAgICB0aGUgZW50aXJlIGRpc3BsYXkgYW5kIHJ1biB0aGUgZ2FtZSBmdWxsLXNjcmVlbiBhdCBtYXhpbXVtCi0gICAgICAgICAgc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYgMy54KSwgeW91IHN0aWxsIGhhdmUgdG8gY29uZmlndXJlCi0gICAgICAgICAgdGhlIFggc2VydmVyIHRvIHRoZSBnYW1lJ3MgcmVxdWVzdGVkIGJwcCBmaXJzdCwgYnV0IHdpdGggREdBMgotICAgICAgICAgIChYRnJlZTg2IDQueCksIHJ1bnRpbWUgZGVwdGgtc3dpdGNoaW5nIG1heSBiZSBwb3NzaWJsZSwKLSAgICAgICAgICBkZXBlbmRpbmcgb24geW91ciBkcml2ZXIncyBjYXBhYmlsaXRpZXMuKSBCdXQgYmUgYXdhcmUgdGhhdCBpZgotICAgICAgICAgIFdpbmUgY3Jhc2hlcyB3aGlsZSBpbiBER0EgbW9kZSwgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0bwotICAgICAgICAgIHJlZ2FpbiBjb250cm9sIG92ZXIgeW91ciBjb21wdXRlciB3aXRob3V0IHJlYm9vdGluZy4gREdBCi0gICAgICAgICAgbm9ybWFsbHkgcmVxdWlyZXMgZWl0aGVyIHJvb3QgcHJpdmlsZWdlcyBvciByZWFkL3dyaXRlIGFjY2VzcwotICAgICAgICAgIHRvIC9kZXYvbWVtLgotICAgICAgICAgIAotICAgVXNlWFNobQotICAgICAgICAgIElmIHlvdSBkb24ndCB3YW50IERpcmVjdFggdG8gdXNlIERHQSwgeW91IGNhbiBhdCBsZWFzdCB1c2UgWAotICAgICAgICAgIFNoYXJlZCBNZW1vcnkgZXh0ZW5zaW9ucyAoWFNobSkuIEl0IGlzIG11Y2ggc2xvd2VyIHRoYW4gREdBLAotICAgICAgICAgIHNpbmNlIHRoZSBhcHAgZG9lc24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHBoeXNpY2FsIGZyYW1lCi0gICAgICAgICAgYnVmZmVyLCBidXQgdXNpbmcgc2hhcmVkIG1lbW9yeSB0byBkcmF3IHRoZSBmcmFtZSBpcyBhdCBsZWFzdAotICAgICAgICAgIGZhc3RlciB0aGFuIHNlbmRpbmcgdGhlIGRhdGEgdGhyb3VnaCB0aGUgc3RhbmRhcmQgWDExIHNvY2tldCwKLSAgICAgICAgICBldmVuIHRob3VnaCBXaW5lJ3MgWFNobSBzdXBwb3J0IGlzIHN0aWxsIGtub3duIHRvIGNyYXNoCi0gICAgICAgICAgc29tZXRpbWVzLgotICAgICAgICAgIAotICAgRFhHcmFiCi0gICAgICAgICAgSWYgeW91IGRvbid0IHVzZSBER0EsIHlvdSBtYXkgd2FudCBhbiBhbHRlcm5hdGl2ZSBtZWFucyB0bwotICAgICAgICAgIGNvbnZpbmNlIHRoZSBtb3VzZSBjdXJzb3IgdG8gc3RheSB3aXRoaW4gdGhlIGdhbWUgd2luZG93LiBUaGlzCi0gICAgICAgICAgb3B0aW9uIGRvZXMgdGhhdC4gT2YgY291cnNlLCBhcyB3aXRoIERHQSwgaWYgV2luZSBjcmFzaGVzLAotICAgICAgICAgIHlvdSdyZSBpbiB0cm91YmxlIChhbHRob3VnaCBub3QgYXMgYmFkbHkgYXMgaW4gdGhlIERHQSBjYXNlLAotICAgICAgICAgIHNpbmNlIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSBrZXlib2FyZCB0byBnZXQgb3V0IG9mIFgpLgotICAgICAgICAgIAotICAgRGVza3RvcERvdWJsZUJ1ZmZlcmVkCi0gICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSB1c2UgdGhlIC0tZGVza3RvcCBjb21tYW5kLWxpbmUgb3B0aW9uIHRvCi0gICAgICAgICAgcnVuIGluIGEgZGVza3RvcCB3aW5kb3cuIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNyZWF0ZSB0aGUKLSAgICAgICAgICBkZXNrdG9wIHdpbmRvdyB3aXRoIGEgZG91YmxlLWJ1ZmZlcmVkIHZpc3VhbCwgc29tZXRoaW5nIG1vc3QKLSAgICAgICAgICBPcGVuR0wgZ2FtZXMgbmVlZCB0byBydW4gY29ycmVjdGx5LgotICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE92ZSBL5XZlbgo=