ZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg1ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iid1c2VyLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorCis8IS0tICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLnRvYyIgc2VsZWN0PSInYXJ0aWNsZSBub3AnIj48L3hzbDpwYXJhbT4gIC0tPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTUyZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwKQEAgLTAsMCArMSw5MTIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlciBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24iPgorICAgIDx0aXRsZT5FeGVjdXRpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBwcmltYXJ5IHB1cnBvc2UgZm9yIHJ1bm5pbmcgQml0QmFrZSBpcyB0byBwcm9kdWNlIHNvbWUga2luZAorICAgICAgICBvZiBvdXRwdXQgc3VjaCBhcyBhIHNpbmdsZSBpbnN0YWxsYWJsZSBwYWNrYWdlLCBhIGtlcm5lbCwgYSBzb2Z0d2FyZQorICAgICAgICBkZXZlbG9wbWVudCBraXQsIG9yIGV2ZW4gYSBmdWxsLCBib2FyZC1zcGVjaWZpYyBib290YWJsZSBMaW51eCBpbWFnZSwKKyAgICAgICAgY29tcGxldGUgd2l0aCBib290bG9hZGVyLCBrZXJuZWwsIGFuZCByb290IGZpbGVzeXN0ZW0uCisgICAgICAgIE9mIGNvdXJzZSwgeW91IGNhbiBleGVjdXRlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgIGNvbW1hbmQgd2l0aCBvcHRpb25zIHRoYXQgY2F1c2UgaXQgdG8gZXhlY3V0ZSBzaW5nbGUgdGFza3MsCisgICAgICAgIGNvbXBpbGUgc2luZ2xlIHJlY2lwZSBmaWxlcywgY2FwdHVyZSBvciBjbGVhciBkYXRhLCBvciBzaW1wbHkKKyAgICAgICAgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgQml0QmFrZSdzIGV4ZWN1dGlvbiBwcm9jZXNzIGZyb20gc3RhcnQKKyAgICAgICAgdG8gZmluaXNoIHdoZW4geW91IHVzZSBpdCB0byBjcmVhdGUgYW4gaW1hZ2UuCisgICAgICAgIFRoZSBleGVjdXRpb24gcHJvY2VzcyBpcyBsYXVuY2hlZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKyAgICAgICAgZm9ybToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBCaXRCYWtlIGNvbW1hbmQgYW5kIGl0cyBvcHRpb25zLAorICAgICAgICBzZWUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCc+VGhlIEJpdEJha2UgQ29tbWFuZDwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJpb3IgdG8gZXhlY3V0aW5nIEJpdEJha2UsIHlvdSBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgcGFyYWxsZWwgdGhyZWFkIGV4ZWN1dGlvbiBvbiB5b3VyIGJ1aWxkIGhvc3QgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgcHJvamVjdCdzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgY29tbW9uIG1ldGhvZCB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZSBmb3IgeW91ciBidWlsZCBob3N0IGlzIHRvIHJ1bgorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdyZXAgcHJvY2Vzc29yIC9wcm9jL2NwdWluZm8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzLCB3aGljaCB0YWtlcyBpbnRvIAorICAgICAgICAgICAgICAgIGFjY291bnQgaHlwZXItdGhyZWFkaW5nLiAKKyAgICAgICAgICAgICAgICBUaHVzLCBhIHF1YWQtY29yZSBidWlsZCBob3N0IHdpdGggaHlwZXItdGhyZWFkaW5nIG1vc3QgbGlrZWx5IAorICAgICAgICAgICAgICAgIHNob3dzIGVpZ2h0IHByb2Nlc3NvcnMsIHdoaWNoIGlzIHRoZSB2YWx1ZSB5b3Ugd291bGQgdGhlbiBhc3NpZ24gdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBwb3NzaWJseSBzaW1wbGVyIHNvbHV0aW9uIGlzIHRoYXQgc29tZSBMaW51eCBkaXN0cmlidXRpb25zCisgICAgICAgICAgICAgICAgKGUuZy4gRGViaWFuIGFuZCBVYnVudHUpIHByb3ZpZGUgdGhlIDxmaWxlbmFtZT5uY3B1czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncGFyc2luZy10aGUtYmFzZS1jb25maWd1cmF0aW9uLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPlBhcnNpbmcgdGhlIEJhc2UgQ29uZmlndXJhdGlvbiBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgQml0QmFrZSBkb2VzIGlzIHBhcnNlIGJhc2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgbWV0YWRhdGEuCisgICAgICAgICAgICBCYXNlIGNvbmZpZ3VyYXRpb24gbWV0YWRhdGEgY29uc2lzdHMgb2YgeW91ciBwcm9qZWN0J3MKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0byBkZXRlcm1pbmUgd2hhdAorICAgICAgICAgICAgbGF5ZXJzIEJpdEJha2UgbmVlZHMgdG8gcmVjb2duaXplLCBhbGwgbmVjZXNzYXJ5CisgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGVzIChvbmUgZnJvbSBlYWNoIGxheWVyKSwKKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgZGF0YSBpdHNlbGYgaXMgb2YgdmFyaW91cyB0eXBlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERldGFpbHMgYWJvdXQgcGFydGljdWxhciBwaWVjZXMgb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xhc3MgRGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBbiBhYnN0cmFjdGlvbiBvZiBjb21tb24gYnVpbGQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gaG93IHRvIGJ1aWxkIGEgTGludXgga2VybmVsKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFjaGluZS1zcGVjaWZpYyBzZXR0aW5ncywgcG9saWN5IGRlY2lzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGRhdGEgYWN0cyBhcyB0aGUgZ2x1ZSB0byBiaW5kIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICAgICAgdG9nZXRoZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZXMgYXJlIHVzZWQgdG8KKyAgICAgICAgICAgIGNvbnN0cnVjdCBrZXkgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gc2VhcmNoIGZvcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhbmQgY2xhc3MgZmlsZXMgdW5kZXIgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcmllcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIGxvY2F0ZSBib3RoIHJlY2lwZQorICAgICAgICAgICAgYW5kIHJlY2lwZSBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBJZiB0aGVyZSBpcyBubyA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRoZSB1c2VyIGhhcyBzZXQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gZGlyZWN0bHkgaW4gdGhlIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOZXh0LCB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaXMgbG9jYXRlZAorICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0aGF0IHdhcworICAgICAgICAgICAganVzdCBjb25zdHJ1Y3RlZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBtYXkgYWxzbyBpbmNsdWRlIG90aGVyCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBkaXJlY3RpdmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcmlvciB0byBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMsIEJpdGJha2UgbG9va3MKKyAgICAgICAgICAgIGF0IGNlcnRhaW4gdmFyaWFibGVzLCBpbmNsdWRpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0VOVl9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX1BSRVNFUlZFX0VOVic+PGZpbGVuYW1lPkJCX1BSRVNFUlZFX0VOVjwvZmlsZW5hbWU+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX0VYVFJBV0hJVEUnPjxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJJVEJBS0VfVUknPjxmaWxlbmFtZT5CSVRCQUtFX1VJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHBhc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzIGludG8gdGhlIEJpdEJha2UKKyAgICAgICAgICAgIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gbWV0YWRhdGEgaXMgZ2xvYmFsCisgICAgICAgICAgICBhbmQgdGhlcmVmb3JlIGFmZmVjdHMgYWxsIHJlY2lwZXMgYW5kIHRhc2tzIHRoYXQgYXJlIGV4ZWN1dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGZpcnN0IHNlYXJjaGVzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciBhbgorICAgICAgICAgICAgb3B0aW9uYWwgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGEKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0aGF0IGlzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgJ2xheWVyJyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIFJlY2FsbCB0aGF0IGlmIEJpdEJha2UgY2Fubm90IGZpbmQgYSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhlIHVzZXIgaGFzIHNldCB0aGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgZGlyZWN0bHkgaW4gdGhlIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZWFjaCBkaXJlY3RvcnkgKGxheWVyKSBpbiB0aGlzIGxpc3QsIGEgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGlzIGxvY2F0ZWQgYW5kIHBhcnNlZCB3aXRoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSRElSJz48ZmlsZW5hbWU+TEFZRVJESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGJlaW5nIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBsYXllciB3YXMgZm91bmQuCisgICAgICAgICAgICBUaGUgaWRlYSBpcyB0aGVzZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHNldCB1cAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kIG90aGVyIHZhcmlhYmxlcyBjb3JyZWN0bHkgZm9yIGEgZ2l2ZW4gYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHRoZW4gZXhwZWN0cyB0byBmaW5kIHRoZSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSBzb21ld2hlcmUgaW4gdGhlIHVzZXItc3BlY2lmaWVkIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoYXQgY29uZmlndXJhdGlvbiBmaWxlIGdlbmVyYWxseSBoYXMgaW5jbHVkZSBkaXJlY3RpdmVzIHRvIHB1bGwKKyAgICAgICAgICAgIGluIGFueSBvdGhlciBtZXRhZGF0YSBzdWNoIGFzIGZpbGVzIHNwZWNpZmljIHRvIHRoZSBhcmNoaXRlY3R1cmUsCisgICAgICAgICAgICB0aGUgbWFjaGluZSwgdGhlIGxvY2FsIGVudmlyb25tZW50LCBhbmQgc28gZm9ydGguCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubHkgdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIGluY2x1ZGUgZGlyZWN0aXZlcyBhcmUgYWxsb3dlZAorICAgICAgICAgICAgaW4gQml0QmFrZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIFNvbWUgdmFyaWFibGVzIGRpcmVjdGx5IGluZmx1ZW5jZSBCaXRCYWtlJ3MgYmVoYXZpb3IuCisgICAgICAgICAgICBUaGVzZSB2YXJpYWJsZXMgbWlnaHQgaGF2ZSBiZWVuIHNldCBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJldmlvdXNseQorICAgICAgICAgICAgbWVudGlvbmVkIG9yIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPiIKKyAgICAgICAgICAgIGNoYXB0ZXIgcHJlc2VudHMgYSBmdWxsIGxpc3Qgb2YgdmFyaWFibGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZnRlciBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMsIEJpdEJha2UgdXNlcyBpdHMgcnVkaW1lbnRhcnkKKyAgICAgICAgICAgIGluaGVyaXRhbmNlIG1lY2hhbmlzbSwgd2hpY2ggaXMgdGhyb3VnaCBjbGFzcyBmaWxlcywgdG8gaW5oZXJpdAorICAgICAgICAgICAgc29tZSBzdGFuZGFyZCBjbGFzc2VzLgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgYSBjbGFzcyB3aGVuIHRoZSBpbmhlcml0IGRpcmVjdGl2ZSByZXNwb25zaWJsZQorICAgICAgICAgICAgZm9yIGdldHRpbmcgdGhhdCBjbGFzcyBpcyBlbmNvdW50ZXJlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGlzIGFsd2F5cyBpbmNsdWRlZC4KKyAgICAgICAgICAgIE90aGVyIGNsYXNzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhcmUgYWxzbyBpbmNsdWRlZC4KKyAgICAgICAgICAgIEJpdEJha2Ugc2VhcmNoZXMgZm9yIGNsYXNzIGZpbGVzIGluIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICB0aGUgcGF0aHMgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGluIHRoZSBzYW1lIHdheSBhcworICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBnb29kIHdheSB0byBnZXQgYW4gaWRlYSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQKKyAgICAgICAgICAgIHRoZSBjbGFzcyBmaWxlcyB1c2VkIGluIHlvdXIgZXhlY3V0aW9uIGVudmlyb25tZW50IGlzIHRvCisgICAgICAgICAgICBydW4gdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZSA+IG15YmIubG9nCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBFeGFtaW5pbmcgdGhlIHRvcCBvZiB0aGUgPGZpbGVuYW1lPm15YmIubG9nPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHNob3dzIHlvdSB0aGUgbWFueSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjbGFzcyBmaWxlcworICAgICAgICAgICAgdXNlZCBpbiB5b3VyIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IEJpdEJha2UgcGFyc2VzIGN1cmx5IGJyYWNlcy4KKyAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIGEgY2xvc2luZyBjdXJseSBicmFjZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGFuZAorICAgICAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgaGFzIG5vIGxlYWRpbmcgc3BhY2VzLCBCaXRCYWtlIHByb2R1Y2VzIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgYSBwYWlyIG9mIGN1cmx5IGJyYWNlcyBpbiBhIHNoZWxsIGZ1bmN0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICBjbG9zaW5nIGN1cmx5IGJyYWNlIG11c3Qgbm90IGJlIGxvY2F0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgd2l0aG91dCBsZWFkaW5nIHNwYWNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY2F1c2VzIEJpdEJha2UgdG8gcHJvZHVjZSBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjIyBUaGUgZm9sbG93aW5nICJ9IiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgY2F1c2VzIGEgcGFyc2luZyBlcnJvciAjIyMjIyMKKyAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXcml0aW5nIHRoZSByZWNpcGUgdGhpcyB3YXkgYXZvaWRzIHRoZSBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjI1RoZSBmb2xsb3dpbmcgIn0iIHdpdGggYSBsZWFkaW5nIHNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhdm9pZHMgdGhlIGVycm9yICMjIyMjIworICAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdsb2NhdGluZy1hbmQtcGFyc2luZy1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPkxvY2F0aW5nIGFuZCBQYXJzaW5nIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHBoYXNlLCBCaXRCYWtlIHdpbGwgaGF2ZSBzZXQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEJpdEJha2Ugbm93IHVzZXMgaXQgdG8gY29uc3RydWN0IGEgbGlzdCBvZiByZWNpcGVzIHRvIHBhcnNlLAorICAgICAgICAgICAgYWxvbmcgd2l0aCBhbnkgYXBwZW5kIGZpbGVzICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICB0byBhcHBseS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICAgICAgICAgICAgYXZhaWxhYmxlIGZpbGVzIGFuZCBzdXBwb3J0cyB3aWxkY2FyZHMuCisgICAgICAgICAgICBBbiBleGFtcGxlIHdvdWxkIGJlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkZJTEVTID0gIi9wYXRoL3RvL2JiZmlsZXMvKi5iYiAvcGF0aC90by9hcHBlbmRzLyouYmJhcHBlbmQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBlYWNoIHJlY2lwZSBhbmQgYXBwZW5kIGZpbGUgbG9jYXRlZAorICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBvZgorICAgICAgICAgICAgdmFyaW91cyB2YXJpYWJsZXMgaW50byB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBGb3IgZWFjaCBmaWxlLCBhIGZyZXNoIGNvcHkgb2YgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBpcworICAgICAgICAgICAgbWFkZSwgdGhlbiB0aGUgcmVjaXBlIGlzIHBhcnNlZCBsaW5lIGJ5IGxpbmUuCisgICAgICAgICAgICBBbnkgaW5oZXJpdCBzdGF0ZW1lbnRzIGNhdXNlIEJpdEJha2UgdG8gZmluZCBhbmQKKyAgICAgICAgICAgIHRoZW4gcGFyc2UgY2xhc3MgZmlsZXMgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdXNpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFzIHRoZSBzZWFyY2ggcGF0aC4KKyAgICAgICAgICAgIEZpbmFsbHksIEJpdEJha2UgcGFyc2VzIGluIG9yZGVyIGFueSBhcHBlbmQgZmlsZXMgZm91bmQgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uZSBjb21tb24gY29udmVudGlvbiBpcyB0byB1c2UgdGhlIHJlY2lwZSBmaWxlbmFtZSB0byBkZWZpbmUKKyAgICAgICAgICAgIHBpZWNlcyBvZiBtZXRhZGF0YS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gdGhlIHJlY2lwZQorICAgICAgICAgICAgbmFtZSBhbmQgdmVyc2lvbiBhcmUgdXNlZCB0byBzZXQgdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUE4gPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzBdIG9yICdkZWZhdWx0cGtnbmFtZSd9IgorICAgICBQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBhIHJlY2lwZSBjYWxsZWQgInNvbWV0aGluZ18xLjIuMy5iYiIgd291bGQgc2V0CisgICAgICAgICAgICA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiB0byAic29tZXRoaW5nIiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IHRvICIxLjIuMyIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IHRoZSB0aW1lIHBhcnNpbmcgaXMgY29tcGxldGUgZm9yIGEgcmVjaXBlLCBCaXRCYWtlCisgICAgICAgICAgICBoYXMgYSBsaXN0IG9mIHRhc2tzIHRoYXQgdGhlIHJlY2lwZSBkZWZpbmVzIGFuZCBhIHNldCBvZgorICAgICAgICAgICAgZGF0YSBjb25zaXN0aW5nIG9mIGtleXMgYW5kIHZhbHVlcyBhcyB3ZWxsIGFzCisgICAgICAgICAgICBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBkb2VzIG5vdCBuZWVkIGFsbCBvZiB0aGlzIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgSXQgb25seSBuZWVkcyBhIHNtYWxsIHN1YnNldCBvZiB0aGUgaW5mb3JtYXRpb24gdG8gbWFrZQorICAgICAgICAgICAgZGVjaXNpb25zIGFib3V0IHRoZSByZWNpcGUuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIEJpdEJha2UgY2FjaGVzIHRoZSB2YWx1ZXMgaW4gd2hpY2ggaXQgaXMKKyAgICAgICAgICAgIGludGVyZXN0ZWQgYW5kIGRvZXMgbm90IHN0b3JlIHRoZSByZXN0IG9mIHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEV4cGVyaWVuY2UgaGFzIHNob3duIGl0IGlzIGZhc3RlciB0byByZS1wYXJzZSB0aGUgbWV0YWRhdGEgdGhhbiB0bworICAgICAgICAgICAgdHJ5IGFuZCB3cml0ZSBpdCBvdXQgdG8gdGhlIGRpc2sgYW5kIHRoZW4gcmVsb2FkIGl0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVyZSBwb3NzaWJsZSwgc3Vic2VxdWVudCBCaXRCYWtlIGNvbW1hbmRzIHJldXNlIHRoaXMgY2FjaGUgb2YKKyAgICAgICAgICAgIHJlY2lwZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIFRoZSB2YWxpZGl0eSBvZiB0aGlzIGNhY2hlIGlzIGRldGVybWluZWQgYnkgZmlyc3QgY29tcHV0aW5nIGEKKyAgICAgICAgICAgIGNoZWNrc3VtIG9mIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gZGF0YSAoc2VlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfSEFTSENPTkZJR19XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9IQVNIQ09ORklHX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgIGFuZCB0aGVuIGNoZWNraW5nIGlmIHRoZSBjaGVja3N1bSBtYXRjaGVzLgorICAgICAgICAgICAgSWYgdGhhdCBjaGVja3N1bSBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlIGNhY2hlIGFuZCB0aGUgcmVjaXBlCisgICAgICAgICAgICBhbmQgY2xhc3MgZmlsZXMgaGF2ZSBub3QgY2hhbmdlZCwgQml0YmFrZSBpcyBhYmxlIHRvIHVzZQorICAgICAgICAgICAgdGhlIGNhY2hlLgorICAgICAgICAgICAgQml0QmFrZSB0aGVuIHJlbG9hZHMgdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjaXBlCisgICAgICAgICAgICBpbnN0ZWFkIG9mIHJlcGFyc2luZyBpdCBmcm9tIHNjcmF0Y2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlY2lwZSBmaWxlIGNvbGxlY3Rpb25zIGV4aXN0IHRvIGFsbG93IHRoZSB1c2VyIHRvCisgICAgICAgICAgICBoYXZlIG11bHRpcGxlIHJlcG9zaXRvcmllcyBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIHRoYXQgY29udGFpbiB0aGUgc2FtZQorICAgICAgICAgICAgZXhhY3QgcGFja2FnZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBvbmUgY291bGQgZWFzaWx5IHVzZSB0aGVtIHRvIG1ha2Ugb25lJ3MKKyAgICAgICAgICAgIG93biBsb2NhbCBjb3B5IG9mIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnksIGJ1dCB3aXRoCisgICAgICAgICAgICBjdXN0b20gbW9kaWZpY2F0aW9ucyB0aGF0IG9uZSBkb2VzIG5vdCB3YW50IHVwc3RyZWFtLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIEJCRklMRVMgPSAiL3N0dWZmL29wZW5lbWJlZGRlZC8qLyouYmIgL3N0dWZmL29wZW5lbWJlZGRlZC5tb2RpZmllZC8qLyouYmIiCisgICAgQkJGSUxFX0NPTExFQ1RJT05TID0gInVwc3RyZWFtIGxvY2FsIgorICAgIEJCRklMRV9QQVRURVJOX3Vwc3RyZWFtID0gIl4vc3R1ZmYvb3BlbmVtYmVkZGVkLyIKKyAgICBCQkZJTEVfUEFUVEVSTl9sb2NhbCA9ICJeL3N0dWZmL29wZW5lbWJlZGRlZC5tb2RpZmllZC8iCisgICAgQkJGSUxFX1BSSU9SSVRZX3Vwc3RyZWFtID0gIjUiCisgICAgQkJGSUxFX1BSSU9SSVRZX2xvY2FsID0gIjEwIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGxheWVycyBtZWNoYW5pc20gaXMgbm93IHRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGNvbGxlY3RpbmcKKyAgICAgICAgICAgICAgICBjb2RlLgorICAgICAgICAgICAgICAgIFdoaWxlIHRoZSBjb2xsZWN0aW9ucyBjb2RlIHJlbWFpbnMsIGl0cyBtYWluIHVzZSBpcyB0byBzZXQgbGF5ZXIKKyAgICAgICAgICAgICAgICBwcmlvcml0aWVzIGFuZCB0byBkZWFsIHdpdGggb3ZlcmxhcCAoY29uZmxpY3RzKSBiZXR3ZWVuIGxheWVycy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1iaXRiYWtlLXByb3ZpZGVycyc+CisgICAgICAgIDx0aXRsZT5Qcm92aWRlcnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXNzdW1pbmcgQml0QmFrZSBoYXMgYmVlbiBpbnN0cnVjdGVkIHRvIGV4ZWN1dGUgYSB0YXJnZXQKKyAgICAgICAgICAgIGFuZCB0aGF0IGFsbCB0aGUgcmVjaXBlIGZpbGVzIGhhdmUgYmVlbiBwYXJzZWQsIEJpdEJha2UKKyAgICAgICAgICAgIHN0YXJ0cyB0byBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgQml0QmFrZSBsb29rcyB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0CisgICAgICAgICAgICBmb3IgZWFjaCBvZiB0aGUgcmVjaXBlcy4KKyAgICAgICAgICAgIEEgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBpcyB0aGUgbGlzdCBvZiBuYW1lcyBieSB3aGljaAorICAgICAgICAgICAgdGhlIHJlY2lwZSBjYW4gYmUga25vd24uCisgICAgICAgICAgICBFYWNoIHJlY2lwZSdzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgaXMgY3JlYXRlZAorICAgICAgICAgICAgaW1wbGljaXRseSB0aHJvdWdoIHRoZSByZWNpcGUncworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgIGFuZCBleHBsaWNpdGx5IHRocm91Z2ggdGhlIHJlY2lwZSdzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIG9wdGlvbmFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIGEgcmVjaXBlIHVzZXMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4sIHRoYXQgcmVjaXBlJ3MKKyAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGZvdW5kIHVuZGVyIGFuIGFsdGVybmF0aXZlIG5hbWUgb3IgbmFtZXMgb3RoZXIKKyAgICAgICAgICAgIHRoYW4gdGhlIGltcGxpY2l0IDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IG5hbWUuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIGEgcmVjaXBlIG5hbWVkIDxmaWxlbmFtZT5rZXlib2FyZF8xLjAuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29udGFpbmVkIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBST1ZJREVTICs9ICJmdWxsa2V5Ym9hcmQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBmb3IgdGhpcyByZWNpcGUgYmVjb21lcworICAgICAgICAgICAgImtleWJvYXJkIiwgd2hpY2ggaXMgaW1wbGljaXQsIGFuZCAiZnVsbGtleWJvYXJkIiwgd2hpY2ggaXMgZXhwbGljaXQuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBmdW5jdGlvbmFsaXR5IGZvdW5kIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2V5Ym9hcmRfMS4wLmJiPC9maWxlbmFtZT4gY2FuIGJlIGZvdW5kIHVuZGVyIHR3bworICAgICAgICAgICAgZGlmZmVyZW50IG5hbWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWJpdGJha2UtcHJlZmVyZW5jZXMnPgorICAgICAgICA8dGl0bGU+UHJlZmVyZW5jZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgaXMgb25seSBwYXJ0IG9mIHRoZSBzb2x1dGlvbgorICAgICAgICAgICAgZm9yIGZpZ3VyaW5nIG91dCBhIHRhcmdldCdzIHJlY2lwZXMuCisgICAgICAgICAgICBCZWNhdXNlIHRhcmdldHMgbWlnaHQgaGF2ZSBtdWx0aXBsZSBwcm92aWRlcnMsIEJpdEJha2UgbmVlZHMKKyAgICAgICAgICAgIHRvIHByaW9yaXRpemUgcHJvdmlkZXJzIGJ5IGRldGVybWluaW5nIHByb3ZpZGVyIHByZWZlcmVuY2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIGluIHdoaWNoIGEgdGFyZ2V0IGhhcyBtdWx0aXBsZSBwcm92aWRlcnMKKyAgICAgICAgICAgIGlzICJ2aXJ0dWFsL2tlcm5lbCIsIHdoaWNoIGlzIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdCBmb3IgZWFjaCBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgRWFjaCBtYWNoaW5lIG9mdGVuIHNlbGVjdHMgdGhlIGJlc3Qga2VybmVsIHByb3ZpZGVyIGJ5IHVzaW5nIGEKKyAgICAgICAgICAgIGxpbmUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGluIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfUFJPVklERVInPjxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGlzIHRoZSBwcm92aWRlciB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgICAgIEJpdGJha2UgaXRlcmF0ZXMgdGhyb3VnaCBlYWNoIHRhcmdldCBpdCBuZWVkcyB0byBidWlsZCBhbmQKKyAgICAgICAgICAgIHJlc29sdmVzIHRoZW0gYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB1c2luZyB0aGlzIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgaG93IHByb3ZpZGVycyBhcmUgY2hvc2VuIGlzIG1hZGUgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QKKyAgICAgICAgICAgIHRoYXQgbXVsdGlwbGUgdmVyc2lvbnMgbWlnaHQgZXhpc3QgZm9yIGEgZ2l2ZW4gcHJvdmlkZXIuCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgYSBwcm92aWRlci4KKyAgICAgICAgICAgIFZlcnNpb24gY29tcGFyaXNvbnMgYXJlIG1hZGUgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIERlYmlhbi4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1ZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHZlcnNpb24uCisgICAgICAgICAgICBZb3UgY2FuIGluZmx1ZW5jZSB0aGUgb3JkZXIgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz48ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgZmlsZXMgaGF2ZSBhIHByZWZlcmVuY2Ugb2YgIjAiLgorICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIi0xIiBtYWtlcyB0aGUKKyAgICAgICAgICAgIHJlY2lwZSB1bmxpa2VseSB0byBiZSB1c2VkIHVubGVzcyBpdCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuCisgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiB0byAiMSIgbWFrZXMgaXQKKyAgICAgICAgICAgIGxpa2VseSB0aGUgcmVjaXBlIGlzIHVzZWQuCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFRkVSUkVEX1ZFUlNJT048L2ZpbGVuYW1lPiBvdmVycmlkZXMgYW55CisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gc2V0dGluZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiBpcyBvZnRlbiB1c2VkIHRvIG1hcmsgbmV3ZXIKKyAgICAgICAgICAgIGFuZCBtb3JlIGV4cGVyaW1lbnRhbCByZWNpcGUgdmVyc2lvbnMgdW50aWwgdGhleSBoYXZlIHVuZGVyZ29uZQorICAgICAgICAgICAgc3VmZmljaWVudCB0ZXN0aW5nIHRvIGJlIGNvbnNpZGVyZWQgc3RhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSDigJx2ZXJzaW9uc+KAnSBvZiBhIGdpdmVuIHJlY2lwZSwKKyAgICAgICAgICAgIEJpdEJha2UgZGVmYXVsdHMgdG8gc2VsZWN0aW5nIHRoZSBtb3N0IHJlY2VudAorICAgICAgICAgICAgdmVyc2lvbiwgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuCisgICAgICAgICAgICBJZiB0aGUgcmVjaXBlIGluIHF1ZXN0aW9uIGhhcyBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz48ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBzZXQgbG93ZXIgdGhhbiB0aGUgb3RoZXIgcmVjaXBlcyAoZGVmYXVsdCBpcyAwKSwgdGhlbgorICAgICAgICAgICAgaXQgd2lsbCBub3QgYmUgc2VsZWN0ZWQuCisgICAgICAgICAgICBUaGlzIGFsbG93cyB0aGUgcGVyc29uIG9yIHBlcnNvbnMgbWFpbnRhaW5pbmcKKyAgICAgICAgICAgIHRoZSByZXBvc2l0b3J5IG9mIHJlY2lwZSBmaWxlcyB0byBzcGVjaWZ5CisgICAgICAgICAgICB0aGVpciBwcmVmZXJlbmNlIGZvciB0aGUgZGVmYXVsdCBzZWxlY3RlZCB2ZXJzaW9uLgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgdXNlciBjYW4gc3BlY2lmeSB0aGVpciBwcmVmZXJyZWQgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgdGhlIGZpcnN0IHJlY2lwZSBpcyBuYW1lZCA8ZmlsZW5hbWU+YV8xLjEuYmI8L2ZpbGVuYW1lPiwgdGhlbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICB3aWxsIGJlIHNldCB0byDigJxh4oCdLCBhbmQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gMS4xLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaHVzLCBpZiBhIHJlY2lwZSBuYW1lZCA8ZmlsZW5hbWU+YV8xLjIuYmI8L2ZpbGVuYW1lPiBleGlzdHMsIEJpdEJha2UKKyAgICAgICAgICAgIHdpbGwgY2hvb3NlIDEuMiBieSBkZWZhdWx0LgorICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGluIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBCaXRCYWtlIHBhcnNlcywgeW91CisgICAgICAgICAgICBjYW4gY2hhbmdlIHRoYXQgcHJlZmVyZW5jZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fYSA9ICIxLjEiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIGNvbW1vbiBmb3IgYSByZWNpcGUgdG8gcHJvdmlkZSB0d28gdmVyc2lvbnMgLS0gYSBzdGFibGUsCisgICAgICAgICAgICAgICAgbnVtYmVyZWQgKGFuZCBwcmVmZXJyZWQpIHZlcnNpb24sIGFuZCBhIHZlcnNpb24gdGhhdCBpcworICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBvdXQgZnJvbSBhIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgdGhhdAorICAgICAgICAgICAgICAgIGlzIGNvbnNpZGVyZWQgbW9yZSAiYmxlZWRpbmcgZWRnZSIgYnV0IGNhbiBiZSBzZWxlY3RlZCBvbmx5CisgICAgICAgICAgICAgICAgZXhwbGljaXRseS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSBPcGVuRW1iZWRkZWQgY29kZWJhc2UsIHRoZXJlIGlzIGEgc3RhbmRhcmQsCisgICAgICAgICAgICAgICAgdmVyc2lvbmVkIHJlY2lwZSBmaWxlIGZvciBCdXN5Qm94LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94XzEuMjIuMS5iYjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGJ1dCB0aGVyZSBpcyBhbHNvIGEgR2l0LWJhc2VkIHZlcnNpb24sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfZ2l0LmJiPC9maWxlbmFtZT4sIHdoaWNoIGV4cGxpY2l0bHkgY29udGFpbnMgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgbnVtYmVyZWQsIHN0YWJsZSB2ZXJzaW9uIGlzIGFsd2F5cyBwcmVmZXJyZWQKKyAgICAgICAgICAgICAgICB1bmxlc3MgdGhlIGRldmVsb3BlciBzZWxlY3RzIG90aGVyd2lzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1iaXRiYWtlLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWFjaCB0YXJnZXQgQml0QmFrZSBidWlsZHMgY29uc2lzdHMgb2YgbXVsdGlwbGUgdGFza3Mgc3VjaCBhcworICAgICAgICAgICAgPGZpbGVuYW1lPmZldGNoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBiZXN0IHBlcmZvcm1hbmNlIG9uIG11bHRpLWNvcmUgc3lzdGVtcywgQml0QmFrZSBjb25zaWRlcnMgZWFjaAorICAgICAgICAgICAgdGFzayBhcyBhbiBpbmRlcGVuZGVudAorICAgICAgICAgICAgZW50aXR5IHdpdGggaXRzIG93biBzZXQgb2YgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgdGhyb3VnaCBzZXZlcmFsIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGluCisgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ncmVmLXZhcmlhYmxlcy1nbG9zJz5WYXJpYWJsZXMgR2xvc3Nhcnk8L2xpbms+CisgICAgICAgICAgICBuZWFyIHRoZSBlbmQgb2YgdGhpcyBtYW51YWwuCisgICAgICAgICAgICBBdCBhIGJhc2ljIGxldmVsLCBpdCBpcyBzdWZmaWNpZW50IHRvIGtub3cgdGhhdCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZXMgd2hlbgorICAgICAgICAgICAgY2FsY3VsYXRpbmcgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgQml0QmFrZSBoYW5kbGVzIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RlcGVuZGVuY2llcyc+RGVwZW5kZW5jaWVzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS10YXNrbGlzdCc+CisgICAgICAgIDx0aXRsZT5UaGUgVGFzayBMaXN0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJhc2VkIG9uIHRoZSBnZW5lcmF0ZWQgbGlzdCBvZiBwcm92aWRlcnMgYW5kIHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLAorICAgICAgICAgICAgQml0QmFrZSBjYW4gbm93IGNhbGN1bGF0ZSBleGFjdGx5IHdoYXQgdGFza3MgaXQgbmVlZHMgdG8gcnVuIGFuZCBpbiB3aGF0CisgICAgICAgICAgICBvcmRlciBpdCBuZWVkcyB0byBydW4gdGhlbS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4ZWN1dGluZy10YXNrcyc+RXhlY3V0aW5nIFRhc2tzPC9saW5rPiIgc2VjdGlvbiBoYXMgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IEJpdEJha2UgY2hvb3NlcyB3aGljaCB0YXNrIHRvIGV4ZWN1dGUgbmV4dC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJ1aWxkIG5vdyBzdGFydHMgd2l0aCBCaXRCYWtlIGZvcmtpbmcgb2ZmIHRocmVhZHMgdXAgdG8gdGhlIGxpbWl0IHNldCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIEJpdEJha2UgY29udGludWVzIHRvIGZvcmsgdGhyZWFkcyBhcyBsb25nIGFzIHRoZXJlIGFyZSB0YXNrcyByZWFkeSB0byBydW4sCisgICAgICAgICAgICB0aG9zZSB0YXNrcyBoYXZlIGFsbCB0aGVpciBkZXBlbmRlbmNpZXMgbWV0LCBhbmQgdGhlIHRocmVhZCB0aHJlc2hvbGQgaGFzIG5vdCBiZWVuCisgICAgICAgICAgICBleGNlZWRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggbm90aW5nIHRoYXQgeW91IGNhbiBncmVhdGx5IHNwZWVkIHVwIHRoZSBidWlsZCB0aW1lIGJ5IHByb3Blcmx5IHNldHRpbmcKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZWFjaCB0YXNrIGNvbXBsZXRlcywgYSB0aW1lc3RhbXAgaXMgd3JpdHRlbiB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgT24gc3Vic2VxdWVudCBydW5zLCBCaXRCYWtlIGxvb2tzIGluIHRoZSBidWlsZCBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3N0YW1wczwvZmlsZW5hbWU+IGFuZCBkb2VzIG5vdCByZXJ1bgorICAgICAgICAgICAgdGFza3MgdGhhdCBhcmUgYWxyZWFkeSBjb21wbGV0ZWQgdW5sZXNzIGEgdGltZXN0YW1wIGlzIGZvdW5kIHRvIGJlIGludmFsaWQuCisgICAgICAgICAgICBDdXJyZW50bHksIGludmFsaWQgdGltZXN0YW1wcyBhcmUgb25seSBjb25zaWRlcmVkIG9uIGEgcGVyCisgICAgICAgICAgICByZWNpcGUgZmlsZSBiYXNpcy4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNvbmZpZ3VyZSBzdGFtcCBoYXMgYSB0aW1lc3RhbXAgZ3JlYXRlciB0aGFuIHRoZQorICAgICAgICAgICAgY29tcGlsZSB0aW1lc3RhbXAgZm9yIGEgZ2l2ZW4gdGFyZ2V0LCB0aGVuIHRoZSBjb21waWxlIHRhc2sgd291bGQgcmVydW4uCisgICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21waWxlIHRhc2sgYWdhaW4sIGhvd2V2ZXIsIGhhcyBubyBlZmZlY3Qgb24gb3RoZXIgcHJvdmlkZXJzCisgICAgICAgICAgICB0aGF0IGRlcGVuZCBvbiB0aGF0IHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgc3RhbXBzIGlzIHBhcnRseSBjb25maWd1cmFibGUuCisgICAgICAgICAgICBJbiBtb2Rlcm4gdmVyc2lvbnMgb2YgQml0QmFrZSwgYSBoYXNoIGlzIGFwcGVuZGVkIHRvIHRoZQorICAgICAgICAgICAgc3RhbXAgc28gdGhhdCBpZiB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCB0aGUgc3RhbXAgYmVjb21lcworICAgICAgICAgICAgaW52YWxpZCBhbmQgdGhlIHRhc2sgaXMgYXV0b21hdGljYWxseSByZXJ1bi4KKyAgICAgICAgICAgIFRoaXMgaGFzaCwgb3Igc2lnbmF0dXJlIHVzZWQsIGlzIGdvdmVybmVkIGJ5IHRoZSBzaWduYXR1cmUgcG9saWN5CisgICAgICAgICAgICB0aGF0IGlzIGNvbmZpZ3VyZWQgKHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjaGVja3N1bXMnPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24pLgorICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBlbmQgZXh0cmEgbWV0YWRhdGEgdG8gdGhlIHN0YW1wIHVzaW5nCisgICAgICAgICAgICB0aGUgInN0YW1wLWV4dHJhLWluZm8iIHRhc2sgZmxhZy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBPcGVuRW1iZWRkZWQgdXNlcyB0aGlzIGZsYWcgdG8gbWFrZSBzb21lIHRhc2tzIG1hY2hpbmUtc3BlY2lmaWMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFNvbWUgdGFza3MgYXJlIG1hcmtlZCBhcyAibm9zdGFtcCIgdGFza3MuCisgICAgICAgICAgICBObyB0aW1lc3RhbXAgZmlsZSBpcyBjcmVhdGVkIHdoZW4gdGhlc2UgdGFza3MgYXJlIHJ1bi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgIm5vc3RhbXAiIHRhc2tzIGFyZSBhbHdheXMgcmVydW4uCisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRhc2tzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndGFza3MnPlRhc2tzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleGVjdXRpbmctdGFza3MnPgorICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIFRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRhc2tzIGNhbiBiZSBlaXRoZXIgYSBzaGVsbCB0YXNrIG9yIGEgUHl0aG9uIHRhc2suCisgICAgICAgICAgICBGb3Igc2hlbGwgdGFza3MsIEJpdEJha2Ugd3JpdGVzIGEgc2hlbGwgc2NyaXB0IHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L3J1bi5kb190YXNrbmFtZS5waWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIHRoZW4gZXhlY3V0ZXMgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc2hlbGwgc2NyaXB0IGNvbnRhaW5zIGFsbCB0aGUgZXhwb3J0ZWQgdmFyaWFibGVzLAorICAgICAgICAgICAgYW5kIHRoZSBzaGVsbCBmdW5jdGlvbnMgd2l0aCBhbGwgdmFyaWFibGVzIGV4cGFuZGVkLgorICAgICAgICAgICAgT3V0cHV0IGZyb20gdGhlIHNoZWxsIHNjcmlwdCBnb2VzIHRvIHRoZSBmaWxlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUfS9sb2cuZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4uCisgICAgICAgICAgICBMb29raW5nIGF0IHRoZSBleHBhbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gdGhlIHJ1biBmaWxlIGFuZAorICAgICAgICAgICAgdGhlIG91dHB1dCBpbiB0aGUgbG9nIGZpbGVzIGlzIGEgdXNlZnVsIGRlYnVnZ2luZyB0ZWNobmlxdWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBQeXRob24gdGFza3MsIEJpdEJha2UgZXhlY3V0ZXMgdGhlIHRhc2sgaW50ZXJuYWxseSBhbmQgbG9ncworICAgICAgICAgICAgaW5mb3JtYXRpb24gdG8gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2Ugd2lsbCB3cml0ZSB0aGUgZnVuY3Rpb25zIHRvIGZpbGVzCisgICAgICAgICAgICBzaW1pbGFyIHRvIHRoZSB3YXkgc2hlbGwgdGFza3MgYXJlIGhhbmRsZWQuCisgICAgICAgICAgICBMb2dnaW5nIHdpbGwgYmUgaGFuZGxlZCBpbiBhIHdheSBzaW1pbGFyIHRvIHNoZWxsIHRhc2tzIGFzIHdlbGwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvcmRlciBpbiB3aGljaCBCaXRCYWtlIHJ1bnMgdGhlIHRhc2tzIGlzIGNvbnRyb2xsZWQgYnkgaXRzCisgICAgICAgICAgICB0YXNrIHNjaGVkdWxlci4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0aGUgc2NoZWR1bGVyIGFuZCBkZWZpbmUgY3VzdG9tCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlc2UgdmFyaWFibGVzIHRoYXQgY29udHJvbCB0aGUKKyAgICAgICAgICAgIGJlaGF2aW9yOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TQ0hFRFVMRVInPjxmaWxlbmFtZT5CQl9TQ0hFRFVMRVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0NIRURVTEVSUyc+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZnVuY3Rpb25zIHJ1biBiZWZvcmUgYW5kIGFmdGVyIGEgdGFzaydzIG1haW4KKyAgICAgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSAicHJlZnVuY3MiIGFuZCAicG9zdGZ1bmNzIiBmbGFncyBvZiB0aGUgdGFzaworICAgICAgICAgICAgdGhhdCBsaXN0cyB0aGUgZnVuY3Rpb25zIHRvIHJ1bi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjaGVja3N1bXMnPgorICAgICAgICA8dGl0bGU+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGNoZWNrc3VtIGlzIGEgdW5pcXVlIHNpZ25hdHVyZSBvZiBhIHRhc2sncyBpbnB1dHMuCisgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIG9mIGEgdGFzayBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSB0YXNrCisgICAgICAgICAgICBuZWVkcyB0byBiZSBydW4uCisgICAgICAgICAgICBCZWNhdXNlIGl0IGlzIGEgY2hhbmdlIGluIGEgdGFzaydzIGlucHV0cyB0aGF0IHRyaWdnZXJzIHJ1bm5pbmcKKyAgICAgICAgICAgIHRoZSB0YXNrLCBCaXRCYWtlIG5lZWRzIHRvIGRldGVjdCBhbGwgdGhlIGlucHV0cyB0byBhIGdpdmVuIHRhc2suCisgICAgICAgICAgICBGb3Igc2hlbGwgdGFza3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGZhaXJseSBlYXN5IGJlY2F1c2UKKyAgICAgICAgICAgIEJpdEJha2UgZ2VuZXJhdGVzIGEgInJ1biIgc2hlbGwgc2NyaXB0IGZvciBlYWNoIHRhc2sgYW5kCisgICAgICAgICAgICBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBjaGVja3N1bSB0aGF0IGdpdmVzIHlvdSBhIGdvb2QgaWRlYSBvZiB3aGVuCisgICAgICAgICAgICB0aGUgdGFzaydzIGRhdGEgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gY29tcGxpY2F0ZSB0aGUgcHJvYmxlbSwgc29tZSB0aGluZ3Mgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgdGhlIGNoZWNrc3VtLgorICAgICAgICAgICAgRmlyc3QsIHRoZXJlIGlzIHRoZSBhY3R1YWwgc3BlY2lmaWMgYnVpbGQgcGF0aCBvZiBhIGdpdmVuIHRhc2sgLQorICAgICAgICAgICAgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgSXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzIGJlY2F1c2UgaXQgc2hvdWxkIG5vdAorICAgICAgICAgICAgYWZmZWN0IHRoZSBvdXRwdXQgZm9yIHRhcmdldCBwYWNrYWdlcy4KKyAgICAgICAgICAgIFRoZSBzaW1wbGlzdGljIGFwcHJvYWNoIGZvciBleGNsdWRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHRvIHNldAorICAgICAgICAgICAgaXQgdG8gc29tZSBmaXhlZCB2YWx1ZSBhbmQgY3JlYXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlICJydW4iIHNjcmlwdC4KKyAgICAgICAgICAgIEJpdEJha2UgZ29lcyBvbmUgc3RlcCBiZXR0ZXIgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfSEFTSEJBU0VfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfSEFTSEJBU0VfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBkZWZpbmUgYSBsaXN0IG9mIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZAorICAgICAgICAgICAgd2hlbiBnZW5lcmF0aW5nIHRoZSBzaWduYXR1cmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbm90aGVyIHByb2JsZW0gcmVzdWx0cyBmcm9tIHRoZSAicnVuIiBzY3JpcHRzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgICAgIG1pZ2h0IG9yIG1pZ2h0IG5vdCBnZXQgY2FsbGVkLgorICAgICAgICAgICAgVGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaWd1cmVzIG91dCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGJldHdlZW4gc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gcHJ1bmUgdGhlICJydW4iIHNjcmlwdHMgZG93biB0byB0aGUgbWluaW11bSBzZXQsCisgICAgICAgICAgICB0aGVyZWJ5IGFsbGV2aWF0aW5nIHRoaXMgcHJvYmxlbSBhbmQgbWFraW5nIHRoZSAicnVuIiBzY3JpcHRzIG11Y2ggbW9yZQorICAgICAgICAgICAgcmVhZGFibGUgYXMgYSBib251cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU28gZmFyIHdlIGhhdmUgc29sdXRpb25zIGZvciBzaGVsbCBzY3JpcHRzLgorICAgICAgICAgICAgV2hhdCBhYm91dCBQeXRob24gdGFza3M/CisgICAgICAgICAgICBUaGUgc2FtZSBhcHByb2FjaCBhcHBsaWVzIGV2ZW4gdGhvdWdoIHRoZXNlIHRhc2tzIGFyZSBtb3JlIGRpZmZpY3VsdC4KKyAgICAgICAgICAgIFRoZSBwcm9jZXNzIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YXJpYWJsZXMgYSBQeXRob24gZnVuY3Rpb24gYWNjZXNzZXMKKyAgICAgICAgICAgIGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscy4KKyAgICAgICAgICAgIEFnYWluLCB0aGUgaW5jcmVtZW50YWwgYnVpbGQgc29sdXRpb24gY29udGFpbnMgY29kZSB0aGF0IGZpcnN0IGZpZ3VyZXMgb3V0CisgICAgICAgICAgICB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gY3JlYXRlcyBhIGNoZWNrc3VtIGZvciB0aGUgZGF0YQorICAgICAgICAgICAgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpa2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhc2UsIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZC4KKyAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGNhbiBpbnN0cnVjdCB0aGUgYnVpbGQgcHJvY2VzcyB0byBpZ25vcmUgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuc3VyZXMgdGhhdCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkb2VzIG5vdAorICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+LCBldmVuIGlmIGl0IGRvZXMgcmVmZXJlbmNlIGl0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFcXVhbGx5LCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhZGQgZGVwZW5kZW5jaWVzIEJpdEJha2UKKyAgICAgICAgICAgIGlzIG5vdCBhYmxlIHRvIGZpbmQuCisgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGV4cGxpY2l0bHkgYWRkcyB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBhCisgICAgICAgICAgICBkZXBlbmRlbmN5IGZvciA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25zaWRlciBhIGNhc2Ugd2l0aCBpbi1saW5lIFB5dGhvbiwgZm9yIGV4YW1wbGUsIHdoZXJlIEJpdEJha2UgaXMgbm90CisgICAgICAgICAgICBhYmxlIHRvIGZpZ3VyZSBvdXQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUgKGkuZS4gdXNpbmcgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPiksIEJpdEJha2UKKyAgICAgICAgICAgIHByb2R1Y2VzIG91dHB1dCB3aGVuIGl0IGRpc2NvdmVycyBzb21ldGhpbmcgZm9yIHdoaWNoIGl0IGNhbm5vdCBmaWd1cmUgb3V0CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRodXMgZmFyLCB0aGlzIHNlY3Rpb24gaGFzIGxpbWl0ZWQgZGlzY3Vzc2lvbiB0byB0aGUgZGlyZWN0IGlucHV0cyBpbnRvIGEgdGFzay4KKyAgICAgICAgICAgIEluZm9ybWF0aW9uIGJhc2VkIG9uIGRpcmVjdCBpbnB1dHMgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJiYXNlaGFzaCIgaW4gdGhlCisgICAgICAgICAgICBjb2RlLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGEgdGFzaydzIGluZGlyZWN0IGlucHV0cyAtIHRoZQorICAgICAgICAgICAgdGhpbmdzIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBwcmVzZW50IGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgY2hlY2tzdW0gKG9yIHNpZ25hdHVyZSkgZm9yIGEgcGFydGljdWxhciB0YXNrIG5lZWRzIHRvIGFkZCB0aGUgaGFzaGVzCisgICAgICAgICAgICBvZiBhbGwgdGhlIHRhc2tzIG9uIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHRhc2sgZGVwZW5kcy4KKyAgICAgICAgICAgIENob29zaW5nIHdoaWNoIGRlcGVuZGVuY2llcyB0byBhZGQgaXMgYSBwb2xpY3kgZGVjaXNpb24uCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgZWZmZWN0IGlzIHRvIGdlbmVyYXRlIGEgbWFzdGVyIGNoZWNrc3VtIHRoYXQgY29tYmluZXMgdGhlIGJhc2VoYXNoCisgICAgICAgICAgICBhbmQgdGhlIGhhc2hlcyBvZiB0aGUgdGFzaydzIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXQgdGhlIGNvZGUgbGV2ZWwsIHRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygd2F5cyBib3RoIHRoZSBiYXNlaGFzaCBhbmQgdGhlCisgICAgICAgICAgICBkZXBlbmRlbnQgdGFzayBoYXNoZXMgY2FuIGJlIGluZmx1ZW5jZWQuCisgICAgICAgICAgICBXaXRoaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlLCB3ZSBjYW4gZ2l2ZSBCaXRCYWtlIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIHRvIGhlbHAgaXQgY29uc3RydWN0IHRoZSBiYXNlaGFzaC4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGVmZmVjdGl2ZWx5IHJlc3VsdHMgaW4gYSBsaXN0IG9mIGdsb2JhbCB2YXJpYWJsZQorICAgICAgICAgICAgZGVwZW5kZW5jeSBleGNsdWRlcyAtIHZhcmlhYmxlcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgY2hlY2tzdW0uCisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgdXNlcyB2YXJpYWJsZXMgZnJvbSBPcGVuRW1iZWRkZWQgdG8gaGVscCBpbGx1c3RyYXRlCisgICAgICAgICAgICB0aGUgY29uY2VwdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKKyAgICAgICAgIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVMTCBURVJNIFwKKyAgICAgICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICAgICAgIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBcCisgICAgICAgICBDQ0FDSEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUgTElDRU5TRV9QQVRIIFNES1BLR1NVRkZJWCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGV4Y2x1ZGVzIHRoZSB3b3JrIGRpcmVjdG9yeSwgd2hpY2ggaXMgcGFydCBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcnVsZXMgZm9yIGRlY2lkaW5nIHdoaWNoIGhhc2hlcyBvZiBkZXBlbmRlbnQgdGFza3MgdG8gaW5jbHVkZSB0aHJvdWdoCisgICAgICAgICAgICBkZXBlbmRlbmN5IGNoYWlucyBhcmUgbW9yZSBjb21wbGV4IGFuZCBhcmUgZ2VuZXJhbGx5IGFjY29tcGxpc2hlZCB3aXRoIGEKKyAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbi4KKyAgICAgICAgICAgIFRoZSBjb2RlIGluIDxmaWxlbmFtZT5tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHk8L2ZpbGVuYW1lPiBzaG93cyB0d28gZXhhbXBsZXMKKyAgICAgICAgICAgIG9mIHRoaXMgYW5kIGFsc28gaWxsdXN0cmF0ZXMgaG93IHlvdSBjYW4gaW5zZXJ0IHlvdXIgb3duIHBvbGljeSBpbnRvIHRoZSBzeXN0ZW0KKyAgICAgICAgICAgIGlmIHNvIGRlc2lyZWQuCisgICAgICAgICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdHdvIGJhc2ljIHNpZ25hdHVyZSBnZW5lcmF0b3JzIE9wZW5FbWJlZGRlZCBDb3JlCisgICAgICAgICAgICB1c2VzOiAgIk9FQmFzaWMiIGFuZCAiT0VCYXNpY0hhc2giLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYSBkdW1teSAibm9vcCIgc2lnbmF0dXJlIGhhbmRsZXIgZW5hYmxlZCBpbiBCaXRCYWtlLgorICAgICAgICAgICAgVGhpcyBtZWFucyB0aGF0IGJlaGF2aW9yIGlzIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgorICAgICAgICAgICAgPGZpbGVuYW1lPk9FLUNvcmU8L2ZpbGVuYW1lPiB1c2VzIHRoZSAiT0VCYXNpY0hhc2giIHNpZ25hdHVyZSBoYW5kbGVyIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHRocm91Z2ggdGhpcyBzZXR0aW5nIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlICJPRUJhc2ljSGFzaCIgPGZpbGVuYW1lPkJCX1NJR05BVFVSRV9IQU5ETEVSPC9maWxlbmFtZT4gaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAiT0VCYXNpYyIgdmVyc2lvbiBidXQgYWRkcyB0aGUgdGFzayBoYXNoIHRvIHRoZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhbnkgbWV0YWRhdGEgY2hhbmdlIHRoYXQgY2hhbmdlcyB0aGUgdGFzayBoYXNoLCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBjYXVzaW5nIHRoZSB0YXNrIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBidW1wCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWVzLCBhbmQgY2hhbmdlcyB0byBtZXRhZGF0YSBhdXRvbWF0aWNhbGx5IHJpcHBsZSBhY3Jvc3MgdGhlIGJ1aWxkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBlbmQgcmVzdWx0IG9mIHRoZXNlIHNpZ25hdHVyZSBnZW5lcmF0b3JzIGlzIHRvCisgICAgICAgICAgICBtYWtlIHNvbWUgZGVwZW5kZW5jeSBhbmQgaGFzaCBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdG8gdGhlIGJ1aWxkLgorICAgICAgICAgICAgVGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9CQVNFSEFTSF90YXNrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCB0YXNrIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT46PC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgaGFzaGVzIGZvciBlYWNoIGRlcGVuZGVudCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCSEFTSERFUFNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT46PC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhc2sgZGVwZW5kZW5jaWVzIGZvciBlYWNoIHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfVEFTS0hBU0g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGhhc2ggb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IEJpdEJha2UncyAiLVMiIG9wdGlvbiBsZXRzIHlvdQorICAgICAgICAgICAgZGVidWcgQml0YmFrZSdzIHByb2Nlc3Npbmcgb2Ygc2lnbmF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBvcHRpb25zIHBhc3NlZCB0byAtUyBhbGxvdyBkaWZmZXJlbnQgZGVidWdnaW5nIG1vZGVzCisgICAgICAgICAgICB0byBiZSB1c2VkLCBlaXRoZXIgdXNpbmcgQml0QmFrZSdzIG93biBkZWJ1ZyBmdW5jdGlvbnMKKyAgICAgICAgICAgIG9yIHBvc3NpYmx5IHRob3NlIGRlZmluZWQgaW4gdGhlIG1ldGFkYXRhL3NpZ25hdHVyZSBoYW5kbGVyCisgICAgICAgICAgICBpdHNlbGYuCisgICAgICAgICAgICBUaGUgc2ltcGxlc3QgcGFyYW1ldGVyIHRvIHBhc3MgaXMgIm5vbmUiLCB3aGljaCBjYXVzZXMgYQorICAgICAgICAgICAgc2V0IG9mIHNpZ25hdHVyZSBpbmZvcm1hdGlvbiB0byBiZSB3cml0dGVuIG91dCBpbnRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBTVBfRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhcmdldHMgc3BlY2lmaWVkLgorICAgICAgICAgICAgVGhlIG90aGVyIGN1cnJlbnRseSBhdmFpbGFibGUgcGFyYW1ldGVyIGlzICJwcmludGRpZmYiLAorICAgICAgICAgICAgd2hpY2ggY2F1c2VzIEJpdEJha2UgdG8gdHJ5IHRvIGVzdGFibGlzaCB0aGUgY2xvc2VzdAorICAgICAgICAgICAgc2lnbmF0dXJlIG1hdGNoIGl0IGNhbiAoZS5nLiBpbiB0aGUgc3N0YXRlIGNhY2hlKSBhbmQgdGhlbgorICAgICAgICAgICAgcnVuIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gb3ZlciB0aGUgbWF0Y2hlcworICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIHRoZSBzdGFtcHMgYW5kIGRlbHRhIHdoZXJlIHRoZXNlIHR3bworICAgICAgICAgICAgc3RhbXAgdHJlZXMgZGl2ZXJnZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEl0IGlzIGxpa2VseSB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwKKyAgICAgICAgICAgICAgICBwcm92aWRlIG90aGVyIHNpZ25hdHVyZSBoYW5kbGVycyB0cmlnZ2VyZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgIi1TIiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBjaGVja3N1bSBtZXRhZGF0YSBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0YXNrLWNoZWNrc3Vtcy1hbmQtc2V0c2NlbmUnPlRhc2sgQ2hlY2tzdW1zIGFuZCBTZXRzY2VuZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3NldHNjZW5lJz4KKyAgICAgICAgPHRpdGxlPlNldHNjZW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzZXRzY2VuZSBwcm9jZXNzIGVuYWJsZXMgQml0QmFrZSB0byBoYW5kbGUgInByZS1idWlsdCIgYXJ0aWZhY3RzLgorICAgICAgICAgICAgVGhlIGFiaWxpdHkgdG8gaGFuZGxlIGFuZCByZXVzZSB0aGVzZSBhcnRpZmFjdHMgYWxsb3dzIEJpdEJha2UKKyAgICAgICAgICAgIHRoZSBsdXh1cnkgb2Ygbm90IGhhdmluZyB0byBidWlsZCBzb21ldGhpbmcgZnJvbSBzY3JhdGNoIGV2ZXJ5IHRpbWUuCisgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGNhbiB1c2UsIHdoZW4gcG9zc2libGUsIGV4aXN0aW5nIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBuZWVkcyB0byBoYXZlIHJlbGlhYmxlIGRhdGEgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhbgorICAgICAgICAgICAgYXJ0aWZhY3QgaXMgY29tcGF0aWJsZS4KKyAgICAgICAgICAgIFNpZ25hdHVyZXMsIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgcHJvdmlkZSBhbiBpZGVhbAorICAgICAgICAgICAgd2F5IG9mIHJlcHJlc2VudGluZyB3aGV0aGVyIGFuIGFydGlmYWN0IGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICBJZiBhIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSwgYW4gb2JqZWN0IGNhbiBiZSByZXVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIGFuIG9iamVjdCBjYW4gYmUgcmV1c2VkLCB0aGUgcHJvYmxlbSB0aGVuIGJlY29tZXMgaG93IHRvCisgICAgICAgICAgICByZXBsYWNlIGEgZ2l2ZW4gdGFzayBvciBzZXQgb2YgdGFza3Mgd2l0aCB0aGUgcHJlLWJ1aWx0IGFydGlmYWN0LgorICAgICAgICAgICAgQml0QmFrZSBzb2x2ZXMgdGhlIHByb2JsZW0gd2l0aCB0aGUgInNldHNjZW5lIiBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIEJpdEJha2UgaXMgYXNrZWQgdG8gYnVpbGQgYSBnaXZlbiB0YXJnZXQsIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZywKKyAgICAgICAgICAgIGl0IGZpcnN0IGFza3Mgd2hldGhlciBjYWNoZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZvciBhbnkgb2YgdGhlCisgICAgICAgICAgICB0YXJnZXRzIGl0J3MgYnVpbGRpbmcsIG9yIGFueSBvZiB0aGUgaW50ZXJtZWRpYXRlIHRhcmdldHMuCisgICAgICAgICAgICBJZiBjYWNoZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLCBCaXRCYWtlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBpbnN0ZWFkIG9mCisgICAgICAgICAgICBydW5uaW5nIHRoZSBtYWluIHRhc2tzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGZpcnN0IGNhbGxzIHRoZSBmdW5jdGlvbiBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hDSEVDS19GVU5DVElPTic+PGZpbGVuYW1lPkJCX0hBU0hDSEVDS19GVU5DVElPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgd2l0aCBhIGxpc3Qgb2YgdGFza3MgYW5kIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgIGhhc2hlcyBpdCB3YW50cyB0byBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgZmFzdCBhbmQgcmV0dXJucyBhIGxpc3QKKyAgICAgICAgICAgIG9mIHRoZSB0YXNrcyBmb3Igd2hpY2ggaXQgYmVsaWV2ZXMgaW4gY2FuIG9idGFpbiBhcnRpZmFjdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5leHQsIGZvciBlYWNoIG9mIHRoZSB0YXNrcyB0aGF0IHdlcmUgcmV0dXJuZWQgYXMgcG9zc2liaWxpdGllcywKKyAgICAgICAgICAgIEJpdEJha2UgZXhlY3V0ZXMgYSBzZXRzY2VuZSB2ZXJzaW9uIG9mIHRoZSB0YXNrIHRoYXQgdGhlIHBvc3NpYmxlCisgICAgICAgICAgICBhcnRpZmFjdCBjb3ZlcnMuCisgICAgICAgICAgICBTZXRzY2VuZSB2ZXJzaW9ucyBvZiBhIHRhc2sgaGF2ZSB0aGUgc3RyaW5nICJfc2V0c2NlbmUiIGFwcGVuZGVkIHRvIHRoZQorICAgICAgICAgICAgdGFzayBuYW1lLgorICAgICAgICAgICAgU28sIGZvciBleGFtcGxlLCB0aGUgdGFzayB3aXRoIHRoZSBuYW1lIDxmaWxlbmFtZT54eHg8L2ZpbGVuYW1lPiBoYXMKKyAgICAgICAgICAgIGEgc2V0c2NlbmUgdGFzayBuYW1lZCA8ZmlsZW5hbWU+eHh4X3NldHNjZW5lPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgc2V0c2NlbmUgdmVyc2lvbiBvZiB0aGUgdGFzayBleGVjdXRlcyBhbmQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeQorICAgICAgICAgICAgYXJ0aWZhY3RzIHJldHVybmluZyBlaXRoZXIgc3VjY2VzcyBvciBmYWlsdXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBwcmV2aW91c2x5IG1lbnRpb25lZCwgYW4gYXJ0aWZhY3QgY2FuIGNvdmVyIG1vcmUgdGhhbiBvbmUgdGFzay4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBpdCBpcyBwb2ludGxlc3MgdG8gb2J0YWluIGEgY29tcGlsZXIgaWYgeW91CisgICAgICAgICAgICBhbHJlYWR5IGhhdmUgdGhlIGNvbXBpbGVkIGJpbmFyeS4KKyAgICAgICAgICAgIFRvIGhhbmRsZSB0aGlzLCBCaXRCYWtlIGNhbGxzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NFVFNDRU5FX0RFUFZBTElEJz48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfREVQVkFMSUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBlYWNoIHN1Y2Nlc3NmdWwgc2V0c2NlbmUgdGFzayB0byBrbm93IHdoZXRoZXIgb3Igbm90IGl0IG5lZWRzCisgICAgICAgICAgICB0byBvYnRhaW4gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGF0IHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpbmFsbHksIGFmdGVyIGFsbCB0aGUgc2V0c2NlbmUgdGFza3MgaGF2ZSBleGVjdXRlZCwgQml0QmFrZSBjYWxscyB0aGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlZCBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTic+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgd2l0aCB0aGUgbGlzdCBvZiB0YXNrcyBCaXRCYWtlIHRoaW5rcyBoYXMgYmVlbiAiY292ZXJlZCIuCisgICAgICAgICAgICBUaGUgbWV0YWRhdGEgY2FuIHRoZW4gZW5zdXJlIHRoYXQgdGhpcyBsaXN0IGlzIGNvcnJlY3QgYW5kIGNhbgorICAgICAgICAgICAgaW5mb3JtIEJpdEJha2UgdGhhdCBpdCB3YW50cyBzcGVjaWZpYyB0YXNrcyB0byBiZSBydW4gcmVnYXJkbGVzcworICAgICAgICAgICAgb2YgdGhlIHNldHNjZW5lIHJlc3VsdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0c2NlbmUgbWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjhjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sCkBAIC0wLDAgKzEsNzY1IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXI+Cis8dGl0bGU+RmlsZSBEb3dubG9hZCBTdXBwb3J0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRCYWtlJ3MgZmV0Y2ggbW9kdWxlIGlzIGEgc3RhbmRhbG9uZSBwaWVjZSBvZiBsaWJyYXJ5IGNvZGUKKyAgICAgICAgdGhhdCBkZWFscyB3aXRoIHRoZSBpbnRyaWNhY2llcyBvZiBkb3dubG9hZGluZyBzb3VyY2UgY29kZQorICAgICAgICBhbmQgZmlsZXMgZnJvbSByZW1vdGUgc3lzdGVtcy4KKyAgICAgICAgRmV0Y2hpbmcgc291cmNlIGNvZGUgaXMgb25lIG9mIHRoZSBjb3JuZXJzdG9uZXMgb2YgYnVpbGRpbmcgc29mdHdhcmUuCisgICAgICAgIEFzIHN1Y2gsIHRoaXMgbW9kdWxlIGZvcm1zIGFuIGltcG9ydGFudCBwYXJ0IG9mIEJpdEJha2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjdXJyZW50IGZldGNoIG1vZHVsZSBpcyBjYWxsZWQgImZldGNoMiIgYW5kIHJlZmVycyB0byB0aGUKKyAgICAgICAgZmFjdCB0aGF0IGl0IGlzIHRoZSBzZWNvbmQgbWFqb3IgdmVyc2lvbiBvZiB0aGUgQVBJLgorICAgICAgICBUaGUgb3JpZ2luYWwgdmVyc2lvbiBpcyBvYnNvbGV0ZSBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb2RlYmFzZS4KKyAgICAgICAgVGh1cywgaW4gYWxsIGNhc2VzLCAiZmV0Y2giIHJlZmVycyB0byAiZmV0Y2gyIiBpbiB0aGlzCisgICAgICAgIG1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWRvd25sb2FkLWZldGNoJz4KKyAgICAgICAgPHRpdGxlPlRoZSBEb3dubG9hZCAoRmV0Y2gpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdGFrZXMgc2V2ZXJhbCBzdGVwcyB3aGVuIGZldGNoaW5nIHNvdXJjZSBjb2RlIG9yIGZpbGVzLgorICAgICAgICAgICAgVGhlIGZldGNoZXIgY29kZWJhc2UgZGVhbHMgd2l0aCB0d28gZGlzdGluY3QgcHJvY2Vzc2VzIGluIG9yZGVyOgorICAgICAgICAgICAgb2J0YWluaW5nIHRoZSBmaWxlcyBmcm9tIHNvbWV3aGVyZSAoY2FjaGVkIG9yIG90aGVyd2lzZSkKKyAgICAgICAgICAgIGFuZCB0aGVuIHVucGFja2luZyB0aG9zZSBmaWxlcyBpbnRvIGEgc3BlY2lmaWMgbG9jYXRpb24gYW5kCisgICAgICAgICAgICBwZXJoYXBzIGluIGEgc3BlY2lmaWMgd2F5LgorICAgICAgICAgICAgR2V0dGluZyBhbmQgdW5wYWNraW5nIHRoZSBmaWxlcyBpcyBvZnRlbiBvcHRpb25hbGx5IGZvbGxvd2VkCisgICAgICAgICAgICBieSBwYXRjaGluZy4KKyAgICAgICAgICAgIFBhdGNoaW5nLCBob3dldmVyLCBpcyBub3QgY292ZXJlZCBieSB0aGlzIG1vZHVsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvZGUgdG8gZXhlY3V0ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGlzIHByb2Nlc3MsIGEgZmV0Y2gsCisgICAgICAgICAgICBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgY29kZSBzZXRzIHVwIGFuIGluc3RhbmNlIG9mIHRoZSBmZXRjaCBjbGFzcy4KKyAgICAgICAgICAgIFRoZSBpbnN0YW5jZSB1c2VzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJMcyBmcm9tIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlbiBjYWxscyB0aGUgPGZpbGVuYW1lPmRvd25sb2FkPC9maWxlbmFtZT4KKyAgICAgICAgICAgIG1ldGhvZCB0byBkb3dubG9hZCB0aGUgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpbnN0YW50aWF0aW9uIG9mIHRoZSBmZXRjaCBjbGFzcyBpcyB1c3VhbGx5IGZvbGxvd2VkIGJ5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290ZGlyID0gbC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgICBmZXRjaGVyLnVucGFjayhyb290ZGlyKQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBjb2RlIHVucGFja3MgdGhlIGRvd25sb2FkZWQgZmlsZXMgdG8gdGhlCisgICAgICAgICAgICBzcGVjaWZpZWQgYnkgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBjb252ZW5pZW5jZSwgdGhlIG5hbWluZyBpbiB0aGVzZSBleGFtcGxlcyBtYXRjaGVzCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlcyB1c2VkIGJ5IE9wZW5FbWJlZGRlZC4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzZWUgdGhlIGFib3ZlIGNvZGUgaW4gYWN0aW9uLCBleGFtaW5lCisgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBjbGFzcyBmaWxlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZXMgYXJlIG5vdCBoYXJkY29kZWQgaW50byB0aGUgZmV0Y2hlciwgc2luY2UgdGhvc2UgZmV0Y2hlcgorICAgICAgICAgICAgbWV0aG9kcyBjYW4gYmUgKGFuZCBhcmUpIGNhbGxlZCB3aXRoIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lcy4KKyAgICAgICAgICAgIEluIE9wZW5FbWJlZGRlZCBmb3IgZXhhbXBsZSwgdGhlIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjb2RlIHVzZXMKKyAgICAgICAgICAgIHRoZSBmZXRjaCBtb2R1bGUgdG8gZmV0Y2ggdGhlIHNzdGF0ZSBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB0aGUgPGZpbGVuYW1lPmRvd25sb2FkKCk8L2ZpbGVuYW1lPiBtZXRob2QgaXMgY2FsbGVkLAorICAgICAgICAgICAgQml0QmFrZSB0cmllcyB0byByZXNvbHZlIHRoZSBVUkxzIGJ5IGxvb2tpbmcgZm9yIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgaW4gYSBzcGVjaWZpYyBzZWFyY2ggb3JkZXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlLW1pcnJvciBTaXRlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGZpcnN0IHVzZXMgcHJlLW1pcnJvcnMgdG8gdHJ5IGFuZCBmaW5kIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbG9jYXRpb25zIGFyZSBkZWZpbmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIFVSSTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBwcmUtbWlycm9ycyBmYWlsLCBCaXRCYWtlIHVzZXMgdGhlIG9yaWdpbmFsIFVSTCAoZS5nIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWlycm9yIFNpdGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIGZldGNoIGZhaWx1cmVzIG9jY3VyLCBCaXRCYWtlIG5leHQgdXNlcyBtaXJyb3IgbG9jYXRpb25zIGFzCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVhY2ggVVJMIHBhc3NlZCB0byB0aGUgZmV0Y2hlciwgdGhlIGZldGNoZXIKKyAgICAgICAgICAgIGNhbGxzIHRoZSBzdWJtb2R1bGUgdGhhdCBoYW5kbGVzIHRoYXQgcGFydGljdWxhciBVUkwgdHlwZS4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgY2FuIGJlIHRoZSBzb3VyY2Ugb2Ygc29tZSBjb25mdXNpb24gd2hlbiB5b3UKKyAgICAgICAgICAgIGFyZSBwcm92aWRpbmcgVVJMcyBmb3IgdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB0d28gVVJMczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC9wb2t5O3Byb3RvY29sPWdpdAorICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvcG9reTtwcm90b2NvbD1odHRwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBVUkwgaXMgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPndnZXQ8L2ZpbGVuYW1lPiBmZXRjaGVyLCB3aGljaCBkb2VzIG5vdAorICAgICAgICAgICAgdW5kZXJzdGFuZCAiZ2l0Ii4KKyAgICAgICAgICAgIFRoZXJlZm9yZSwgdGhlIGxhdHRlciBjYXNlIGlzIHRoZSBjb3JyZWN0IGZvcm0gc2luY2UgdGhlCisgICAgICAgICAgICBHaXQgZmV0Y2hlciBkb2VzIGtub3cgaG93IHRvIHVzZSBIVFRQIGFzIGEgdHJhbnNwb3J0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHRoYXQgc2hvdyBjb21tb25seSB1c2VkIG1pcnJvcgorICAgICAgICAgICAgZGVmaW5pdGlvbnM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRU1JUlJPUlMgPz0gIlwKKyAgICAgICAgIGJ6cjovLy4qLy4qICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIGN2czovLy4qLy4qICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIGdpdDovLy4qLy4qICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIGhnOi8vLiovLiogICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIG9zYzovLy4qLy4qICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIHA0Oi8vLiovLiogICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIHN2bjovLy4qLy4qICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIgorCisgICAgIE1JUlJPUlMgPSsgIlwKKyAgICAgICAgIGZ0cDovLy4qLy4qICAgICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIGh0dHA6Ly8uKi8uKiAgICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgICAgIGh0dHBzOi8vLiovLiogICAgaHR0cDovL3NvbWVtaXJyb3Iub3JnL3NvdXJjZXMvIFxuIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSXQgaXMgdXNlZnVsIHRvIG5vdGUgdGhhdCBCaXRCYWtlIHN1cHBvcnRzCisgICAgICAgICAgICBjcm9zcy1VUkxzLgorICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gbWlycm9yIGEgR2l0IHJlcG9zaXRvcnkgb24gYW4gSFRUUAorICAgICAgICAgICAgc2VydmVyIGFzIGEgdGFyYmFsbC4KKyAgICAgICAgICAgIFRoaXMgaXMgd2hhdCB0aGUgPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IG1hcHBpbmcgaW4KKyAgICAgICAgICAgIHRoZSBwcmV2aW91cyBleGFtcGxlIGRvZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNpbmNlIG5ldHdvcmsgYWNjZXNzZXMgYXJlIHNsb3csIEJpdGJha2UgbWFpbnRhaW5zIGEKKyAgICAgICAgICAgIGNhY2hlIG9mIGZpbGVzIGRvd25sb2FkZWQgZnJvbSB0aGUgbmV0d29yay4KKyAgICAgICAgICAgIEFueSBzb3VyY2UgZmlsZXMgdGhhdCBhcmUgbm90IGxvY2FsIChpLmUuCisgICAgICAgICAgICBkb3dubG9hZGVkIGZyb20gdGhlIEludGVybmV0KSBhcmUgcGxhY2VkIGludG8gdGhlIGRvd25sb2FkCisgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaWxlIGludGVncml0eSBpcyBvZiBrZXkgaW1wb3J0YW5jZSBmb3IgcmVwcm9kdWNpbmcgYnVpbGRzLgorICAgICAgICAgICAgRm9yIG5vbi1sb2NhbCBhcmNoaXZlIGRvd25sb2FkcywgdGhlIGZldGNoZXIgY29kZSBjYW4gdmVyaWZ5CisgICAgICAgICAgICBTSEEtMjU2IGFuZCBNRDUgY2hlY2tzdW1zIHRvIGVuc3VyZSB0aGUgYXJjaGl2ZXMgaGF2ZSBiZWVuCisgICAgICAgICAgICBkb3dubG9hZGVkIGNvcnJlY3RseS4KKyAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSB0aGVzZSBjaGVja3N1bXMgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGggdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICB2YXJmbGFncyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJW21kNXN1bV0gPSAiPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iCisgICAgIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBjaGVja3N1bXMgYXMgcGFyYW1ldGVycyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgc2hvd24gYmVsb3c6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2Zvb2Jhci50YXIuYnoyO21kNXN1bT00YThlMGYyMzdlOTYxZmQ3Nzg1ZDE5ZDA3ZmRiOTk0ZCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIG11bHRpcGxlIFVSSXMgZXhpc3QsIHlvdSBjYW4gc3BlY2lmeSB0aGUgY2hlY2tzdW1zIGVpdGhlcgorICAgICAgICAgICAgZGlyZWN0bHkgYXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIG9yIHlvdSBjYW4gbmFtZSB0aGUgVVJMcy4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3ludGF4IHNob3dzIGhvdyB5b3UgbmFtZSB0aGUgVVJJczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZm9vYmFyLnRhci5iejI7bmFtZT1mb28iCisgICAgIFNSQ19VUklbZm9vLm1kNXN1bV0gPSA0YThlMGYyMzdlOTYxZmQ3Nzg1ZDE5ZDA3ZmRiOTk0ZAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQWZ0ZXIgYSBmaWxlIGhhcyBiZWVuIGRvd25sb2FkZWQgYW5kIGhhcyBoYWQgaXRzIGNoZWNrc3VtIGNoZWNrZWQsCisgICAgICAgICAgICBhICIuZG9uZSIgc3RhbXAgaXMgcGxhY2VkIGluIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGlzIHN0YW1wIGR1cmluZyBzdWJzZXF1ZW50IGJ1aWxkcyB0byBhdm9pZAorICAgICAgICAgICAgZG93bmxvYWRpbmcgb3IgY29tcGFyaW5nIGEgY2hlY2tzdW0gZm9yIHRoZSBmaWxlIGFnYWluLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IGxvY2FsIHN0b3JhZ2UgaXMgc2FmZSBmcm9tIGRhdGEgY29ycnVwdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIHdlcmUgbm90IHRoZSBjYXNlLCB0aGVyZSB3b3VsZCBiZSBiaWdnZXIgaXNzdWVzIHRvIHdvcnJ5IGFib3V0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NUUklDVF9DSEVDS1NVTSc+PGZpbGVuYW1lPkJCX1NUUklDVF9DSEVDS1NVTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgaXMgc2V0LCBhbnkgZG93bmxvYWQgd2l0aG91dCBhIGNoZWNrc3VtIHRyaWdnZXJzIGFuCisgICAgICAgICAgICBlcnJvciBtZXNzYWdlLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTk9fTkVUV09SSyc+PGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIG1ha2UgYW55IGF0dGVtcHRlZCBuZXR3b3JrIGFjY2VzcyBhIGZhdGFsCisgICAgICAgICAgICBlcnJvciwgd2hpY2ggaXMgdXNlZnVsIGZvciBjaGVja2luZyB0aGF0IG1pcnJvcnMgYXJlIGNvbXBsZXRlCisgICAgICAgICAgICBhcyB3ZWxsIGFzIG90aGVyIHRoaW5ncy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi10aGUtdW5wYWNrJz4KKyAgICAgICAgPHRpdGxlPlRoZSBVbnBhY2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHVucGFjayBwcm9jZXNzIHVzdWFsbHkgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgZG93bmxvYWQuCisgICAgICAgICAgICBGb3IgYWxsIFVSTHMgZXhjZXB0IEdpdCBVUkxzLCBCaXRCYWtlIHVzZXMgdGhlIGNvbW1vbgorICAgICAgICAgICAgPGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+IG1ldGhvZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBudW1iZXIgb2YgcGFyYW1ldGVycyBleGlzdCB0aGF0IHlvdSBjYW4gc3BlY2lmeSB3aXRoaW4gdGhlCisgICAgICAgICAgICBVUkwgdG8gZ292ZXJuIHRoZSBiZWhhdmlvciBvZiB0aGUgdW5wYWNrIHN0YWdlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVucGFjazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRoZSBVUkwgY29tcG9uZW50cyBhcmUgdW5wYWNrZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB0aGUgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICBhcmUgdW5wYWNrZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMCIsIHRoZSB1bnBhY2sgc3RhZ2UgbGVhdmVzIHRoZSBmaWxlIGFsb25lLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCBhbiBhcmNoaXZlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGNvcGllZCBpbiBhbmQgbm90IGJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRvczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBcHBsaWVzIHRvIDxmaWxlbmFtZT4uemlwPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uamFyPC9maWxlbmFtZT4gZmlsZXMgYW5kIHNwZWNpZmllcyB3aGV0aGVyIHRvCisgICAgICAgICAgICAgICAgICAgIHVzZSBET1MgbGluZSBlbmRpbmcgY29udmVyc2lvbiBvbiB0ZXh0IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJhc2VwYXRoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RydWN0cyB0aGUgdW5wYWNrIHN0YWdlIHRvIHN0cmlwIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZnJvbSB0aGUgc291cmNlIHBhdGggd2hlbiB1bnBhY2tpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3ViZGlyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFVucGFja3MgdGhlIHNwZWNpZmljIFVSTCB0byB0aGUgc3BlY2lmaWVkIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVGhlIHVucGFjayBjYWxsIGF1dG9tYXRpY2FsbHkgZGVjb21wcmVzc2VzIGFuZCBleHRyYWN0cyBmaWxlcworICAgICAgICAgICAgd2l0aCAiLloiLCAiLnoiLCAiLmd6IiwgIi54eiIsICIuemlwIiwgIi5qYXIiLCAiLmlwayIsICIucnBtIi4KKyAgICAgICAgICAgICIuc3JwbSIsICIuZGViIiBhbmQgIi5iejIiIGV4dGVuc2lvbnMgYXMgd2VsbCBhcyB2YXJpb3VzIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgb2YgdGFyYmFsbCBleHRlbnNpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoZSBHaXQgZmV0Y2hlciBoYXMgaXRzIG93biB1bnBhY2sgbWV0aG9kIHRoYXQKKyAgICAgICAgICAgIGlzIG9wdGltaXplZCB0byB3b3JrIHdpdGggR2l0IHRyZWVzLgorICAgICAgICAgICAgQmFzaWNhbGx5LCB0aGlzIG1ldGhvZCB3b3JrcyBieSBjbG9uaW5nIHRoZSB0cmVlIGludG8gdGhlIGZpbmFsCisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBpcyBjb21wbGV0ZWQgdXNpbmcgcmVmZXJlbmNlcyBzbyB0aGF0IHRoZXJlIGlzCisgICAgICAgICAgICBvbmx5IG9uZSBjZW50cmFsIGNvcHkgb2YgdGhlIEdpdCBtZXRhZGF0YSBuZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItZmV0Y2hlcnMnPgorICAgICAgICA8dGl0bGU+RmV0Y2hlcnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBVUkwgcHJlZml4IGRldGVybWluZXMgd2hpY2gKKyAgICAgICAgICAgIGZldGNoZXIgc3VibW9kdWxlIEJpdEJha2UgdXNlcy4KKyAgICAgICAgICAgIEVhY2ggc3VibW9kdWxlIGNhbiBzdXBwb3J0IGRpZmZlcmVudCBVUkwgcGFyYW1ldGVycywKKyAgICAgICAgICAgIHdoaWNoIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2NhbC1maWxlLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkxvY2FsIGZpbGUgZmV0Y2hlciAoPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHN1Ym1vZHVsZSBoYW5kbGVzIFVSTHMgdGhhdCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWUgeW91IHNwZWNpZnkgd2l0aGluIHRoZSBVUkwgY2FuIGJlCisgICAgICAgICAgICAgICAgZWl0aGVyIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gYSBmaWxlLgorICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlbmFtZSBpcyByZWxhdGl2ZSwgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBzYW1lIHdheQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gaXMgdXNlZCB0byBmaW5kIGV4ZWN1dGFibGVzLgorICAgICAgICAgICAgICAgIEZhaWxpbmcgdGhhdCwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNESVInPjxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgcmVsYXRpdmUgZmlsZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTRElSPC9maWxlbmFtZT4gaXMgZGVwcmVjYXRlZCBhbmQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+IGlzIGxpa2VseSB0byBiZQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLCB5b3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyB2YXJpYWJsZSBpbiBhbnkgbmV3IGNvZGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IGlzIGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBieSB0aGUgdGltZSB0aGUgPGZpbGVuYW1lPmRvd25sb2FkKCk8L2ZpbGVuYW1lPiBtZXRob2QgaXMgY2FsbGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmeSBhIGRpcmVjdG9yeSwgdGhlIGVudGlyZSBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICB1bnBhY2tlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgYSBjb3VwbGUgb2YgZXhhbXBsZSBVUkxzLCB0aGUgZmlyc3QgcmVsYXRpdmUgYW5kCisgICAgICAgICAgICAgICAgdGhlIHNlY29uZCBhYnNvbHV0ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiZmlsZTovL3JlbGF0aXZlZmlsZS5wYXRjaCIKKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vL1VzZXJzL2ljaC92ZXJ5X2ltcG9ydGFudF9zb2Z0d2FyZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naHR0cC1mdHAtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+SFRUUC9GVFAgd2dldCBmZXRjaGVyICg8ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZnRwOi8vPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5odHRwczovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBvYnRhaW5zIGZpbGVzIGZyb20gd2ViIGFuZCBGVFAgc2VydmVycy4KKyAgICAgICAgICAgICAgICBJbnRlcm5hbGx5LCB0aGUgZmV0Y2hlciB1c2VzIHRoZSB3Z2V0IHV0aWxpdHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIGFuZCBwYXJhbWV0ZXJzIHVzZWQgYXJlIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVUQ0hDTURfd2dldDwvZmlsZW5hbWU+IHZhcmlhYmxlLCB3aGljaCBkZWZhdWx0cworICAgICAgICAgICAgICAgIHRvIHNlbnNpYmxlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciBzdXBwb3J0cyBhIHBhcmFtZXRlciAiZG93bmxvYWRmaWxlbmFtZSIgdGhhdAorICAgICAgICAgICAgICAgIGFsbG93cyB0aGUgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIHRvIGJlIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgaXMgdXNlZnVsCisgICAgICAgICAgICAgICAgZm9yIGF2b2lkaW5nIGNvbGxpc2lvbnMgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgZmlsZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZSBVUkxzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vb2UuaGFuZGhlbGRzLm9yZy9ub3RfdGhlcmUuYWFjIgorICAgICBTUkNfVVJJID0gImZ0cDovL29lLmhhbmRoZWxkcy5vcmcvbm90X3RoZXJlX2FzX3dlbGwuYWFjIgorICAgICBTUkNfVVJJID0gImZ0cDovL3lvdUBvZS5oYW5kaGVsZHMub3JnL2hvbWUveW91L3NlY3JldC5wbGFuIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgQmVjYXVzZSBVUkwgcGFyYW1ldGVycyBhcmUgZGVsaW1pdGVkIGJ5IHNlbWktY29sb25zLCB0aGlzIGNhbgorICAgICAgICAgICAgICAgaW50cm9kdWNlIGFtYmlndWl0eSB3aGVuIHBhcnNpbmcgVVJMcyB0aGF0IGFsc28gY29udGFpbiBzZW1pLWNvbG9ucywKKyAgICAgICAgICAgICAgIGZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vYWJjMTIzLm9yZy9naXQvP3A9Z2NjL2djYy5naXQ7YT1zbmFwc2hvdDtoPWE1ZGQ0NyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICBTdWNoIFVSTHMgc2hvdWxkIHNob3VsZCBiZSBtb2RpZmllZCBieSByZXBsYWNpbmcgc2VtaS1jb2xvbnMgd2l0aCAnJmFtcDsnIGNoYXJhY3RlcnM6CisgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0JmFtcDthPXNuYXBzaG90JmFtcDtoPWE1ZGQ0NyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcyB0aGlzIHNob3VsZCB3b3JrLiBUcmVhdGluZyBzZW1pLWNvbG9ucyBhbmQgJyZhbXA7JyBpbiBxdWVyaWVzCisgICAgICAgICAgICAgICAgaWRlbnRpY2FsbHkgaXMgcmVjb21tZW5kZWQgYnkgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gKFczQykuCisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGR1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBVUkwsIHlvdSBtYXkgaGF2ZSB0byBzcGVjaWZ5IHRoZSBuYW1lCisgICAgICAgICAgICAgICAgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSBhcyB3ZWxsOgorICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0JmFtcDthPXNuYXBzaG90JmFtcDtoPWE1ZGQ0Nztkb3dubG9hZGZpbGVuYW1lPW15ZmlsZS5iejIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2N2cy1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5DVlMgZmV0Y2hlciAoPGZpbGVuYW1lPihjdnM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHN1Ym1vZHVsZSBoYW5kbGVzIGNoZWNraW5nIG91dCBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIENWUyB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY29uZmlndXJlIGl0IHVzaW5nIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+RkVUQ0hDTURfY3ZzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y3ZzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtZSBpcyB1c3VhbGx5ICJjdnMiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgdGhlIENWUyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgc3BlY2lhbCB2YWx1ZSBvZiAibm93IiBjYXVzZXMgdGhlIGNoZWNrb3V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB1cGRhdGVkIG9uIGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGxpbmsgbGlua2VuZD0ndmFyLUNWU0RJUic+PGZpbGVuYW1lPkNWU0RJUjwvZmlsZW5hbWU+PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXJlIGEgdGVtcG9yYXJ5IGNoZWNrb3V0IGlzIHNhdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGlzIG9mdGVuIDxmaWxlbmFtZT5ETF9ESVIvY3ZzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Q1ZTX1BST1hZX0hPU1Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgdG8gdXNlIGFzIGEgInByb3h5PSIgcGFyYW1ldGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Q1ZTX1BST1hZX1BPUlQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBvcnQgbnVtYmVyIHRvIHVzZSBhcyBhICJwcm94eXBvcnQ9IiBwYXJhbWV0ZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y3ZzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEFzIHdlbGwgYXMgdGhlIHN0YW5kYXJkIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBVUkwgc3ludGF4LAorICAgICAgICAgICAgICAgIHlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIGZldGNoZXIgd2l0aCB2YXJpb3VzIFVSTCBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibWV0aG9kIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb3RvY29sIG92ZXIgd2hpY2ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1ZTIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgcHJvdG9jb2wgaXMgInBzZXJ2ZXIiLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgIm1ldGhvZCIgaXMgc2V0IHRvICJleHQiLCBCaXRCYWtlIGV4YW1pbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgInJzaCIgcGFyYW1ldGVyIGFuZCBzZXRzIDxmaWxlbmFtZT5DVlNfUlNIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiZGlyIiBmb3IgbG9jYWwgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibW9kdWxlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBtb2R1bGUgdG8gY2hlY2sgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3VwcGx5IHRoaXMgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InRhZyI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlcyB3aGljaCBDVlMgVEFHIHNob3VsZCBiZSB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFRBRyBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJkYXRlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vICJkYXRlIiBpcyBzcGVjaWZpZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ0RBVEUnPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyB1c2VkIHRvIGNoZWNrb3V0IGEgc3BlY2lmaWMgZGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWFsIHZhbHVlIG9mICJub3ciIGNhdXNlcyB0aGUgY2hlY2tvdXQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgb24gZXZlcnkgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibG9jYWxkaXIiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIHJlbmFtZSB0aGUgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlbHksIHlvdSBhcmUgcmVuYW1pbmcgdGhlIG91dHB1dCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdoaWNoIHRoZSBtb2R1bGUgaXMgdW5wYWNrZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIGZvcmNpbmcgdGhlIG1vZHVsZSBpbnRvIGEgc3BlY2lhbAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHJlbGF0aXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1ZTRElSJz48ZmlsZW5hbWU+Q1ZTRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJzaCI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAibWV0aG9kIiBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic2NtZGF0YSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgQ1ZTIG1ldGFkYXRhIHRvIGJlIG1haW50YWluZWQgaW4gdGhlIHRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmZXRjaGVyIGNyZWF0ZXMgd2hlbiBzZXQgdG8gImtlZXAiLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmJhbGwgaXMgZXhwYW5kZWQgaW50byB0aGUgd29yayBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgQ1ZTIG1ldGFkYXRhIGlzIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZnVsbHBhdGgiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIHRoZSByZXN1bHRpbmcgY2hlY2tvdXQgaXMgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgbGV2ZWwsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCBvciBpcyBhdCBkZWVwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vcmVjdXJzZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgZmV0Y2hlciB0byBvbmx5IGNoZWNrb3V0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoIG5vIHJlY3Vyc2UgaW50byBhbnkgc3ViZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icG9ydCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3J0IHRvIHdoaWNoIHRoZSBDVlMgc2VydmVyIGNvbm5lY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlIFVSTHMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImN2czovL0NWU1JPT1Q7bW9kdWxlPW15bW9kdWxlO3RhZz1zb21lLXZlcnNpb247bWV0aG9kPWV4dCIKKyAgICAgU1JDX1VSSSA9ICJjdnM6Ly9DVlNST09UO21vZHVsZT1teW1vZHVsZTtkYXRlPTIwMDYwMTI2O2xvY2FsZGlyPXVzZXRoYXQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3N2bi1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5TdWJ2ZXJzaW9uIChTVk4pIEZldGNoZXIgKDxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGZldGNoZXMgY29kZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIFN1YnZlcnNpb24gc291cmNlIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIHVzZWQgaXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX3N2bjwvZmlsZW5hbWU+LCB3aGljaCBkZWZhdWx0cworICAgICAgICAgICAgICAgIHRvICJzdm4iLgorICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyJ3MgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHNldCBieQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVk5ESVInPjxmaWxlbmFtZT5TVk5ESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdXN1YWxseSA8ZmlsZW5hbWU+RExfRElSL3N2bjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibW9kdWxlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHN2biBtb2R1bGUgdG8gY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGlzIHBhcmFtZXRlciBhcyB0aGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkgZGF0YSB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwcm90b2NvbCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCB0byB1c2UsIHdoaWNoIGRlZmF1bHRzIHRvICJzdm4iLgorICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgb3B0aW9ucyBhcmUgInN2bitzc2giIGFuZCAicnNoIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciAicnNoIiwgdGhlICJyc2giIHBhcmFtZXRlciBpcyBhbHNvIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icmV2Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB0byBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJkYXRlIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHRvIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWMgcmV2aXNpb25zIGFyZSBnZW5lcmFsbHkgbXVjaCBzYWZlciB0byBjaGVja291dAorICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYnkgZGF0ZSBhcyB0aGV5IGRvIG5vdCBpbnZvbHZlIHRpbWV6b25lcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gdGhleSBhcmUgbXVjaCBtb3JlIGRldGVybWluaXN0aWMpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InNjbWRhdGEiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIOKAnC5zdm7igJ0gZGlyZWN0b3JpZXMgdG8gYmUgYXZhaWxhYmxlIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZS10aW1lIHdoZW4gc2V0IHRvICJrZWVwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InRyYW5zcG9ydHVzZXIiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHJlcXVpcmVkLCBzZXRzIHRoZSB1c2VybmFtZSBmb3IgdGhlIHRyYW5zcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFyYW1ldGVyIGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRyYW5zcG9ydCB1c2VybmFtZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdXNlcm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIG1haW4gVVJMLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHN1YnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHR3byBleGFtcGxlcyB1c2luZyBzdm46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gInN2bjovL3N2bi5vZS5oYW5kaGVsZHMub3JnL3N2bjttb2R1bGU9dmlwO3Byb3RvPWh0dHA7cmV2PTY2NyIKKyAgICAgU1JDX1VSSSA9ICJzdm46Ly9zdm4ub2UuaGFuZGhlbGRzLm9yZy9zdm4vO21vZHVsZT1vcGllO3Byb3RvPXN2bitzc2g7ZGF0ZT0yMDA2MDEyNiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2l0LWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkdpdCBGZXRjaGVyICg8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbSB0aGUgR2l0CisgICAgICAgICAgICAgICAgc291cmNlIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIHdvcmtzIGJ5IGNyZWF0aW5nIGEgYmFyZSBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICByZW1vdGUgaW50bworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HSVRESVInPjxmaWxlbmFtZT5HSVRESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdXN1YWxseSA8ZmlsZW5hbWU+RExfRElSL2dpdDI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGJhcmUgY2xvbmUgaXMgdGhlbiBjbG9uZWQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIHVucGFjayBzdGFnZSB3aGVuIGEgc3BlY2lmaWMgdHJlZSBpcyBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGRvbmUgdXNpbmcgYWx0ZXJuYXRlcyBhbmQgYnkgcmVmZXJlbmNlIHRvCisgICAgICAgICAgICAgICAgbWluaW1pemUgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGUgZGF0YSBvbiB0aGUgZGlzayBhbmQKKyAgICAgICAgICAgICAgICBtYWtlIHRoZSB1bnBhY2sgcHJvY2VzcyBmYXN0LgorICAgICAgICAgICAgICAgIFRoZSBleGVjdXRhYmxlIHVzZWQgY2FuIGJlIHNldCB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX2dpdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InByb3RvY29sIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb3RvY29sIHVzZWQgdG8gZmV0Y2ggdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgImdpdCIgd2hlbiBhIGhvc3RuYW1lIGlzIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgaG9zdG5hbWUgaXMgbm90IHNldCwgdGhlIEdpdCBwcm90b2NvbCBpcyAiZmlsZSIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlICJodHRwIiwgImh0dHBzIiwgInNzaCIgYW5kICJyc3luYyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9jaGVja291dCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGxzIHRoZSBmZXRjaGVyIHRvIG5vdCBjaGVja291dCBzb3VyY2UgY29kZSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2tpbmcgd2hlbiBzZXQgdG8gIjEiLgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgVVJMIHdoZXJlIHRoZXJlIGlzIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICByb3V0aW5lIHRvIGNoZWNrb3V0IGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icmViYXNlYWJsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeSBjYW4gYmUgcmViYXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgc2V0IHRoaXMgcGFyYW1ldGVyIHRvICIxIiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25zIGNhbiBiZWNvbWUgZGV0YWNoZWQgZnJvbSBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHNvdXJjZSBtaXJyb3IgdGFyYmFsbCBpcyBkb25lIHBlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24sIHdoaWNoIGhhcyBhIGxvc3Mgb2YgZWZmaWNpZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYmFzaW5nIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeSBjb3VsZCBjYXVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgcmV2aXNpb24gdG8gZGlzYXBwZWFyIGZyb20gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiByZW1pbmRzIHRoZSBmZXRjaGVyIHRvIHByZXNlcnZlIHRoZSBsb2NhbCBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FyZWZ1bGx5IGZvciBmdXR1cmUgdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub2JyYW5jaCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGxzIHRoZSBmZXRjaGVyIHRvIG5vdCBjaGVjayB0aGUgU0hBIHZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnJhbmNoIHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZSB0aGF0IHJlZmVycyB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1pdCB0aGF0IGlzIHZhbGlkIGZvciBhIHRhZyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImJhcmVjbG9uZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGxzIHRoZSBmZXRjaGVyIHRvIGNsb25lIGEgYmFyZSBjbG9uZSBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gZGlyZWN0b3J5IHdpdGhvdXQgY2hlY2tpbmcgb3V0IGEgd29ya2luZyB0cmVlLgorICAgICAgICAgICAgICAgICAgICAgICAgT25seSB0aGUgcmF3IEdpdCBtZXRhZGF0YSBpcyBwcm92aWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGltcGxpZXMgdGhlICJub2NoZWNrb3V0IiBwYXJhbWV0ZXIgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJicmFuY2giOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnJhbmNoKGVzKSBvZiB0aGUgR2l0IHRyZWUgdG8gY2xvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB1bnNldCwgdGhpcyBpcyBhc3N1bWVkIHRvIGJlICJtYXN0ZXIiLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBicmFuY2ggcGFyYW1ldGVycyBtdWNoIG1hdGNoIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyZXYiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gdG8gdXNlIGZvciB0aGUgY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0YWciOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB0YWcgdG8gdXNlIGZvciB0aGUgY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBjb3JyZWN0bHkgcmVzb2x2ZSB0YWdzLCBCaXRCYWtlIG11c3QgYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGF0IHJlYXNvbiwgdGFncyBhcmUgb2Z0ZW4gbm90IHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBmYXIgYXMgR2l0IGlzIGNvbmNlcm5lZCwgdGhlICJ0YWciIHBhcmFtZXRlciBiZWhhdmVzCisgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyB0aGUgInJldiIgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InN1YnBhdGgiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdHMgdGhlIGNoZWNrb3V0IHRvIGEgc3BlY2lmaWMgc3VicGF0aCBvZiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSB3aG9sZSB0cmVlIGlzIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImRlc3RzdWZmaXgiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcGF0aCBpbiB3aGljaCB0byBwbGFjZSB0aGUgY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgcGF0aCBpcyA8ZmlsZW5hbWU+Z2l0LzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIFVSTHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5vZS5oYW5kaGVsZHMub3JnL2dpdC92aXAuZ2l0O3RhZz12ZXJzaW9uLTEiCisgICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lm9lLmhhbmRoZWxkcy5vcmcvZ2l0L3ZpcC5naXQ7cHJvdG9jb2w9aHR0cCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2l0c20tZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+R2l0IFN1Ym1vZHVsZSBGZXRjaGVyICg8ZmlsZW5hbWU+Z2l0c206Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgc3VibW9kdWxlIGluaGVyaXRzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0LWZldGNoZXInPkdpdCBmZXRjaGVyPC9saW5rPiBhbmQgZXh0ZW5kcworICAgICAgICAgICAgICAgIHRoYXQgZmV0Y2hlcidzIGJlaGF2aW9yIGJ5IGZldGNoaW5nIGEgcmVwb3NpdG9yeSdzIHN1Ym1vZHVsZXMuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgcGFzc2VkIHRvIHRoZSBHaXQgZmV0Y2hlciBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dpdC1mZXRjaGVyJz5HaXQgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+KTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPk5vdGVzIGFuZCBXYXJuaW5nczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2xlYW4gYSByZWNpcGUgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgJzxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAnPGZpbGVuYW1lPmdpdHNtOi8vPC9maWxlbmFtZT4nIFVSTHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBHaXQgU3VibW9kdWxlcyBmZXRjaGVyIGlzIG5vdCBhIGNvbXBsZXRlIGZldGNoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgaGFzIGtub3duIGlzc3VlcyB3aGVyZSBpdCBkb2VzIG5vdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgc291cmNlIG1pcnJvcmluZyBpbmZyYXN0cnVjdHVyZSBwcm9wZXJseS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjbGVhcmNhc2UtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+Q2xlYXJDYXNlIEZldGNoZXIgKDxmaWxlbmFtZT5jY3JjOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbSBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYXRpb25hbF9DbGVhckNhc2UnPkNsZWFyQ2FzZTwvdWxpbms+CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHRoaXMgZmV0Y2hlciwgbWFrZSBzdXJlIHlvdXIgcmVjaXBlIGhhcyBwcm9wZXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4gc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJjY3JjOi8vY2MuZXhhbXBsZS5vcmcvY2NyYzt2b2I9L2V4YW1wbGVfdm9iO21vZHVsZT0vZXhhbXBsZV9tb2R1bGUiCisgICAgIFNSQ1JFViA9ICJFWEFNUExFX0NMRUFSQ0FTRV9UQUciCisgICAgIFBWID0gIiR7QGQuZ2V0VmFyKCJTUkNSRVYiLCBGYWxzZSkucmVwbGFjZSgiLyIsICIrIil9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciB1c2VzIHRoZSA8ZmlsZW5hbWU+cmNsZWFydG9vbDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsZWFydG9vbDwvZmlsZW5hbWU+IHJlbW90ZSBjbGllbnQsIGRlcGVuZGluZyBvbgorICAgICAgICAgICAgICAgIHdoaWNoIG9uZSBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgb3B0aW9ucyBmb3IgdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kaW5nICIvIiBjaGFyYWN0ZXIsIG9mIHRoZSBDbGVhckNhc2UgVk9CLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGUsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmRpbmcgIi8iIGNoYXJhY3RlciwgaW4gdGhlIHNlbGVjdGVkIFZPQi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT52b2I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgYXJlIGNvbWJpbmVkIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmxvYWQ8L2ZpbGVuYW1lPiBydWxlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZpZXcgY29uZmlnIHNwZWMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIDxmaWxlbmFtZT52b2I8L2ZpbGVuYW1lPiBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IHZhbHVlcyBmcm9tIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmluZyB0aG9zZSB2YWx1ZXMgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbG9hZCAvZXhhbXBsZV92b2IvZXhhbXBsZV9tb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cHJvdG88L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByb3RvY29sLCB3aGljaCBjYW4gYmUgZWl0aGVyIDxmaWxlbmFtZT5odHRwPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBmZXRjaGVyIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIHNwZWNpZmljYXRpb24uCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhpcyBzcGVjaWZpY2F0aW9uIHdyaXR0ZW4gdG8gYW4gYXJlYSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LAorICAgICAgICAgICAgICAgIHVzZSB0aGUgPGZpbGVuYW1lPkNDQVNFX0NVU1RPTV9DT05GSUdfU1BFQzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUgdG8gZGVmaW5lIHdoZXJlIHRoZSBzcGVjaWZpY2F0aW9uIGlzIHdyaXR0ZW4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gbG9zZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaWYgeW91CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IGlzIHN0aWxsIHVzZWQgdG8gbGFiZWwgdGhlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUgYWZ0ZXIgYSBmZXRjaCBldmVuIHRob3VnaCBpdCBkb2VzIG5vdCBkZWZpbmUgd2hhdCBpcworICAgICAgICAgICAgICAgICAgICBmZXRjaGVkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3RoZXIgYmVoYXZpb3JzIHdvcnRoIG1lbnRpb25pbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyA8ZmlsZW5hbWU+Y2xlYXJ0b29sPC9maWxlbmFtZT4sIHRoZSBsb2dpbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsZWFydG9vbDwvZmlsZW5hbWU+IGlzIGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2dpbiByZXF1aXJlIG5vIHNwZWNpYWwgc3RlcHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIDxmaWxlbmFtZT5yY2xlYXJ0b29sPC9maWxlbmFtZT4gd2l0aCBhdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VycywgYW4gInJjbGVhcnRvb2wgbG9naW4iIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgdGhlIGZldGNoZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvdGhlci1mZXRjaGVycyc+CisgICAgICAgICAgICA8dGl0bGU+T3RoZXIgRmV0Y2hlcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGZXRjaCBzdWJtb2R1bGVzIGFsc28gZXhpc3QgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyICg8ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9yY2UgKDxmaWxlbmFtZT5wNDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVzIHVzaW5nIEdpdCBBbm5leCAoPGZpbGVuYW1lPmdpdGFubmV4Oi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIEZUUCAoPGZpbGVuYW1lPnNmdHA6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWN1cmUgU2hlbGwgKDxmaWxlbmFtZT5zc2g6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBvICg8ZmlsZW5hbWU+cmVwbzovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9TQyAoPGZpbGVuYW1lPm9zYzovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1lcmN1cmlhbCAoPGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBObyBkb2N1bWVudGF0aW9uIGN1cnJlbnRseSBleGlzdHMgZm9yIHRoZXNlIGxlc3NlciB1c2VkCisgICAgICAgICAgICAgICAgZmV0Y2hlciBzdWJtb2R1bGVzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBmaW5kIHRoZSBjb2RlIGhlbHBmdWwgYW5kIHJlYWRhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2F1dG8tcmV2aXNpb25zJz4KKyAgICAgICAgPHRpdGxlPkF1dG8gUmV2aXNpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdlIG5lZWQgdG8gZG9jdW1lbnQgPGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNSRVZfRk9STUFUPC9maWxlbmFtZT4gaGVyZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjI4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCkBAIC0wLDAgKzEsNTA2IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGFwcGVuZGl4IGlkPSdoZWxsby13b3JsZC1leGFtcGxlJz4KKyAgICA8dGl0bGU+SGVsbG8gV29ybGQgRXhhbXBsZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0nYml0YmFrZS1oZWxsby13b3JsZCc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlIEhlbGxvIFdvcmxkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCBleGFtcGxlIGNvbW1vbmx5IHVzZWQgdG8gZGVtb25zdHJhdGUgYW55IG5ldworICAgICAgICAgICAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb3IgdG9vbCBpcyB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hlbGxvX3dvcmxkX3Byb2dyYW0iPkhlbGxvIFdvcmxkPC91bGluaz4iCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICAgICAgVGhpcyBhcHBlbmRpeCBkZW1vbnN0cmF0ZXMsIGluIHR1dG9yaWFsIGZvcm0sIEhlbGxvCisgICAgICAgICAgICBXb3JsZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQml0QmFrZS4KKyAgICAgICAgICAgIFRoZSB0dXRvcmlhbCBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBhIG5ldyBwcm9qZWN0CisgICAgICAgICAgICBhbmQgdGhlIGFwcGxpY2FibGUgbWV0YWRhdGEgZmlsZXMgbmVjZXNzYXJ5IHRvIGFsbG93CisgICAgICAgICAgICBCaXRCYWtlIHRvIGJ1aWxkIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2V4YW1wbGUtb2J0YWluaW5nLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+T2J0YWluaW5nIEJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29idGFpbmluZy1iaXRiYWtlJz5PYnRhaW5pbmcgQml0QmFrZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb2J0YWluIEJpdEJha2UuCisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBzb3VyY2UgY29kZSBvbiB5b3VyIG1hY2hpbmUsIHRoZSBCaXRCYWtlIGRpcmVjdG9yeQorICAgICAgICAgICAgYXBwZWFycyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1hbAorICAgICB0b3RhbCAxMDAKKyAgICAgZHJ3eHJ3eHIteC4gOSB3bWF0IHdtYXQgIDQwOTYgSmFuIDMxIDEzOjQ0IC4KKyAgICAgZHJ3eHJ3eHIteC4gMyB3bWF0IHdtYXQgIDQwOTYgRmViICA0IDEwOjQ1IC4uCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgMzY1IE5vdiAyNiAwNDo1NSBBVVRIT1JTCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBiaW4KKyAgICAgZHJ3eHJ3eHIteC4gNCB3bWF0IHdtYXQgIDQwOTYgSmFuIDMxIDEzOjQ0IGJ1aWxkCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0IDE2NTAxIE5vdiAyNiAwNDo1NSBDaGFuZ2VMb2cKKyAgICAgZHJ3eHJ3eHIteC4gMiB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGNsYXNzZXMKKyAgICAgZHJ3eHJ3eHIteC4gMiB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGNvbmYKKyAgICAgZHJ3eHJ3eHIteC4gMyB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGNvbnRyaWIKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgMTc5ODcgTm92IDI2IDA0OjU1IENPUFlJTkcKKyAgICAgZHJ3eHJ3eHIteC4gMyB3bWF0IHdtYXQgIDQwOTYgTm92IDI2IDA0OjU1IGRvYworICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgICA2OSBOb3YgMjYgMDQ6NTUgLmdpdGlnbm9yZQorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDg0OSBOb3YgMjYgMDQ6NTUgSEVBREVSCisgICAgIGRyd3hyd3hyLXguIDUgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCBsaWIKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAxOTUgTm92IDI2IDA0OjU1IE1BTklGRVNULmluCisgICAgIC1yd3hyd3hyLXguIDEgd21hdCB3bWF0ICAzMTk1IEphbiAzMSAxMTo1NyBzZXR1cC5weQorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgMjg4NyBOb3YgMjYgMDQ6NTUgVE9ETworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3Ugc2hvdWxkIGhhdmUgQml0QmFrZSBjbG9uZWQgdG8KKyAgICAgICAgICAgIGEgZGlyZWN0b3J5IHRoYXQgbWF0Y2hlcyB0aGUgcHJldmlvdXMgbGlzdGluZyBleGNlcHQgZm9yCisgICAgICAgICAgICBkYXRlcyBhbmQgdXNlciBuYW1lcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLXRoZS1iaXRiYWtlLWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEJpdEJha2UgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlyc3QsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB5b3UgY2FuIHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgU2V0IHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8gd2hlcmUgeW91ciBsb2NhbCBCaXRCYWtlCisgICAgICAgICAgICBmaWxlcyBhcmUgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9iaW4vYml0YmFrZSAtLXZlcnNpb24KKyAgICAgQml0QmFrZSBCdWlsZCBUb29sIENvcmUgdmVyc2lvbiAxLjIzLjAsIGJpdGJha2UgdmVyc2lvbiAxLjIzLjAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBjb25zb2xlIG91dHB1dCB0ZWxscyB5b3Ugd2hhdCB2ZXJzaW9uIHlvdSBhcmUgcnVubmluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlY29tbWVuZGVkIG1ldGhvZCB0byBydW4gQml0QmFrZSBpcyBmcm9tIGEgZGlyZWN0b3J5IG9mIHlvdXIKKyAgICAgICAgICAgIGNob2ljZS4KKyAgICAgICAgICAgIFRvIGJlIGFibGUgdG8gcnVuIEJpdEJha2UgZnJvbSBhbnkgZGlyZWN0b3J5LCB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgICAgICAgICBleGVjdXRhYmxlIGJpbmFyeSB0byB5b3VyIGJpbmFyeSB0byB5b3VyIHNoZWxsJ3MgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBGaXJzdCwgbG9vayBhdCB5b3VyIGN1cnJlbnQgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBlY2hvICRQQVRICisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOZXh0LCBhZGQgdGhlIGRpcmVjdG9yeSBsb2NhdGlvbiBmb3IgdGhlIEJpdEJha2UgYmluYXJ5IHRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFkZHMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvYmluPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICB0byB0aGUgZnJvbnQgb2YgdGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZXhwb3J0IFBBVEg9L2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvYmluOiRQQVRICisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGVudGVyIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGlsZSB3b3JraW5nIGZyb20gYW55IGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtaGVsbG8td29ybGQtZXhhbXBsZSc+CisgICAgICAgIDx0aXRsZT5UaGUgSGVsbG8gV29ybGQgRXhhbXBsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3ZlcmFsbCBnb2FsIG9mIHRoaXMgZXhlcmNpc2UgaXMgdG8gYnVpbGQgYQorICAgICAgICAgICAgY29tcGxldGUgIkhlbGxvIFdvcmxkIiBleGFtcGxlIHV0aWxpemluZyB0YXNrIGFuZCBsYXllcgorICAgICAgICAgICAgY29uY2VwdHMuCisgICAgICAgICAgICBCZWNhdXNlIHRoaXMgaXMgaG93IG1vZGVybiBwcm9qZWN0cyBzdWNoIGFzIE9wZW5FbWJlZGRlZCBhbmQKKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHV0aWxpemUgQml0QmFrZSwgdGhlIGV4YW1wbGUKKyAgICAgICAgICAgIHByb3ZpZGVzIGFuIGV4Y2VsbGVudCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZworICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgdG8gdXNlIEJpdEJha2UgdG8gYnVpbGQgdGFyZ2V0cywKKyAgICAgICAgICAgIHRoZSBleGFtcGxlIHN0YXJ0cyB3aXRoIG5vdGhpbmcgYnV0IHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb21tYW5kLCB3aGljaCBjYXVzZXMgQml0QmFrZSB0byBmYWlsIGFuZCByZXBvcnQgcHJvYmxlbXMuCisgICAgICAgICAgICBUaGUgZXhhbXBsZSBwcm9ncmVzc2VzIGJ5IGFkZGluZyBwaWVjZXMgdG8gdGhlIGJ1aWxkIHRvCisgICAgICAgICAgICBldmVudHVhbGx5IGNvbmNsdWRlIHdpdGggYSB3b3JraW5nLCBtaW5pbWFsICJIZWxsbyBXb3JsZCIKKyAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoaWxlIGV2ZXJ5IGF0dGVtcHQgaXMgbWFkZSB0byBleHBsYWluIHdoYXQgaXMgaGFwcGVuaW5nIGR1cmluZworICAgICAgICAgICAgdGhlIGV4YW1wbGUsIHRoZSBkZXNjcmlwdGlvbnMgY2Fubm90IGNvdmVyIGV2ZXJ5dGhpbmcuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZnVydGhlciBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoaXMgbWFudWFsLgorICAgICAgICAgICAgQWxzbywgeW91IGNhbiBhY3RpdmVseSBwYXJ0aWNpcGF0ZSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL21haWxtYW4vbGlzdGluZm8vYml0YmFrZS1kZXZlbCc+PC91bGluaz4KKyAgICAgICAgICAgIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IHRoZSBCaXRCYWtlIGJ1aWxkIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSB3YXMgaW5zcGlyZWQgYnkgYW5kIGRyZXcgaGVhdmlseSBmcm9tIHRoZXNlIHNvdXJjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3lvY3RvQHlvY3RvcHJvamVjdC5vcmcvbXNnMDkzNzkuaHRtbCI+TWFpbGluZyBMaXN0IHBvc3QgLSBUaGUgQml0QmFrZSBlcXVpdmFsZW50IG9mICJIZWxsbywgV29ybGQhIjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8iPkhhbWJlZGRlZCBMaW51eCBibG9nIHBvc3QgLSBGcm9tIEJpdGJha2UgSGVsbG8gV29ybGQgdG8gYW4gSW1hZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBzdGF0ZWQgZWFybGllciwgdGhlIGdvYWwgb2YgdGhpcyBleGFtcGxlCisgICAgICAgICAgICBpcyB0byBldmVudHVhbGx5IGNvbXBpbGUgIkhlbGxvIFdvcmxkIi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHVua25vd24gd2hhdCBCaXRCYWtlIG5lZWRzIGFuZCB3aGF0IHlvdSBoYXZlCisgICAgICAgICAgICB0byBwcm92aWRlIGluIG9yZGVyIHRvIGFjaGlldmUgdGhhdCBnb2FsLgorICAgICAgICAgICAgUmVjYWxsIHRoYXQgQml0QmFrZSB1dGlsaXplcyB0aHJlZSB0eXBlcyBvZiBtZXRhZGF0YSBmaWxlczoKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4sIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVjaXBlcyc+UmVjaXBlczwvbGluaz4uCisgICAgICAgICAgICBCdXQgd2hlcmUgZG8gdGhleSBnbz8KKyAgICAgICAgICAgIEhvdyBkb2VzIEJpdEJha2UgZmluZCB0aGVtPworICAgICAgICAgICAgQml0QmFrZSdzIGVycm9yIG1lc3NhZ2luZyBoZWxwcyB5b3UgYW5zd2VyIHRoZXNlIHR5cGVzIG9mIHF1ZXN0aW9ucworICAgICAgICAgICAgYW5kIGhlbHBzIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXMgZ29pbmcgb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgY29tcGxldGUgIkhlbGxvIFdvcmxkIiBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBQcm9qZWN0IERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZpcnN0LCBzZXQgdXAgYSBkaXJlY3RvcnkgZm9yIHRoZSAiSGVsbG8gV29ybGQiIHByb2plY3QuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBob3cgeW91IGNhbiBkbyBzbyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciB+L2hlbGxvCisgICAgICQgY2Qgfi9oZWxsbworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBCaXRCYWtlIHdpbGwgdXNlIHRvIGRvIGFsbCBvZgorICAgICAgICAgICAgICAgIGl0cyB3b3JrLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgZGlyZWN0b3J5IHRvIGtlZXAgYWxsIHRoZSBtZXRhZmlsZXMgbmVlZGVkCisgICAgICAgICAgICAgICAgYnkgQml0QmFrZS4KKyAgICAgICAgICAgICAgICBIYXZpbmcgYSBwcm9qZWN0IGRpcmVjdG9yeSBpcyBhIGdvb2Qgd2F5IHRvIGlzb2xhdGUgeW91cgorICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgbm90aGluZyBidXQgYSBwcm9qZWN0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBSdW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc2VlIHdoYXQKKyAgICAgICAgICAgICAgICBpdCBkb2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlCisgICAgIFRoZSBCQlBBVEggdmFyaWFibGUgaXMgbm90IHNldCBhbmQgYml0YmFrZSBkaWQgbm90CisgICAgIGZpbmQgYSBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZSBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uCisgICAgIE1heWJlIHlvdSBhY2NpZGVudGFsbHkgaW52b2tlZCBiaXRiYWtlIGZyb20gdGhlIHdyb25nIGRpcmVjdG9yeT8KKyAgICAgREVCVUc6IFJlbW92ZWQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQ6CisgICAgIEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCwgWERHX0NVUlJFTlRfREVTS1RPUCwKKyAgICAgR05PTUVfS0VZUklOR19DT05UUk9MLCBESVNQTEFZLCBTU0hfQUdFTlRfUElELCBMQU5HLCBub19wcm94eSwKKyAgICAgWERHX1NFU1NJT05fUEFUSCwgWEFVVEhPUklUWSwgU0VTU0lPTl9NQU5BR0VSLCBTSExWTCwKKyAgICAgTUFOREFUT1JZX1BBVEgsIENPTVBJWl9DT05GSUdfUFJPRklMRSwgV0lORE9XSUQsIEVESVRPUiwKKyAgICAgR1BHX0FHRU5UX0lORk8sIFNTSF9BVVRIX1NPQ0ssIEdETVNFU1NJT04sIEdOT01FX0tFWVJJTkdfUElELAorICAgICBYREdfU0VBVF9QQVRILCBYREdfQ09ORklHX0RJUlMsIExFU1NPUEVOLCBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MsCisgICAgIF8sIFhER19TRVNTSU9OX0NPT0tJRSwgREVTS1RPUF9TRVNTSU9OLCBMRVNTQ0xPU0UsIERFRkFVTFRTX1BBVEgsCisgICAgIFVCVU5UVV9NRU5VUFJPWFksIE9MRFBXRCwgWERHX0RBVEFfRElSUywgQ09MT1JURVJNLCBMU19DT0xPUlMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoaXMgb3V0cHV0IGlzIHNwZWNpZmljIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBkaXJlY3RseSByZWxldmFudCB0byBCaXRCYWtlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSB2ZXJ5IGZpcnN0IG1lc3NhZ2UgcmVnYXJkaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBpcyByZWxldmFudC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIEJpdEJha2UsIGl0IGJlZ2lucyBsb29raW5nIGZvciBtZXRhZGF0YSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgd2hhdCB0ZWxscyBCaXRCYWtlIHdoZXJlIHRvIGxvb2sgZm9yIHRob3NlIGZpbGVzLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0IGFuZCB5b3UgbmVlZCB0byBzZXQgaXQuCisgICAgICAgICAgICAgICAgV2l0aG91dCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4sIEJpdGJha2UgY2Fubm90CisgICAgICAgICAgICAgICAgZmluZCBhbnkgY29uZmlndXJhdGlvbiBmaWxlcyAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgb3IgcmVjaXBlIGZpbGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gY2Fubm90IGZpbmQgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldHRpbmcgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IGNhbiBzZXQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgbWFubmVyIHRoYXQgeW91IHNldCA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZWFybGllciBpbiB0aGUgYXBwZW5kaXguCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZWFsaXplLCB0aG91Z2gsIHRoYXQgaXQgaXMgbXVjaCBtb3JlIGZsZXhpYmxlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdXAgaW4gYSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBmb3IgZWFjaCBwcm9qZWN0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gcm9tIHlvdXIgc2hlbGwsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gc2V0IGFuZAorICAgICAgICAgICAgICAgIGV4cG9ydCB0aGUgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBCQlBBVEg9IjxyZXBsYWNlYWJsZT5wcm9qZWN0ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4iCisgICAgICQgZXhwb3J0IEJCUEFUSAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2UgeW91ciBhY3R1YWwgcHJvamVjdCBkaXJlY3RvcnkgaW4gdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoYXQgZGlyZWN0b3J5IHRvIGZpbmQgdGhlIG1ldGFkYXRhIGl0IG5lZWRzIGZvcgorICAgICAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHlvdXIgcHJvamVjdCBkaXJlY3RvcnksIGRvIG5vdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIHRpbGRlICgifiIpIGNoYXJhY3RlciBhcyBCaXRCYWtlIGRvZXMgbm90IGV4cGFuZCB0aGF0IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgc2hlbGwgd291bGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBkZWZpbmVkLCBydW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlCisgICAgIEVSUk9SOiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAorICAgICAgICAgcmV0dXJuIGZ1bmMoZm4sICphcmdzKQorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNzMsIGluIHBhcnNlX2NvbmZpZ19maWxlCisgICAgICAgICByZXR1cm4gYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlKQorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weSIsIGxpbmUgOTksIGluIGhhbmRsZQorICAgICAgICAgcmV0dXJuIGhbJ2hhbmRsZSddKGZuLCBkYXRhLCBpbmNsdWRlKQorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTIwLCBpbiBoYW5kbGUKKyAgICAgICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZGF0YSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkiLCBsaW5lIDExNywgaW4gcmVzb2x2ZV9maWxlCisgICAgICAgICByYWlzZSBJT0Vycm9yKCJmaWxlICVzIG5vdCBmb3VuZCBpbiAlcyIgJSAoZm4sIGJicGF0aCkpCisgICAgIElPRXJyb3I6IGZpbGUgY29uZi9iaXRiYWtlLmNvbmYgbm90IGZvdW5kIGluIC9ob21lL3Njb3R0LWxlbm92by9oZWxsbworCisgICAgIEVSUk9SOiBVbmFibGUgdG8gcGFyc2UgY29uZi9iaXRiYWtlLmNvbmY6IGZpbGUgY29uZi9iaXRiYWtlLmNvbmYgbm90IGZvdW5kIGluIC9ob21lL3Njb3R0LWxlbm92by9oZWxsbworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHNhbXBsZSBvdXRwdXQgc2hvd3MgdGhhdCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHRoZSBmaXJzdCB0aGluZyBCaXRCYWtlIG11c3QgZmluZCBpbiBvcmRlcgorICAgICAgICAgICAgICAgIHRvIGJ1aWxkIGEgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEFuZCwgc2luY2UgdGhlIHByb2plY3QgZGlyZWN0b3J5IGZvciB0aGlzIGV4YW1wbGUgaXMKKyAgICAgICAgICAgICAgICBlbXB0eSwgeW91IG5lZWQgdG8gcHJvdmlkZSBhIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gaW5jbHVkZXMgYSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgZm9yIG1ldGFkYXRhIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB5b3UgbmVlZCB0byBjcmVhdGUgdGhlIGZpbGUgaW4geW91ciBwcm9qZWN0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgc29tZSBrZXkgQml0QmFrZSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBzZWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyNhbi1vdmVydmlldy1vZi1iaXRiYWtlY29uZic+PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGcm9tIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHVzZQorICAgICAgICAgICAgICAgIHNvbWUgZWRpdG9yIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc28gdGhhdCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVE1QRElSICA9ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1UT1BESVInPlRPUERJUjwvbGluaz59L3RtcCIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNBQ0hFJz5DQUNIRTwvbGluaz4gICA9ICIke1RNUERJUn0vY2FjaGUiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+U1RBTVA8L2xpbms+ICAgPSAiJHtUTVBESVJ9L3N0YW1wcyIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+ICAgICAgID0gIiR7VE1QRElSfS93b3JrIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+QjwvbGluaz4gICAgICAgPSAiJHtUTVBESVJ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIGVzdGFibGlzaGVzIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgdGhhdCBCaXRCYWtlIHVzZXMgZm9yIGJ1aWxkIG91dHB1dCBhbmQgaW50ZXJtZWRpYXRlIGZpbGVzIChvdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gdGhlIGNhY2hlZCBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NldHNjZW5lJz5TZXRzY2VuZTwvbGluaz4gcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBIZXJlLCB0aGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGVsbG8vdG1wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWx3YXlzIHNhZmVseSBkZWxldGUgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gcmVidWlsZCBhIEJpdEJha2UgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgZm9yIHlvdQorICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBydW4gQml0QmFrZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBvdGhlciB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGlzCisgICAgICAgICAgICAgICAgZXhhbXBsZSwgY2xpY2sgb24gdGhlIGxpbmtzIHRvIHRha2UgeW91IHRvIHRoZSBkZWZpbml0aW9ucyBpbgorICAgICAgICAgICAgICAgIHRoZSBnbG9zc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgZXhpc3RzLCB5b3UgY2FuIHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYWdhaW46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorJCBiaXRiYWtlCitFUlJPUjogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTYzLCBpbiB3cmFwcGVkCisgICAgcmV0dXJuIGZ1bmMoZm4sICphcmdzKQorICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTc3LCBpbiBfaW5oZXJpdAorICAgIGJiLnBhcnNlLkJCSGFuZGxlci5pbmhlcml0KGJiY2xhc3MsICJjb25maWd1cmF0aW9uIElOSEVSSVRzIiwgMCwgZGF0YSkKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weSIsIGxpbmUgOTIsIGluIGluaGVyaXQKKyAgICBpbmNsdWRlKGZuLCBmaWxlLCBsaW5lbm8sIGQsICJpbmhlcml0IikKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5IiwgbGluZSAxMDAsIGluIGluY2x1ZGUKKyAgICByYWlzZSBQYXJzZUVycm9yKCJDb3VsZCBub3QgJShlcnJvcl9vdXQpcyBmaWxlICUoZm4pcyIgJSB2YXJzKCksIG9sZGZuLCBsaW5lbm8pCitQYXJzZUVycm9yOiBQYXJzZUVycm9yIGluIGNvbmZpZ3VyYXRpb24gSU5IRVJJVHM6IENvdWxkIG5vdCBpbmhlcml0IGZpbGUgY2xhc3Nlcy9iYXNlLmJiY2xhc3MKKworRVJST1I6IFVuYWJsZSB0byBwYXJzZSBiYXNlOiBQYXJzZUVycm9yIGluIGNvbmZpZ3VyYXRpb24gSU5IRVJJVHM6IENvdWxkIG5vdCBpbmhlcml0IGZpbGUgY2xhc3Nlcy9iYXNlLmJiY2xhc3MKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHNhbXBsZSBvdXRwdXQsIEJpdEJha2UgY291bGQgbm90IGZpbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgdGhhdCBmaWxlIG5leHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIGNsYXNzIGZpbGVzIHRvIHByb3ZpZGUgY29tbW9uIGNvZGUgYW5kIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgVGhlIG1pbmltYWxseSByZXF1aXJlZCBjbGFzcyBmb3IgQml0QmFrZSBpcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+IGNsYXNzIGlzIGltcGxpY2l0bHkgaW5oZXJpdGVkIGJ5CisgICAgICAgICAgICAgICAgZXZlcnkgcmVjaXBlLgorICAgICAgICAgICAgICAgIEJpdEJha2UgbG9va3MgZm9yIHRoZSBjbGFzcyBpbiB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCAoaS5lIDxmaWxlbmFtZT5oZWxsby9jbGFzc2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiB0aGlzIGV4YW1wbGUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5DcmVhdGUgdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FL2hlbGxvCisgICAgICQgbWtkaXIgY2xhc3NlcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgdGhlbgorICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgYnkgaW5zZXJ0aW5nCisgICAgICAgICAgICAgICAgdGhpcyBzaW5nbGUgbGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFkZHRhc2sgYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgdGFzayB0aGF0IEJpdEJha2UgcnVucyBpcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgIFRoaXMgaXMgYWxsIHRoZSBleGFtcGxlIG5lZWRzIGluIG9yZGVyIHRvIGJ1aWxkIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBjYW4gaGF2ZSBtdWNoCisgICAgICAgICAgICAgICAgbW9yZSBkZXBlbmRpbmcgb24gd2hpY2ggYnVpbGQgZW52aXJvbm1lbnRzIEJpdEJha2UgaXMKKyAgICAgICAgICAgICAgICBzdXBwb3J0aW5nLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGxvb2sgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyN0YXNrcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGV4aXN0cywgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlCisgICAgIE5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQml0QmFrZSBpcyBmaW5hbGx5IHJlcG9ydGluZyBubyBlcnJvcnMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBzZWUgdGhhdCBpdCByZWFsbHkgZG9lcyBub3QgaGF2ZSBhbnl0aGluZworICAgICAgICAgICAgICAgIHRvIGRvLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIHJlY2lwZSB0aGF0IGdpdmVzIEJpdEJha2Ugc29tZXRoaW5nIHRvIGRvLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyBhIExheWVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV2hpbGUgaXQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgZm9yIHN1Y2ggYSBzbWFsbCBleGFtcGxlLAorICAgICAgICAgICAgICAgIGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gY3JlYXRlIGEgbGF5ZXIgaW4gd2hpY2ggdG8ga2VlcCB5b3VyCisgICAgICAgICAgICAgICAgY29kZSBzZXBhcmF0ZSBmcm9tIHRoZSBnZW5lcmFsIG1ldGFkYXRhIHVzZWQgYnkgQml0QmFrZS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGlzIGV4YW1wbGUgY3JlYXRlcyBhbmQgdXNlcyBhIGxheWVyIGNhbGxlZCAibXlsYXllciIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGFkZGluZyBhIGxheWVyIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvI2FkZGluZy1hbi1leGFtcGxlLWxheWVyJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPk1pbmltYWxseSwgeW91IG5lZWQgYSByZWNpcGUgZmlsZSBhbmQgYSBsYXllciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBpbiB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgbmVlZHMgdG8gYmUgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW5zaWRlIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICBVc2UgdGhlc2UgY29tbWFuZHMgdG8gc2V0IHVwIHRoZSBsYXllciBhbmQgdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FCisgICAgICQgbWtkaXIgbXlsYXllcgorICAgICAkIGNkIG15bGF5ZXIKKyAgICAgJCBta2RpciBjb25mCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCBjcmVhdGUgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJQQVRIIC49ICI6JHs8bGluayBsaW5rZW5kPSd2YXItTEFZRVJESVInPkxBWUVSRElSPC9saW5rPn0iCisKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPkJCRklMRVM8L2xpbms+ICs9ICIke0xBWUVSRElSfS8qLmJiIgorCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPkJCRklMRV9DT0xMRUNUSU9OUzwvbGluaz4gKz0gIm15bGF5ZXIiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+QkJGSUxFX1BBVFRFUk5fbXlsYXllcjwvbGluaz4gOj0gIl4ke0xBWUVSRElSfS8iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGNsaWNrIHRoZSBsaW5rcworICAgICAgICAgICAgICAgIHRvIGdvIHRvIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZ2xvc3NhcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPllvdSBuZWVkIHRvIGNyZWF0ZSB0aGUgcmVjaXBlIGZpbGUgbmV4dC4KKyAgICAgICAgICAgICAgICBJbnNpZGUgeW91ciBsYXllciBhdCB0aGUgdG9wLWxldmVsLCB1c2UgYW4gZWRpdG9yIGFuZCBjcmVhdGUKKyAgICAgICAgICAgICAgICBhIHJlY2lwZSBmaWxlIG5hbWVkIDxmaWxlbmFtZT5wcmludGhlbGxvLmJiPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgIGhhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFU0NSSVBUSU9OJz5ERVNDUklQVElPTjwvbGluaz4gPSAiUHJpbnRzIEhlbGxvIFdvcmxkIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPiA9ICdwcmludGhlbGxvJworICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPlBWPC9saW5rPiA9ICcxJworCisgICAgIHB5dGhvbiBkb19idWlsZCgpIHsKKyAgICAgICAgYmIucGxhaW4oIioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgKiIpOworICAgICAgICBiYi5wbGFpbigiKiAgSGVsbG8sIFdvcmxkISAgICoiKTsKKyAgICAgICAgYmIucGxhaW4oIiogICAgICAgICAgICAgICAgICAqIik7CisgICAgICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKiIpOworICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgZmlsZSBzaW1wbHkgcHJvdmlkZXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUsIHRoZSBuYW1lLCB2ZXJzaW9uLCBhbmQgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggcHJpbnRzIG91dCAiSGVsbG8gV29ybGQiIHRvIHRoZSBjb25zb2xlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHZhcmlhYmxlcywgZm9sbG93IHRoZSBsaW5rcworICAgICAgICAgICAgICAgIHRvIHRoZSBnbG9zc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2UgV2l0aCBhIFRhcmdldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IGEgQml0QmFrZSB0YXJnZXQgZXhpc3RzLCBydW4gdGhlIGNvbW1hbmQgYW5kIHByb3ZpZGUKKyAgICAgICAgICAgICAgICB0aGF0IHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUvaGVsbG8KKyAgICAgJCBiaXRiYWtlIHByaW50aGVsbG8KKyAgICAgRVJST1I6IG5vIHJlY2lwZSBmaWxlcyB0byBidWlsZCwgY2hlY2sgeW91ciBCQlBBVEggYW5kIEJCRklMRVM/CisKKyAgICAgU3VtbWFyeTogVGhlcmUgd2FzIDEgRVJST1IgbWVzc2FnZSBzaG93biwgcmV0dXJuaW5nIGEgbm9uLXplcm8gZXhpdCBjb2RlLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBoYXZlIGNyZWF0ZWQgdGhlIGxheWVyIHdpdGggdGhlIHJlY2lwZSBhbmQgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGJ1dCBpdCBzdGlsbCBzZWVtcyB0aGF0IEJpdEJha2UgY2Fubm90CisgICAgICAgICAgICAgICAgZmluZCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIEJpdEJha2UgbmVlZHMgYSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgIGxpc3RzIHRoZSBsYXllcnMgZm9yIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFdpdGhvdXQgdGhpcyBmaWxlLCBCaXRCYWtlIGNhbm5vdCBmaW5kIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0byBsb2NhdGUgbGF5ZXJzIG5lZWRlZCBmb3IgdGhlIHByb2plY3QuCisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIG11c3QgcmVzaWRlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG9mIHRoZSBwcm9qZWN0IChpLmUuIDxmaWxlbmFtZT5oZWxsby9jb25mPC9maWxlbmFtZT4gZm9yIHRoaXMKKyAgICAgICAgICAgICAgICBleGFtcGxlKS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+U2V0IHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIDxmaWxlbmFtZT5oZWxsby9jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIHRoZW4gY3JlYXRlIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBzbyB0aGF0IGl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAvaG9tZS8mbHQ7eW91Jmd0Oy9teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHByb3ZpZGUgeW91ciBvd24gaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvdTwvZmlsZW5hbWU+IGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZSBXaXRoIGEgVGFyZ2V0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgeW91IGhhdmUgc3VwcGxpZWQgdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLCBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgcHJvdmlkZQorICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgcHJpbnRoZWxsbworICAgICBQYXJzaW5nIHJlY2lwZXM6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN8CisgICAgIFRpbWU6IDAwOjAwOjAwCisgICAgIFBhcnNpbmcgb2YgMSAuYmIgZmlsZXMgY29tcGxldGUgKDAgY2FjaGVkLCAxIHBhcnNlZCkuIDEgdGFyZ2V0cywgMCBza2lwcGVkLCAwIG1hc2tlZCwgMCBlcnJvcnMuCisgICAgIE5PVEU6IFJlc29sdmluZyBhbnkgbWlzc2luZyB0YXNrIHF1ZXVlIGRlcGVuZGVuY2llcworICAgICBOT1RFOiBQcmVwYXJpbmcgUnVuUXVldWUKKyAgICAgTk9URTogRXhlY3V0aW5nIFJ1blF1ZXVlIFRhc2tzCisgICAgICoqKioqKioqKioqKioqKioqKioqCisgICAgICogICAgICAgICAgICAgICAgICAqCisgICAgICogIEhlbGxvLCBXb3JsZCEgICAqCisgICAgICogICAgICAgICAgICAgICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqCisgICAgIE5PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAxIHRhc2tzIG9mIHdoaWNoIDAgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kIGFsbCBzdWNjZWVkZWQuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgdGhlIDxmaWxlbmFtZT5wcmludGhlbGxvPC9maWxlbmFtZT4gcmVjaXBlIGFuZAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBydW5zIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgZmlyc3QgZXhlY3V0aW9uLCByZS1ydW5uaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIHByaW50aGVsbG88L2ZpbGVuYW1lPiBhZ2FpbiB3aWxsIG5vdAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgaW4gYSBCaXRCYWtlIHJ1biB0aGF0IHByaW50cyB0aGUgc2FtZSBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBmaXJzdCB0aW1lIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHJpbnRoZWxsby5iYjwvZmlsZW5hbWU+IHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2sgZXhlY3V0ZXMKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5LCBCaXRCYWtlIHdyaXRlcyBhIHN0YW1wIGZpbGUgZm9yIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgbmV4dCB0aW1lIHlvdSBhdHRlbXB0IHRvIHJ1biB0aGUgdGFzaworICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGF0IHNhbWUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIG5vdGljZXMgdGhlIHN0YW1wIGFuZCB0aGVyZWZvcmUgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSB0YXNrIGRvZXMgbm90IG5lZWQgdG8gYmUgcmUtcnVuLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGVsZXRlIHRoZSA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG9yIHJ1biA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjbGVhbiBwcmludGhlbGxvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gcmUtcnVuIHRoZSBidWlsZCwgdGhlICJIZWxsbywgV29ybGQhIiBtZXNzYWdlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgYmUgcHJpbnRlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorPC9hcHBlbmRpeD4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsNjg1IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLWludHJvIj4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdlbGNvbWUgdG8gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgIFRoZSBpbmZvcm1hdGlvbiBhdHRlbXB0cyB0byBiZSBhcyBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZSByZWdhcmRpbmcKKyAgICAgICAgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlLCBzdWNoIGFzIE9wZW5FbWJlZGRlZCBhbmQgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgIEluIHNvbWUgY2FzZXMsIHNjZW5hcmlvcyBvciBleGFtcGxlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YKKyAgICAgICAgYSBidWlsZCBzeXN0ZW0gYXJlIHVzZWQgaW4gdGhlIG1hbnVhbCB0byBoZWxwIHdpdGggdW5kZXJzdGFuZGluZy4KKyAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgbWFudWFsIGNsZWFybHkgc3RhdGVzIHRoZSBjb250ZXh0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJpbnRybyI+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRnVuZGFtZW50YWxseSwgQml0QmFrZSBpcyBhIGdlbmVyaWMgdGFzayBleGVjdXRpb24KKyAgICAgICAgICAgIGVuZ2luZSB0aGF0IGFsbG93cyBzaGVsbCBhbmQgUHl0aG9uIHRhc2tzIHRvIGJlIHJ1bgorICAgICAgICAgICAgZWZmaWNpZW50bHkgYW5kIGluIHBhcmFsbGVsIHdoaWxlIHdvcmtpbmcgd2l0aGluCisgICAgICAgICAgICBjb21wbGV4IGludGVyLXRhc2sgZGVwZW5kZW5jeSBjb25zdHJhaW50cy4KKyAgICAgICAgICAgIE9uZSBvZiBCaXRCYWtlJ3MgbWFpbiB1c2VycywgT3BlbkVtYmVkZGVkLCB0YWtlcyB0aGlzIGNvcmUKKyAgICAgICAgICAgIGFuZCBidWlsZHMgZW1iZWRkZWQgTGludXggc29mdHdhcmUgc3RhY2tzIHVzaW5nCisgICAgICAgICAgICBhIHRhc2stb3JpZW50ZWQgYXBwcm9hY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbmNlcHR1YWxseSwgQml0QmFrZSBpcyBzaW1pbGFyIHRvIEdOVSBNYWtlIGluCisgICAgICAgICAgICBzb21lIHJlZ2FyZHMgYnV0IGhhcyBzaWduaWZpY2FudCBkaWZmZXJlbmNlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIGFjY29yZGluZyB0byBwcm92aWRlZAorICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSB0aGF0IGJ1aWxkcyB1cCB0aGUgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIGlzIHN0b3JlZCBpbiByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlbGF0ZWQgcmVjaXBlICJhcHBlbmQiICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLCBjb25maWd1cmF0aW9uICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikgYW5kCisgICAgICAgICAgICAgICAgICAgIHVuZGVybHlpbmcgaW5jbHVkZSAoPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPikgZmlsZXMsIGFuZAorICAgICAgICAgICAgICAgICAgICBpbiBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGF0IHRhc2tzIHRvIHJ1biBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRob3NlIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaW5jbHVkZXMgYSBmZXRjaGVyIGxpYnJhcnkgZm9yIG9idGFpbmluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSBmcm9tIHZhcmlvdXMgcGxhY2VzIHN1Y2ggYXMgbG9jYWwgZmlsZXMsIHNvdXJjZSBjb250cm9sCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMsIG9yIHdlYnNpdGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBpbnN0cnVjdGlvbnMgZm9yIGVhY2ggdW5pdCB0byBiZSBidWlsdCAoZS5nLiBhIHBpZWNlCisgICAgICAgICAgICAgICAgICAgIG9mIHNvZnR3YXJlKSBhcmUga25vd24gYXMgInJlY2lwZSIgZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5pdAorICAgICAgICAgICAgICAgICAgICAoZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZSBsb2NhdGlvbnMsIGNoZWNrc3VtcywgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIG9uKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGluY2x1ZGVzIGEgY2xpZW50L3NlcnZlciBhYnN0cmFjdGlvbiBhbmQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgZnJvbSBhIGNvbW1hbmQgbGluZSBvciB1c2VkIGFzIGEgc2VydmljZSBvdmVyCisgICAgICAgICAgICAgICAgICAgIFhNTC1SUEMgYW5kIGhhcyBzZXZlcmFsIGRpZmZlcmVudCB1c2VyIGludGVyZmFjZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iaGlzdG9yeS1hbmQtZ29hbHMiPgorICAgICAgICA8dGl0bGU+SGlzdG9yeSBhbmQgR29hbHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB3YXMgb3JpZ2luYWxseSBhIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZCBwcm9qZWN0LgorICAgICAgICAgICAgSXQgd2FzIGluc3BpcmVkIGJ5IHRoZSBQb3J0YWdlIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0KKyAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdlbnRvbyBMaW51eCBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBPbiBEZWNlbWJlciA3LCAyMDA0LCBPcGVuRW1iZWRkZWQgcHJvamVjdCB0ZWFtIG1lbWJlcgorICAgICAgICAgICAgQ2hyaXMgTGFyc29uIHNwbGl0IHRoZSBwcm9qZWN0IGludG8gdHdvIGRpc3RpbmN0IHBpZWNlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJpdEJha2UsIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dG9yPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9wZW5FbWJlZGRlZCwgYSBtZXRhZGF0YSBzZXQgdXRpbGl6ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUb2RheSwgQml0QmFrZSBpcyB0aGUgcHJpbWFyeSBiYXNpcyBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8iPk9wZW5FbWJlZGRlZDwvdWxpbms+CisgICAgICAgICAgICBwcm9qZWN0LCB3aGljaCBpcyBiZWluZyB1c2VkIHRvIGJ1aWxkIGFuZCBtYWludGFpbiBMaW51eAorICAgICAgICAgICAgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5hbmdzdHJvbS1kaXN0cmlidXRpb24ub3JnLyc+QW5nc3Ryb20gRGlzdHJpYnV0aW9uPC91bGluaz4sCisgICAgICAgICAgICBhbmQgd2hpY2ggaXMgYWxzbyBiZWluZyB1c2VkIGFzIHRoZSBidWlsZCB0b29sIGZvciBMaW51eCBwcm9qZWN0cworICAgICAgICAgICAgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcmlvciB0byBCaXRCYWtlLCBubyBvdGhlciBidWlsZCB0b29sIGFkZXF1YXRlbHkgbWV0IHRoZSBuZWVkcyBvZgorICAgICAgICAgICAgYW4gYXNwaXJpbmcgZW1iZWRkZWQgTGludXggZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgQWxsIG9mIHRoZSBidWlsZCBzeXN0ZW1zIHVzZWQgYnkgdHJhZGl0aW9uYWwgZGVza3RvcCBMaW51eAorICAgICAgICAgICAgZGlzdHJpYnV0aW9ucyBsYWNrZWQgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHksIGFuZCBub25lIG9mIHRoZQorICAgICAgICAgICAgYWQgaG9jIEJ1aWxkcm9vdC1iYXNlZCBzeXN0ZW1zLCBwcmV2YWxlbnQgaW4gdGhlCisgICAgICAgICAgICBlbWJlZGRlZCBzcGFjZSwgd2VyZSBzY2FsYWJsZSBvciBtYWludGFpbmFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgaW1wb3J0YW50IG9yaWdpbmFsIGdvYWxzIGZvciBCaXRCYWtlIHdlcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlIGNyb3NzLWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBpbnRlci1wYWNrYWdlIGRlcGVuZGVuY2llcyAoYnVpbGQgdGltZSBvbgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBidWlsZCB0aW1lIG9uIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUsIGFuZCBydW50aW1lKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IHJ1bm5pbmcgYW55IG51bWJlciBvZiB0YXNrcyB3aXRoaW4gYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZmV0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgdXBzdHJlYW0gc291cmNlcywgdW5wYWNraW5nIHRoZW0sIHBhdGNoaW5nIHRoZW0sCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyaW5nIHRoZW0sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBMaW51eCBkaXN0cmlidXRpb24gYWdub3N0aWMgZm9yIGJvdGggYnVpbGQgYW5kCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW1zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIGFyY2hpdGVjdHVyZSBhZ25vc3RpYy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IG11bHRpcGxlIGJ1aWxkIGFuZCB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbXMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gQ3lnd2luLCB0aGUgQlNEcywgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBzZWxmIGNvbnRhaW5lZCwgcmF0aGVyIHRoYW4gdGlnaHRseQorICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlIGNvbmRpdGlvbmFsIG1ldGFkYXRhIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBkaXN0cmlidXRpb24sIGFuZCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIGVhc3kgdG8gdXNlIHRoZSB0b29scyB0byBzdXBwbHkgbG9jYWwgbWV0YWRhdGEgYW5kIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGFnYWluc3Qgd2hpY2ggdG8gb3BlcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBlYXN5IHRvIHVzZSBCaXRCYWtlIHRvIGNvbGxhYm9yYXRlIGJldHdlZW4gbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgZm9yIHRoZWlyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGFuIGluaGVyaXRhbmNlIG1lY2hhbmlzbSB0byBzaGFyZQorICAgICAgICAgICAgICAgICAgICBjb21tb24gbWV0YWRhdGEgYmV0d2VlbiBtYW55IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgT3ZlciB0aW1lIGl0IGJlY2FtZSBhcHBhcmVudCB0aGF0IHNvbWUgZnVydGhlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIHdlcmUgbmVjZXNzYXJ5OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSB2YXJpYW50cyBvZiBhIGJhc2UgcmVjaXBlIChlLmcuIG5hdGl2ZSwgc2RrLAorICAgICAgICAgICAgICAgICAgICBhbmQgbXVsdGlsaWIpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwbGl0IG1ldGFkYXRhIGludG8gbGF5ZXJzIGFuZCBhbGxvdyBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdG8gZW5oYW5jZSBvciBvdmVycmlkZSBvdGhlciBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3cgcmVwcmVzZW50YXRpb24gb2YgYSBnaXZlbiBzZXQgb2YgaW5wdXQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIHRvIGEgdGFzayBhcyBhIGNoZWNrc3VtLgorICAgICAgICAgICAgICAgICAgICBCYXNlZCBvbiB0aGF0IGNoZWNrc3VtLCBhbGxvdyBhY2NlbGVyYXRpb24gb2YgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGggcHJlYnVpbHQgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEJpdEJha2Ugc2F0aXNmaWVzIGFsbCB0aGUgb3JpZ2luYWwgcmVxdWlyZW1lbnRzIGFuZCBtYW55IG1vcmUKKyAgICAgICAgICAgIHdpdGggZXh0ZW5zaW9ucyBiZWluZyBtYWRlIHRvIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvCisgICAgICAgICAgICByZWZsZWN0IHRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIEZsZXhpYmlsaXR5IGFuZCBwb3dlciBoYXZlIGFsd2F5cyBiZWVuIHRoZSBwcmlvcml0aWVzLgorICAgICAgICAgICAgQml0QmFrZSBpcyBoaWdobHkgZXh0ZW5zaWJsZSBhbmQgc3VwcG9ydHMgZW1iZWRkZWQgUHl0aG9uIGNvZGUgYW5kCisgICAgICAgICAgICBleGVjdXRpb24gb2YgYW55IGFyYml0cmFyeSB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJDb25jZXB0cyI+CisgICAgICAgIDx0aXRsZT5Db25jZXB0czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGlzIGEgcHJvZ3JhbSB3cml0dGVuIGluIHRoZSBQeXRob24gbGFuZ3VhZ2UuCisgICAgICAgICAgICBBdCB0aGUgaGlnaGVzdCBsZXZlbCwgQml0QmFrZSBpbnRlcnByZXRzIG1ldGFkYXRhLCBkZWNpZGVzCisgICAgICAgICAgICB3aGF0IHRhc2tzIGFyZSByZXF1aXJlZCB0byBydW4sIGFuZCBleGVjdXRlcyB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gR05VIE1ha2UsIEJpdEJha2UgY29udHJvbHMgaG93IHNvZnR3YXJlIGlzCisgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgIEdOVSBNYWtlIGFjaGlldmVzIGl0cyBjb250cm9sIHRocm91Z2ggIm1ha2VmaWxlcyIsIHdoaWxlCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgInJlY2lwZXMiLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGV4dGVuZHMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNpbXBsZQorICAgICAgICAgICAgdG9vbCBsaWtlIEdOVSBNYWtlIGJ5IGFsbG93aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBtdWNoIG1vcmUKKyAgICAgICAgICAgIGNvbXBsZXggdGFza3MsIHN1Y2ggYXMgYXNzZW1ibGluZyBlbnRpcmUgZW1iZWRkZWQgTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGludHJvZHVjZXMgc2V2ZXJhbCBjb25jZXB0cworICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgdW5kZXJzdG9vZCBpbiBvcmRlciB0byBiZXR0ZXIgbGV2ZXJhZ2UKKyAgICAgICAgICAgIHRoZSBwb3dlciBvZiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIFJlY2lwZXMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiwgYXJlIHRoZSBtb3N0IGJhc2ljIG1ldGFkYXRhIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZXNlIHJlY2lwZSBmaWxlcyBwcm92aWRlIEJpdEJha2Ugd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgKGF1dGhvciwgaG9tZXBhZ2UsIGxpY2Vuc2UsIGFuZCBzbyBvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4aXN0aW5nIGRlcGVuZGVuY2llcyAoYm90aCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlcmUgdGhlIHNvdXJjZSBjb2RlIHJlc2lkZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gZmV0Y2ggaXQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIHNvdXJjZSBjb2RlIHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGF0Y2hlcywgd2hlcmUgdG8gZmluZCB0aGVtLCBhbmQgaG93IHRvIGFwcGx5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVtPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gY29uZmlndXJlIGFuZCBjb21waWxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXJlIG9uIHRoZSB0YXJnZXQgbWFjaGluZSB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvciBwYWNrYWdlcyBjcmVhdGVkPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgY29udGV4dCBvZiBCaXRCYWtlLCBvciBhbnkgcHJvamVjdCB1dGlsaXppbmcgQml0QmFrZQorICAgICAgICAgICAgICAgIGFzIGl0cyBidWlsZCBzeXN0ZW0sIGZpbGVzIHdpdGggdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGV4dGVuc2lvbiBhcmUgcmVmZXJyZWQgdG8gYXMgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRlcm0gInBhY2thZ2UiIGlzIGFsc28gY29tbW9ubHkgdXNlZCB0byBkZXNjcmliZSByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzaW5jZSB0aGUgc2FtZSB3b3JkIGlzIHVzZWQgdG8gZGVzY3JpYmUgcGFja2FnZWQKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGZyb20gYSBwcm9qZWN0LCBpdCBpcyBiZXN0IHRvIG1haW50YWluIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aXZlIHRlcm0gLSAicmVjaXBlcyIuCisgICAgICAgICAgICAgICAgICAgIFB1dCBhbm90aGVyIHdheSwgYSBzaW5nbGUgInJlY2lwZSIgZmlsZSBpcyBxdWl0ZSBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIG9mIGdlbmVyYXRpbmcgYSBudW1iZXIgb2YgcmVsYXRlZCBidXQgc2VwYXJhdGVseSBpbnN0YWxsYWJsZQorICAgICAgICAgICAgICAgICAgICAicGFja2FnZXMiLgorICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCB0aGF0IGFiaWxpdHkgaXMgZmFpcmx5IGNvbW1vbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJhdGlvbi1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZmlsZXMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGV4dGVuc2lvbiwgZGVmaW5lCisgICAgICAgICAgICAgICAgdmFyaW91cyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGdvdmVybiB0aGUgcHJvamVjdCdzIGJ1aWxkCisgICAgICAgICAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBmYWxsIGludG8gc2V2ZXJhbCBhcmVhcyB0aGF0IGRlZmluZQorICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIG9wdGlvbnMsIGNvbXBpbGVyIHR1bmluZyBvcHRpb25zLCBnZW5lcmFsIGNvbW1vbgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0aGUgc2FtcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCB3aXRoaW4gdGhlIEJpdEJha2Ugc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjbGFzc2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DbGFzc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ2xhc3MgZmlsZXMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGV4dGVuc2lvbiwgY29udGFpbgorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgaXMgdXNlZnVsIHRvIHNoYXJlIGJldHdlZW4gbWV0YWRhdGEgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlIEJpdEJha2Ugc291cmNlIHRyZWUgY3VycmVudGx5IGNvbWVzIHdpdGggb25lIGNsYXNzIG1ldGFkYXRhIGZpbGUKKyAgICAgICAgICAgICAgICBjYWxsZWQgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBjbGFzcyBmaWxlcyBpcyBzcGVjaWFsIHNpbmNlIGl0CisgICAgICAgICAgICAgICAgaXMgYWx3YXlzIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCByZWNpcGVzCisgICAgICAgICAgICAgICAgYW5kIGNsYXNzZXMuCisgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBkZWZpbml0aW9ucyBmb3Igc3RhbmRhcmQgYmFzaWMgdGFza3Mgc3VjaAorICAgICAgICAgICAgICAgIGFzIGZldGNoaW5nLCB1bnBhY2tpbmcsIGNvbmZpZ3VyaW5nIChlbXB0eSBieSBkZWZhdWx0KSwKKyAgICAgICAgICAgICAgICBjb21waWxpbmcgKHJ1bnMgYW55IE1ha2VmaWxlIHByZXNlbnQpLCBpbnN0YWxsaW5nIChlbXB0eSBieQorICAgICAgICAgICAgICAgIGRlZmF1bHQpIGFuZCBwYWNrYWdpbmcgKGVtcHR5IGJ5IGRlZmF1bHQpLgorICAgICAgICAgICAgICAgIFRoZXNlIHRhc2tzIGFyZSBvZnRlbiBvdmVycmlkZGVuIG9yIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMKKyAgICAgICAgICAgICAgICBhZGRlZCBkdXJpbmcgdGhlIHByb2plY3QgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPkxheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIExheWVycyBhbGxvdyB5b3UgdG8gaXNvbGF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyBmcm9tIGVhY2ggb3RoZXIuCisgICAgICAgICAgICAgICAgV2hpbGUgeW91IG1pZ2h0IGZpbmQgaXQgdGVtcHRpbmcgdG8ga2VlcCBldmVyeXRoaW5nIGluIG9uZSBsYXllcgorICAgICAgICAgICAgICAgIHdoZW4gd29ya2luZyBvbiBhIHNpbmdsZSBwcm9qZWN0LCB0aGUgbW9yZSBtb2R1bGFyIHlvdSBvcmdhbml6ZQorICAgICAgICAgICAgICAgIHlvdXIgbWV0YWRhdGEsIHRoZSBlYXNpZXIgaXQgaXMgdG8gY29wZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIHVzZSBsYXllcnMgdG8ga2VlcCB0aGluZ3MgbW9kdWxhciwKKyAgICAgICAgICAgICAgICBjb25zaWRlciBjdXN0b21pemF0aW9ucyB5b3UgbWlnaHQgbWFrZSB0byBzdXBwb3J0IGEgc3BlY2lmaWMgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgVGhlc2UgdHlwZXMgb2YgY3VzdG9taXphdGlvbnMgdHlwaWNhbGx5IHJlc2lkZSBpbiBhIHNwZWNpYWwgbGF5ZXIsCisgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYSBnZW5lcmFsIGxheWVyLCBjYWxsZWQgYSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKKyAgICAgICAgICAgICAgICBMYXllci4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIG1hY2hpbmUgY3VzdG9taXphdGlvbnMgc2hvdWxkIGJlIGlzb2xhdGVkIGZyb20KKyAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBtZXRhZGF0YSB0aGF0IHN1cHBvcnQgYSBuZXcgR1VJIGVudmlyb25tZW50LCBmb3IKKyAgICAgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGdpdmVzIHlvdSBhIGNvdXBsZSBvZiBsYXllcnM6IG9uZSBmb3IgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhbmQgb25lIGZvciB0aGUgR1VJIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLCBob3dldmVyLCB0aGF0IHRoZSBCU1AgbGF5ZXIgY2FuIHN0aWxsCisgICAgICAgICAgICAgICAgbWFrZSBtYWNoaW5lLXNwZWNpZmljIGFkZGl0aW9ucyB0byByZWNpcGVzIHdpdGhpbgorICAgICAgICAgICAgICAgIHRoZSBHVUkgZW52aXJvbm1lbnQgbGF5ZXIgd2l0aG91dCBwb2xsdXRpbmcgdGhlIEdVSSBsYXllciBpdHNlbGYKKyAgICAgICAgICAgICAgICB3aXRoIHRob3NlIG1hY2hpbmUtc3BlY2lmaWMgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIGEgcmVjaXBlIHRoYXQgaXMgYSBCaXRCYWtlIGFwcGVuZAorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kLWJiYXBwZW5kLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBlbmQgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMsIHdoaWNoIGFyZSBmaWxlcyB0aGF0IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgZXh0ZW5zaW9uLCBleHRlbmQgb3IKKyAgICAgICAgICAgICAgICBvdmVycmlkZSBpbmZvcm1hdGlvbiBpbiBhbiBleGlzdGluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBleHBlY3RzIGV2ZXJ5IGFwcGVuZCBmaWxlIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgYXBwZW5kIGZpbGUgYW5kIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUKKyAgICAgICAgICAgICAgICBtdXN0IHVzZSB0aGUgc2FtZSByb290IGZpbGVuYW1lLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlbmFtZXMgY2FuIGRpZmZlciBvbmx5IGluIHRoZSBmaWxlIHR5cGUgc3VmZml4IHVzZWQKKyAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGluIGFwcGVuZCBmaWxlcyBleHRlbmRzIG9yCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgdW5kZXJseWluZywKKyAgICAgICAgICAgICAgICBzaW1pbGFybHktbmFtZWQgcmVjaXBlIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBuYW1lIGFuIGFwcGVuZCBmaWxlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICB3aWxkY2FyZCBjaGFyYWN0ZXIgKCUpIHRvIGFsbG93IGZvciBtYXRjaGluZyByZWNpcGUgbmFtZXMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYW4gYXBwZW5kIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYnVzeWJveF8xLjIxLiUuYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhhdCBhcHBlbmQgZmlsZSB3b3VsZCBtYXRjaCBhbnkgPGZpbGVuYW1lPmJ1c3lib3hfMS4yMS54LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgU28sIHRoZSBhcHBlbmQgZmlsZSB3b3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHJlY2lwZSBuYW1lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ1c3lib3hfMS4yMS4xLmJiCisgICAgIGJ1c3lib3hfMS4yMS4yLmJiCisgICAgIGJ1c3lib3hfMS4yMS4zLmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHJlY2lwZSB3YXMgdXBkYXRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94XzEuMy4wLmJiPC9maWxlbmFtZT4sIHRoZSBhcHBlbmQgbmFtZSB3b3VsZCBub3QKKyAgICAgICAgICAgICAgICBtYXRjaC4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgbmFtZWQgdGhlIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3hfMS4lLmJiYXBwZW5kPC9maWxlbmFtZT4sIHRoZW4geW91IHdvdWxkIGhhdmUgYSBtYXRjaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIG1vc3QgZ2VuZXJhbCBjYXNlLCB5b3UgY291bGQgbmFtZSB0aGUgYXBwZW5kIGZpbGUgc29tZXRoaW5nIGFzCisgICAgICAgICAgICAgICAgc2ltcGxlIGFzIDxmaWxlbmFtZT5idXN5Ym94XyUuYmJhcHBlbmQ8L2ZpbGVuYW1lPiB0byBiZSBlbnRpcmVseQorICAgICAgICAgICAgICAgIHZlcnNpb24gaW5kZXBlbmRlbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb2J0YWluaW5nLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+T2J0YWluaW5nIEJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBvYnRhaW4gQml0QmFrZSBzZXZlcmFsIGRpZmZlcmVudCB3YXlzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsb25pbmcgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2luZyBHaXQgdG8gY2xvbmUgdGhlIEJpdEJha2Ugc291cmNlIGNvZGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBvYnRhaW5pbmcgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgcmVwb3NpdG9yeSBtYWtlcyBpdCBlYXN5IHRvIGdldCBidWcgZml4ZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmUgYWNjZXNzIHRvIHN0YWJsZSBicmFuY2hlcyBhbmQgdGhlIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgY2xvbmVkIEJpdEJha2UsIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc3RhYmxlCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBmb3IgZGV2ZWxvcG1lbnQgc2luY2UgdGhlIG1hc3RlciBicmFuY2ggaXMgZm9yCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgZGV2ZWxvcG1lbnQgYW5kIG1pZ2h0IGNvbnRhaW4gbGVzcyBzdGFibGUgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgdXN1YWxseSBuZWVkIGEgdmVyc2lvbiBvZiBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbWF0Y2hlcyB0aGUgbWV0YWRhdGEgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIGlzIGdlbmVyYWxseSBiYWNrd2FyZHMgY29tcGF0aWJsZSBidXQKKyAgICAgICAgICAgICAgICAgICAgbm90IGZvcndhcmQgY29tcGF0aWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNsb25lcyB0aGUgQml0QmFrZSByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY2xvbmVzIHRoZSBCaXRCYWtlIEdpdCByZXBvc2l0b3J5IGludG8gYQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FsbGVkIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlIGEgZGlyZWN0b3J5IGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBjYWxsIHRoZSBuZXcgZGlyZWN0b3J5IHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IG5hbWVzIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBiYmRldgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsYXRpb24gdXNpbmcgeW91ciBEaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgYmVjYXVzZSB0aGUgQml0QmFrZSB2ZXJzaW9uIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgeW91ciBkaXN0cmlidXRpb24sIGluIG1vc3QgY2FzZXMsCisgICAgICAgICAgICAgICAgICAgIGlzIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZXMgYmVoaW5kIGEgc25hcHNob3Qgb2YgdGhlIEJpdEJha2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UYWtpbmcgYSBzbmFwc2hvdCBvZiBCaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGEgc25hcHNob3Qgb2YgQml0QmFrZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSByZXBvc2l0b3J5IGdpdmVzIHlvdSBhY2Nlc3MgdG8gYSBrbm93bgorICAgICAgICAgICAgICAgICAgICBicmFuY2ggb3IgcmVsZWFzZSBvZiBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICBDbG9uaW5nIHRoZSBHaXQgcmVwb3NpdG9yeSwgYXMgZGVzY3JpYmVkIGVhcmxpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIGdldHRpbmcgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBDbG9uaW5nIHRoZSByZXBvc2l0b3J5IG1ha2VzIGl0IGVhc2llciB0byB1cGRhdGUgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFyZSBhZGRlZCB0byB0aGUgc3RhYmxlIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgZG93bmxvYWRzIGEgc25hcHNob3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB2ZXJzaW9uIDEuMTcuMDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdnZXQgaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2Uvc25hcHNob3QvYml0YmFrZS0xLjE3LjAudGFyLmd6CisgICAgICQgdGFyIHp4cHZmIGJpdGJha2UtMS4xNy4wLnRhci5negorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGV4dHJhY3Rpb24gb2YgdGhlIHRhcmJhbGwgdXNpbmcgdGhlIHRhciB1dGlsaXR5LAorICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhIGRpcmVjdG9yeSBlbnRpdGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS0xLjE3LjA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyB0aGUgQml0QmFrZSB0aGF0IENvbWVzIFdpdGggWW91cgorICAgICAgICAgICAgICAgICAgICBCdWlsZCBDaGVja291dDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGZpbmFsIHBvc3NpYmlsaXR5IGZvciBnZXR0aW5nIGEgY29weSBvZiBCaXRCYWtlIGlzIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBjb21lcyB3aXRoIHlvdXIgY2hlY2tvdXQgb2YgYSBsYXJnZXIgQml0YmFrZS1iYXNlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIHN1Y2ggYXMgUG9reSBvciBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIgdGhhbiBtYW51YWxseSBjaGVja2luZyBvdXQgaW5kaXZpZHVhbCBsYXllcnMgYW5kCisgICAgICAgICAgICAgICAgICAgIGdsdWluZyB0aGVtIHRvZ2V0aGVyIHlvdXJzZWxmLCB5b3UgY2FuIGNoZWNrCisgICAgICAgICAgICAgICAgICAgIG91dCBhbiBlbnRpcmUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgY2hlY2tvdXQgd2lsbCBhbHJlYWR5IGluY2x1ZGUgYSB2ZXJzaW9uIG9mIEJpdEJha2UgdGhhdAorICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiB0aG9yb3VnaGx5IHRlc3RlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNoZWNrIG91dCBhIHBhcnRpY3VsYXIgQml0QmFrZS1iYXNlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0sIGNvbnN1bHQgdGhhdCBidWlsZCBzeXN0ZW0ncyBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1jb21tYW5kIj4KKyAgICAgICAgPHRpdGxlPlRoZSBCaXRCYWtlIENvbW1hbmQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UKKyAgICAgICAgICAgIHRvIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIEJpdEJha2UgY29tbWFuZCBzeW50YXggYW5kIHByb3ZpZGVzCisgICAgICAgICAgICBzZXZlcmFsIGV4ZWN1dGlvbiBleGFtcGxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2FnZS1hbmQtc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2FnZSBhbmQgc3ludGF4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSB1c2FnZSBhbmQgc3ludGF4IGZvciBCaXRCYWtlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1oCisgICAgIFVzYWdlOiBiaXRiYWtlIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgLi4uXQorCisgICAgICAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgorICAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGVyZSBpcyBhIGNvbmYvYmJsYXllcnMuY29uZiBhdmFpbGFibGUgaW4gY3dkIG9yIGluIEJCUEFUSCB3aGljaAorICAgICAgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKworICAgICBPcHRpb25zOgorICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLWIgQlVJTERGSUxFLCAtLWJ1aWxkZmlsZT1CVUlMREZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSB0YXNrcyBmcm9tIGEgc3BlY2lmaWMgLmJiIHJlY2lwZSBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORzogRG9lcyBub3QgaGFuZGxlIGFueSBkZXBlbmRlbmNpZXMgZnJvbSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLgorICAgICAgIC1rLCAtLWNvbnRpbnVlICAgICAgICBDb250aW51ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFmdGVyIGFuIGVycm9yLiBXaGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5nLgorICAgICAgIC1hLCAtLXRyeWFsdGNvbmZpZ3MgICBDb250aW51ZSB3aXRoIGJ1aWxkcyBieSB0cnlpbmcgdG8gdXNlIGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVycyB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAtZiwgLS1mb3JjZSAgICAgICAgICAgRm9yY2UgdGhlIHNwZWNpZmllZCB0YXJnZXRzL3Rhc2sgdG8gcnVuIChpbnZhbGlkYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGV4aXN0aW5nIHN0YW1wIGZpbGUpLgorICAgICAgIC1jIENNRCwgLS1jbWQ9Q01EICAgICBTcGVjaWZ5IHRoZSB0YXNrIHRvIGV4ZWN1dGUuIFRoZSBleGFjdCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBkZXBlbmQgb24gdGhlIG1ldGFkYXRhLiBTb21lIGV4YW1wbGVzIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlICdjb21waWxlJyBvciAncG9wdWxhdGVfc3lzcm9vdCcgb3IgJ2xpc3R0YXNrcycgbWF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmUgYSBsaXN0IG9mIHRoZSB0YXNrcyBhdmFpbGFibGUuCisgICAgICAgLUMgSU5WQUxJREFURV9TVEFNUCwgLS1jbGVhci1zdGFtcD1JTlZBTElEQVRFX1NUQU1QCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdGUgdGhlIHN0YW1wIGZvciB0aGUgc3BlY2lmaWVkIHRhc2sgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGlsZScgYW5kIHRoZW4gcnVuIHRoZSBkZWZhdWx0IHRhc2sgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgdGFyZ2V0KHMpLgorICAgICAgIC1yIFBSRUZJTEUsIC0tcmVhZD1QUkVGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuCisgICAgICAgLVIgUE9TVEZJTEUsIC0tcG9zdHJlYWQ9UE9TVEZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLgorICAgICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBPdXRwdXQgbW9yZSBsb2cgbWVzc2FnZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbC4KKyAgICAgICAtRCwgLS1kZWJ1ZyAgICAgICAgICAgSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gb25jZS4KKyAgICAgICAtbiwgLS1kcnktcnVuICAgICAgICAgRG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zLgorICAgICAgIC1TIFNJR05BVFVSRV9IQU5ETEVSLCAtLWR1bXAtc2lnbmF0dXJlcz1TSUdOQVRVUkVfSEFORExFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdW1wIG91dCB0aGUgc2lnbmF0dXJlIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbiwgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyB0YXNrIGV4ZWN1dGlvbi4gVGhlIFNJR05BVFVSRV9IQU5ETEVSIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIGhhbmRsZXIuIFR3byBjb21tb24gdmFsdWVzIGFyZSBub25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGRpZmYgYnV0IHRoZSBoYW5kbGVyIG1heSBkZWZpbmUgbW9yZS9sZXNzLiBub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIG9ubHkgZHVtcCB0aGUgc2lnbmF0dXJlLCBwcmludGRpZmYgbWVhbnMgY29tcGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVtcGVkIHNpZ25hdHVyZSB3aXRoIHRoZSBjYWNoZWQgb25lLgorICAgICAgIC1wLCAtLXBhcnNlLW9ubHkgICAgICBRdWl0IGFmdGVyIHBhcnNpbmcgdGhlIEJCIHJlY2lwZXMuCisgICAgICAgLXMsIC0tc2hvdy12ZXJzaW9ucyAgIFNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLgorICAgICAgIC1lLCAtLWVudmlyb25tZW50ICAgICBTaG93IHRoZSBnbG9iYWwgb3IgcGVyLXJlY2lwZSBlbnZpcm9ubWVudCBjb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHZhcmlhYmxlcyB3ZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC9jaGFuZ2VkLgorICAgICAgIC1nLCAtLWdyYXBodml6ICAgICAgICBTYXZlIGRlcGVuZGVuY3kgdHJlZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LgorICAgICAgIC1JIEVYVFJBX0FTU1VNRV9QUk9WSURFRCwgLS1pZ25vcmUtZGVwcz1FWFRSQV9BU1NVTUVfUFJPVklERUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzdW1lIHRoZXNlIGRlcGVuZGVuY2llcyBkb24ndCBleGlzdCBhbmQgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2UgZGVwZW5kZW5jeSBncmFwaHMgbW9yZSBhcHBlYWxpbmcKKyAgICAgICAtbCBERUJVR19ET01BSU5TLCAtLWxvZy1kb21haW5zPURFQlVHX0RPTUFJTlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworICAgICAgIC1QLCAtLXByb2ZpbGUgICAgICAgICBQcm9maWxlIHRoZSBjb21tYW5kIGFuZCBzYXZlIHJlcG9ydHMuCisgICAgICAgLXUgVUksIC0tdWk9VUkgICAgICAgIFRoZSB1c2VyIGludGVyZmFjZSB0byB1c2UgKGUuZy4ga25vdHR5LCBob2IsIGRlcGV4cCkuCisgICAgICAgLXQgU0VSVkVSVFlQRSwgLS1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIHdoaWNoIHNlcnZlciB0byB1c2UsIHByb2Nlc3Mgb3IgeG1scnBjLgorICAgICAgIC0tdG9rZW49WE1MUlBDVE9LRU4gICBTcGVjaWZ5IHRoZSBjb25uZWN0aW9uIHRva2VuIHRvIGJlIHVzZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHNlcnZlci4KKyAgICAgICAtLXJldmlzaW9ucy1jaGFuZ2VkICAgU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgcmV2aXNpb25zIGhhdmUgY2hhbmdlZCBvciBub3QuCisgICAgICAgLS1zZXJ2ZXItb25seSAgICAgICAgIFJ1biBiaXRiYWtlIHdpdGhvdXQgYSBVSSwgb25seSBzdGFydGluZyBhIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29va2VyKSBwcm9jZXNzLgorICAgICAgIC1CIEJJTkQsIC0tYmluZD1CSU5EICBUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4KKyAgICAgICAtLW5vLXNldHNjZW5lICAgICAgICAgRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MuIHNzdGF0ZSB3aWxsIGJlIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV2ZXJ5dGhpbmcgbmVlZGVkLCBidWlsdC4KKyAgICAgICAtLXJlbW90ZS1zZXJ2ZXI9UkVNT1RFX1NFUlZFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgc2VydmVyLgorICAgICAgIC1tLCAtLWtpbGwtc2VydmVyICAgICBUZXJtaW5hdGUgdGhlIHJlbW90ZSBzZXJ2ZXIuCisgICAgICAgLS1vYnNlcnZlLW9ubHkgICAgICAgIENvbm5lY3QgdG8gYSBzZXJ2ZXIgYXMgYW4gb2JzZXJ2aW5nLW9ubHkgY2xpZW50LgorICAgICAgIC0tc3RhdHVzLW9ubHkgICAgICAgICBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgYml0YmFrZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZXhhbXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8gdXNlIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleGFtcGxlLWV4ZWN1dGluZy1hLXRhc2stYWdhaW5zdC1hLXNpbmdsZS1yZWNpcGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5FeGVjdXRpbmcgYSBUYXNrIEFnYWluc3QgYSBTaW5nbGUgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBFeGVjdXRpbmcgdGFza3MgZm9yIGEgc2luZ2xlIHJlY2lwZSBmaWxlIGlzIHJlbGF0aXZlbHkgc2ltcGxlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc3BlY2lmeSB0aGUgZmlsZSBpbiBxdWVzdGlvbiwgYW5kIEJpdEJha2UgcGFyc2VzCisgICAgICAgICAgICAgICAgICAgIGl0IGFuZCBleGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2suCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHRhc2ssIEJpdEJha2UgZXhlY3V0ZXMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggaXMgImJ1aWxk4oCdLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIG9iZXlzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzIHdoZW4gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgc28uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBydW5zIHRoZSBidWlsZCB0YXNrLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YXNrLCBvbiB0aGUgPGZpbGVuYW1lPmZvb18xLjAuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWIgZm9vXzEuMC5iYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBydW5zIHRoZSBjbGVhbiB0YXNrIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1iIGZvby5iYiAtYyBjbGVhbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlICItYiIgb3B0aW9uIGV4cGxpY2l0bHkgZG9lcyBub3QgaGFuZGxlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGhhbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBpdCBpcyBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhlIHN5bnRheCBwcmVzZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleGVjdXRpbmctdGFza3MtYWdhaW5zdC1hLXNldC1vZi1yZWNpcGUtZmlsZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5FeGVjdXRpbmcgVGFza3MgQWdhaW5zdCBhIFNldCBvZiBSZWNpcGUgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGNvbXBsZXhpdGllcyBpbnRyb2R1Y2VkCisgICAgICAgICAgICAgICAgICAgIHdoZW4gb25lIHdhbnRzIHRvIG1hbmFnZSBtdWx0aXBsZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIENsZWFybHkgdGhlcmUgbmVlZHMgdG8gYmUgYSB3YXkgdG8gdGVsbCBCaXRCYWtlIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgYXJlIGF2YWlsYWJsZSBhbmQsIG9mIHRob3NlLCB3aGljaCB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2FudCB0byBleGVjdXRlLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhbHNvIG5lZWRzIHRvIGJlIGEgd2F5IGZvciBlYWNoIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICB0byBleHByZXNzIGl0cyBkZXBlbmRlbmNpZXMsIGJvdGggZm9yIGJ1aWxkLXRpbWUgYW5kCisgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIG11c3QgYmUgYSB3YXkgZm9yIHlvdSB0byBleHByZXNzIHJlY2lwZSBwcmVmZXJlbmNlcworICAgICAgICAgICAgICAgICAgICB3aGVuIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBvciB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgd2hlbiBub3QgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgIi0tYnVpbGRmaWxlIiBvciAiLWIiIG9ubHkgYWNjZXB0cyBhICJQUk9WSURFUyIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgcHJvdmlkZSBhbnl0aGluZyBlbHNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBhIHJlY2lwZSBmaWxlIGdlbmVyYWxseSAiUFJPVklERVMiIGl0cworICAgICAgICAgICAgICAgICAgICAicGFja2FnZW5hbWUiIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgZm9vCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgIlBST1ZJREVTIiB0aGUgcGFja2FnZSBuYW1lIGFuZCBhbHNvIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlICItYyIgb3B0aW9uIHRvIHRlbGwgQml0QmFrZSB0byBqdXN0IGV4ZWN1dGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+IHRhc2s6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuIGZvbworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1kZXBlbmRlbmN5LWdyYXBocyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkdlbmVyYXRpbmcgRGVwZW5kZW5jeSBHcmFwaHM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaXMgYWJsZSB0byBnZW5lcmF0ZSBkZXBlbmRlbmN5IGdyYXBocyB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvdDwvZmlsZW5hbWU+IHN5bnRheC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjb252ZXJ0IHRoZXNlIGdyYXBocyBpbnRvIGltYWdlcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvdDwvZmlsZW5hbWU+IHRvb2wgZnJvbQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdyYXBodml6Lm9yZyc+R3JhcGh2aXo8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGdyYXBoLCBCaXRCYWtlIHdyaXRlcyBmb3VyIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGFja2FnZS1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgQml0QmFrZSdzIGtub3dsZWRnZSBvZiBkZXBlbmRlbmNpZXMgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBidWlsZC10aW1lIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRhc2stZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG4tYnVpbGRsaXN0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBhIHNpbXBsZSBsaXN0IG9mIHRhcmdldHMgdGhhdCBhcmUgdG8gYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzdG9wIGRlcGVuZGluZyBvbiBjb21tb24gZGVwZW5kcywgdXNlIHRoZSAiLUkiIGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvcHRpb24gYW5kIEJpdEJha2Ugb21pdHMgdGhlbSBmcm9tIHRoZSBncmFwaC4KKyAgICAgICAgICAgICAgICAgICAgTGVhdmluZyB0aGlzIGluZm9ybWF0aW9uIG91dCBjYW4gcHJvZHVjZSBtb3JlIHJlYWRhYmxlIGdyYXBocy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB3YXksIHlvdSBjYW4gcmVtb3ZlIGZyb20gdGhlIGdyYXBoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gZnJvbSBpbmhlcml0ZWQgY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzIHRoYXQgY3JlYXRlIGRlcGVuZGVuY3kgZ3JhcGhzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgb21pdHMgZGVwZW5kcyBjb21tb24gaW4gT3BlbkVtYmVkZGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgdGhlIGdyYXBoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZyBmb28KKworICAgICAkIGJpdGJha2UgLWcgLUkgdmlydHVhbC9rZXJuZWwgLUkgZWdsaWJjIGZvbworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbCBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZDgwMAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwKQEAgLTAsMCArMSwxODMwIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEiPgorICAgIDx0aXRsZT5TeW50YXggYW5kIE9wZXJhdG9yczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0YmFrZSBmaWxlcyBoYXZlIHRoZWlyIG93biBzeW50YXguCisgICAgICAgIFRoZSBzeW50YXggaGFzIHNpbWlsYXJpdGllcyB0byBzZXZlcmFsCisgICAgICAgIG90aGVyIGxhbmd1YWdlcyBidXQgYWxzbyBoYXMgc29tZSB1bmlxdWUgZmVhdHVyZXMuCisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSBzeW50YXggYW5kIG9wZXJhdG9ycworICAgICAgICBhcyB3ZWxsIGFzIHByb3ZpZGVzIGV4YW1wbGVzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1zeW50YXgnPgorICAgICAgICA8dGl0bGU+QmFzaWMgU3ludGF4PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhc2ljIHN5bnRheCBleGFtcGxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiYXNpYy12YXJpYWJsZS1zZXR0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5CYXNpYyBWYXJpYWJsZSBTZXR0aW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgPGZpbGVuYW1lPlZBUklBQkxFPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAidmFsdWUiLgorICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBvY2N1cnMgaW1tZWRpYXRlbHkgYXMgdGhlIHN0YXRlbWVudCBpcyBwYXJzZWQuCisgICAgICAgICAgICAgICAgSXQgaXMgYSAiaGFyZCIgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gInZhbHVlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBcyBleHBlY3RlZCwgaWYgeW91IGluY2x1ZGUgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgIGFuIGFzc2lnbm1lbnQsIHRoZSBzcGFjZXMgYXJlIHJldGFpbmVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSSUFCTEUgPSAiIHZhbHVlIgorICAgICBWQVJJQUJMRSA9ICJ2YWx1ZSAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPlZBUklBQkxFPC9maWxlbmFtZT4gdG8gIiIgc2V0cyBpdCB0byBhbiBlbXB0eSBzdHJpbmcsCisgICAgICAgICAgICAgICAgd2hpbGUgc2V0dGluZyB0aGUgdmFyaWFibGUgdG8gIiAiIHNldHMgaXQgdG8gYSBibGFuayBzcGFjZQorICAgICAgICAgICAgICAgIChpLmUuIHRoZXNlIGFyZSBub3QgdGhlIHNhbWUgdmFsdWVzKS4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gIiIKKyAgICAgVkFSSUFCTEUgPSAiICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBFeHBhbnNpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHZhcmlhYmxlcyByZWZlcmVuY2luZyBvbmUgYW5vdGhlcidzCisgICAgICAgICAgICAgICAgY29udGVudHMgdXNpbmcgYSBzeW50YXggdGhhdCBpcyBzaW1pbGFyIHRvIHNoZWxsIHNjcmlwdGluZy4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHJlc3VsdHMgaW4gPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgImF2YWwiIGFuZCA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGV2YWx1YXRpbmcgdG8KKyAgICAgICAgICAgICAgICAicHJlYXZhbHBvc3QiIGJhc2VkIG9uIHRoYXQgY3VycmVudCB2YWx1ZSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID0gImF2YWwiCisgICAgIEIgPSAicHJlJHtBfXBvc3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSB0aGF0IHdoZW5ldmVyIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VkLCBpdHMgZXZhbHVhdGlvbiB3aWxsIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGF0IHRoYXQgdGltZS4KKyAgICAgICAgICAgICAgICBUaHVzLCBsYXRlciBldmFsdWF0aW9ucyBvZiA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUgY291bGQgcmVzdWx0IGluIGRpZmZlcmVudCB2YWx1ZXMKKyAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy1hLWRlZmF1bHQtdmFsdWUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgYSBkZWZhdWx0IHZhbHVlICg/PSk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIj89IiBvcGVyYXRvciB0byBhY2hpZXZlIGEgInNvZnRlciIgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIGZvciBhIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBhc3NpZ25tZW50IGFsbG93cyB5b3UgdG8gZGVmaW5lIGEgdmFyaWFibGUgaWYgaXQKKyAgICAgICAgICAgICAgICBpcyB1bmRlZmluZWQgd2hlbiB0aGUgc3RhdGVtZW50IGlzIHBhcnNlZCwgYnV0IHRvIGxlYXZlIHRoZQorICAgICAgICAgICAgICAgIHZhbHVlIGFsb25lIGlmIHRoZSB2YXJpYWJsZSBoYXMgYSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID89ICJhdmFsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCBhdCB0aGUgdGltZSB0aGlzIHN0YXRlbWVudCBpcyBwYXJzZWQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHJldGFpbnMgaXRzIHZhbHVlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgc2V0IHRvICJhdmFsIi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhc3NpZ25tZW50IGlzIGltbWVkaWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBtdWx0aXBsZSAiPz0iIGFzc2lnbm1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRvIGEgc2luZ2xlIHZhcmlhYmxlIGV4aXN0LCB0aGUgZmlyc3Qgb2YgdGhvc2UgZW5kcyB1cCBnZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIHVzZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS13ZWFrLWRlZmF1bHQtdmFsdWUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgYSB3ZWFrIGRlZmF1bHQgdmFsdWUgKD8/PSk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSAid2Vha2VyIiBhc3NpZ25tZW50IHRoYW4gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc2VjdGlvbiBieSB1c2luZyB0aGUgIj8/PSIgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgVGhpcyBhc3NpZ25tZW50IGJlaGF2ZXMgaWRlbnRpY2FsIHRvICI/PSIgZXhjZXB0IHRoYXQgdGhlCisgICAgICAgICAgICAgICAgYXNzaWdubWVudCBpcyBtYWRlIGF0IHRoZSBlbmQgb2YgdGhlIHBhcnNpbmcgcHJvY2VzcyByYXRoZXIKKyAgICAgICAgICAgICAgICB0aGFuIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgd2hlbiBtdWx0aXBsZSAiPz89IiBhc3NpZ25tZW50cyBleGlzdCwgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICBvbmUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICBBbHNvLCBhbnkgIj0iIG9yICI/PSIgYXNzaWdubWVudCB3aWxsIG92ZXJyaWRlIHRoZSB2YWx1ZSBzZXQgd2l0aAorICAgICAgICAgICAgICAgICI/Pz0iLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEEgPz89ICJzb21ldmFsdWUiCisgICAgIEEgPz89ICJzb21lb3RoZXJ2YWx1ZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgYmVmb3JlIHRoZSBhYm92ZSBzdGF0ZW1lbnRzIGFyZSBwYXJzZWQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHJldGFpbnMgaXRzIHZhbHVlLgorICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgc2V0IHRvICJzb21lb3RoZXJ2YWx1ZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCB0aGlzIGFzc2lnbm1lbnQgaXMgYSAibGF6eSIgb3IgIndlYWsiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IGRvZXMgbm90IG9jY3VyIHVudGlsIHRoZSBlbmQKKyAgICAgICAgICAgICAgICBvZiB0aGUgcGFyc2luZyBwcm9jZXNzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ltbWVkaWF0ZS12YXJpYWJsZS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPkltbWVkaWF0ZSB2YXJpYWJsZSBleHBhbnNpb24gKDo9KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAiOj0iIG9wZXJhdG9yIHJlc3VsdHMgaW4gYSB2YXJpYWJsZSdzCisgICAgICAgICAgICAgICAgY29udGVudHMgYmVpbmcgZXhwYW5kZWQgaW1tZWRpYXRlbHksCisgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gd2hlbiB0aGUgdmFyaWFibGUgaXMgYWN0dWFsbHkgdXNlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFQgPSAiMTIzIgorICAgICBBIDo9ICIke0J9ICR7QX0gdGVzdCAke1R9IgorICAgICBUID0gIjQ1NiIKKyAgICAgQiA9ICIke1R9IGJ2YWwiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQyA6PSAiJHtDfWFwcGVuZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgInRlc3QgMTIzIiBiZWNhdXNlIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7QX08L2ZpbGVuYW1lPiBhdCB0aGUgdGltZSBvZiBwYXJzaW5nIGFyZSB1bmRlZmluZWQsCisgICAgICAgICAgICAgICAgd2hpY2ggbGVhdmVzICJ0ZXN0IDEyMyIuCisgICAgICAgICAgICAgICAgQW5kLCB0aGUgdmFyaWFibGUgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zICJjdmFsYXBwZW5kIiBzaW5jZSA8ZmlsZW5hbWU+JHtDfTwvZmlsZW5hbWU+IGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgZXhwYW5kcyB0byAiY3ZhbCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBlbmRpbmcgKCs9KSBhbmQgcHJlcGVuZGluZyAoPSspIFdpdGggU3BhY2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kaW5nIGFuZCBwcmVwZW5kaW5nIHZhbHVlcyBpcyBjb21tb24gYW5kIGNhbiBiZSBhY2NvbXBsaXNoZWQKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgIis9IiBhbmQgIj0rIiBvcGVyYXRvcnMuCisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIGluc2VydCBhIHNwYWNlIGJldHdlZW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICB2YWx1ZSBhbmQgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHZhbHVlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgdGFrZSBpbW1lZGlhdGUgZWZmZWN0IGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCID0gImJ2YWwiCisgICAgIEIgKz0gImFkZGl0aW9uYWxkYXRhIgorICAgICBDID0gImN2YWwiCisgICAgIEMgPSsgInRlc3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgImJ2YWwgYWRkaXRpb25hbGRhdGEiIGFuZCA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbnMgInRlc3QgY3ZhbCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nLXdpdGhvdXQtc3BhY2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBlbmRpbmcgKC49KSBhbmQgUHJlcGVuZGluZyAoPS4pIFdpdGhvdXQgU3BhY2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYXBwZW5kIG9yIHByZXBlbmQgdmFsdWVzIHdpdGhvdXQgYW4KKyAgICAgICAgICAgICAgICBpbnNlcnRlZCBzcGFjZSwgdXNlIHRoZSAiLj0iIGFuZCAiPS4iIG9wZXJhdG9ycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIHRha2UgaW1tZWRpYXRlIGVmZmVjdCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQiA9ICJidmFsIgorICAgICBCIC49ICJhZGRpdGlvbmFsZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDID0uICJ0ZXN0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJidmFsYWRkaXRpb25hbGRhdGEiIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4gY29udGFpbnMgInRlc3RjdmFsIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBlbmRpbmctYW5kLXByZXBlbmRpbmctb3ZlcnJpZGUtc3R5bGUtc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBlbmRpbmcgYW5kIFByZXBlbmRpbmcgKE92ZXJyaWRlIFN0eWxlIFN5bnRheCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gYXBwZW5kIGFuZCBwcmVwZW5kIGEgdmFyaWFibGUncyB2YWx1ZQorICAgICAgICAgICAgICAgIHVzaW5nIGFuIG92ZXJyaWRlIHN0eWxlIHN5bnRheC4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBzeW50YXgsIG5vIHNwYWNlcyBhcmUgaW5zZXJ0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyBkaWZmZXIgZnJvbSB0aGUgIjo9IiwgIi49IiwgIj0uIiwgIis9IiwgYW5kICI9KyIKKyAgICAgICAgICAgICAgICBvcGVyYXRvcnMgaW4gdGhhdCB0aGVpciBlZmZlY3RzIGFyZSBkZWZlcnJlZAorICAgICAgICAgICAgICAgIHVudGlsIGFmdGVyIHBhcnNpbmcgY29tcGxldGVzIHJhdGhlciB0aGFuIGJlaW5nIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQiA9ICJidmFsIgorICAgICBCX2FwcGVuZCA9ICIgYWRkaXRpb25hbCBkYXRhIgorICAgICBDID0gImN2YWwiCisgICAgIENfcHJlcGVuZCA9ICJhZGRpdGlvbmFsIGRhdGEgIgorICAgICBEID0gImR2YWwiCisgICAgIERfYXBwZW5kID0gImFkZGl0aW9uYWwgZGF0YSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICJidmFsIGFkZGl0aW9uYWwgZGF0YSIgYW5kIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICJhZGRpdGlvbmFsIGRhdGEgY3ZhbCIuCisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5EPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICJkdmFsYWRkaXRpb25hbCBkYXRhIi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY29udHJvbCBhbGwgc3BhY2luZyB3aGVuIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlIHN5bnRheC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVtb3Zpbmctb3ZlcnJpZGUtc3R5bGUtc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5SZW1vdmFsIChPdmVycmlkZSBTdHlsZSBTeW50YXgpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiByZW1vdmUgdmFsdWVzIGZyb20gbGlzdHMgdXNpbmcgdGhlIHJlbW92YWwKKyAgICAgICAgICAgICAgICBvdmVycmlkZSBzdHlsZSBzeW50YXguCisgICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhIHZhbHVlIGZvciByZW1vdmFsIGNhdXNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgdGhhdAorICAgICAgICAgICAgICAgIHZhbHVlIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIHN5bnRheCwgQml0QmFrZSBleHBlY3RzIG9uZSBvciBtb3JlIHN0cmluZ3MuCisgICAgICAgICAgICAgICAgU3Vycm91bmRpbmcgc3BhY2VzIGFyZSByZW1vdmVkIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PID0gIjEyMyA0NTYgNzg5IDEyMzQ1NiAxMjMgNDU2IDEyMyA0NTYiCisgICAgIEZPT19yZW1vdmUgPSAiMTIzIgorICAgICBGT09fcmVtb3ZlID0gIjQ1NiIKKyAgICAgRk9PMiA9ICJhYmMgZGVmIGdoaSBhYmNkZWYgYWJjIGRlZiBhYmMgZGVmIgorICAgICBGT08yX3JlbW92ZSA9ICJhYmMgZGVmIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiNzg5IDEyMzQ1NiIgYW5kIDxmaWxlbmFtZT5GT08yPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICJnaGkgYWJjZGVmIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1mbGFnLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+VmFyaWFibGUgRmxhZyBTeW50YXg8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBWYXJpYWJsZSBmbGFncyBhcmUgQml0QmFrZSdzIGltcGxlbWVudGF0aW9uIG9mIHZhcmlhYmxlIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBvciBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIGEgd2F5IG9mIHRhZ2dpbmcgZXh0cmEgaW5mb3JtYXRpb24gb250byBhIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIG91dCBhYm91dCB2YXJpYWJsZSBmbGFncyBpbiBnZW5lcmFsIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYWJsZS1mbGFncyc+VmFyaWFibGUgRmxhZ3M8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVmaW5lLCBhcHBlbmQsIGFuZCBwcmVwZW5kIHZhbHVlcyB0byB2YXJpYWJsZSBmbGFncy4KKyAgICAgICAgICAgICAgICBBbGwgdGhlIHN0YW5kYXJkIHN5bnRheCBvcGVyYXRpb25zIHByZXZpb3VzbHkgbWVudGlvbmVkIHdvcmsKKyAgICAgICAgICAgICAgICBmb3IgdmFyaWFibGUgZmxhZ3MgZXhjZXB0IGZvciBvdmVycmlkZSBzdHlsZSBzeW50YXgKKyAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPl9yZW1vdmU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8gc2V0IHZhcmlhYmxlIGZsYWdzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRk9PW2FdID0gImFiYyIKKyAgICAgRk9PW2JdID0gIjEyMyIKKyAgICAgRk9PW2FdICs9ICI0NTYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+Rk9PPC9maWxlbmFtZT4gaGFzIHR3byBmbGFnczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgaW1tZWRpYXRlbHkgc2V0IHRvICJhYmMiIGFuZCAiMTIzIiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YTwvZmlsZW5hbWU+IGZsYWcgYmVjb21lcyAiYWJjIDQ1NiIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vIG5lZWQgZXhpc3RzIHRvIHByZS1kZWZpbmUgdmFyaWFibGUgZmxhZ3MuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzaW1wbHkgc3RhcnQgdXNpbmcgdGhlbS4KKyAgICAgICAgICAgICAgICBPbmUgZXh0cmVtZWx5IGNvbW1vbiBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgIGlzIHRvIGF0dGFjaCBzb21lIGJyaWVmIGRvY3VtZW50YXRpb24gdG8gYSBCaXRCYWtlIHZhcmlhYmxlIGFzCisgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENBQ0hFW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBjYWNoZSBvZiB0aGUgbWV0YWRhdGEuIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmxpbmUtcHl0aG9uLXZhcmlhYmxlLWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+SW5saW5lIFB5dGhvbiBWYXJpYWJsZSBFeHBhbnNpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBpbmxpbmUgUHl0aG9uIHZhcmlhYmxlIGV4cGFuc2lvbiB0bworICAgICAgICAgICAgICAgIHNldCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREFURSA9ICIke0B0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLHRpbWUuZ210aW1lKCkpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHJlc3VsdHMgaW4gdGhlIDxmaWxlbmFtZT5EQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBiZWluZyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvYmFibHkgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiB0aGlzIGZlYXR1cmUgaXMgdG8gZXh0cmFjdAorICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZXMgZnJvbSBCaXRCYWtlJ3MgaW50ZXJuYWwgZGF0YSBkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaW5lcyBzZWxlY3QgdGhlIHZhbHVlcyBvZiBhIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgIGFuZCBpdHMgdmVyc2lvbiBudW1iZXIsIHJlc3BlY3RpdmVseToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKKyAgICAgUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvdmlkaW5nLXBhdGhuYW1lcyc+CisgICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIFBhdGhuYW1lczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBwYXRobmFtZXMgZm9yIHVzZSB3aXRoIEJpdEJha2UsCisgICAgICAgICAgICAgICAgZG8gbm90IHVzZSB0aGUgdGlsZGUgKCJ+IikgY2hhcmFjdGVyIGFzIGEgc2hvcnRjdXQKKyAgICAgICAgICAgICAgICBmb3IgeW91ciBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBtaWdodCBjYXVzZSBCaXRCYWtlIHRvIG5vdCByZWNvZ25pemUgdGhlCisgICAgICAgICAgICAgICAgcGF0aCBzaW5jZSBCaXRCYWtlIGRvZXMgbm90IGV4cGFuZCB0aGlzIGNoYXJhY3RlciBpbgorICAgICAgICAgICAgICAgIHRoZSBzYW1lIHdheSBhIHNoZWxsIHdvdWxkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbnN0ZWFkLCBwcm92aWRlIGEgZnVsbGVyIHBhdGggYXMgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGV4YW1wbGUgaWxsdXN0cmF0ZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAvaG9tZS9zY290dC1sZW5vdm8vTGF5ZXJBIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NvbmRpdGlvbmFsLXN5bnRheC1vdmVycmlkZXMnPgorICAgICAgICA8dGl0bGU+Q29uZGl0aW9uYWwgU3ludGF4IChPdmVycmlkZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gY29udHJvbCB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlCisgICAgICAgICAgICBwYXJzZXMgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gdXNlCisgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gYXMgY29uZGl0aW9uYWwgbWV0YWRhdGEsCisgICAgICAgICAgICB0YWxrcyBhYm91dCBrZXkgZXhwYW5zaW9uIGluIHJlbGF0aW9uc2hpcCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LCBhbmQgcHJvdmlkZXMgc29tZSBleGFtcGxlcworICAgICAgICAgICAgdG8gaGVscCB3aXRoIHVuZGVyc3RhbmRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uZGl0aW9uYWwtbWV0YWRhdGEnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmRpdGlvbmFsIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHRvIGNvbmRpdGlvbmFsbHkgc2VsZWN0CisgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIGEgdmFyaWFibGUgYW5kIHRvIGNvbmRpdGlvbmFsbHkKKyAgICAgICAgICAgICAgICBhcHBlbmQgb3IgcHJlcGVuZCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdGluZyBhIFZhcmlhYmxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbG9uLWNoYXJhY3Rlci1zZXBhcmF0ZWQgbGlzdCB0aGF0IGNvbnRhaW5zIGl0ZW1zCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc2F0aXNmeSBjb25kaXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgaWYgeW91IGhhdmUgYSB2YXJpYWJsZSB0aGF0IGlzIGNvbmRpdGlvbmFsIG9uIOKAnGFybeKAnSwgYW5kIOKAnGFybeKAnQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LCB0aGVuIHRoZSDigJxhcm3igJ0tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHZhcmlhYmxlIGlzIHVzZWQgcmF0aGVyIHRoYW4gdGhlIG5vbi1jb25kaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImFyY2hpdGVjdHVyZTpvczptYWNoaW5lIgorICAgICBURVNUID0gImRlZmF1bHQiCisgICAgIFRFU1Rfb3MgPSAib3NzcGVjaWZpYyIKKyAgICAgVEVTVF9ub292ZXJyaWRlID0gIm90aGVyY29uZHZhbHVlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBsaXN0cyB0aHJlZSBvdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJjaGl0ZWN0dXJlIiwgIm9zIiwgYW5kICJtYWNoaW5lIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+VEVTVDwvZmlsZW5hbWU+IGJ5IGl0c2VsZiBoYXMgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiAiZGVmYXVsdCIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2VsZWN0IHRoZSBvcy1zcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSA8ZmlsZW5hbWU+VEVTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBieSBhcHBlbmRpbmcgdGhlICJvcyIgb3ZlcnJpZGUgdG8gdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLjxmaWxlbmFtZT5URVNUX29zPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGlzLCBjb25zaWRlciBhIHByYWN0aWNhbCBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3N1bWVzIGFuIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZCBMaW51eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpbmVzIGZyb20gdGhlIHJlY2lwZSBmaWxlIGZpcnN0IHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgYnJhbmNoIHZhcmlhYmxlIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhIGRlZmF1bHQgdmFsdWUsIHRoZW4gY29uZGl0aW9uYWxseSBvdmVycmlkZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11YXJtICA9ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKKyAgICAgS0JSQU5DSF9xZW11bWlwcyA9ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKKyAgICAgS0JSQU5DSF9xZW11cHBjICA9ICJzdGFuZGFyZC9xZW11cHBjIgorICAgICBLQlJBTkNIX3FlbXV4ODYgID0gInN0YW5kYXJkL2NvbW1vbi1wYy9iYXNlIgorICAgICBLQlJBTkNIX3FlbXV4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorICAgICBLQlJBTkNIX3FlbXVtaXBzNjQgPSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmRpbmcgYW5kIFByZXBlbmRpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYWxzbyBzdXBwb3J0cyBhcHBlbmQgYW5kIHByZXBlbmQgb3BlcmF0aW9ucyB0bworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIGJhc2VkIG9uIHdoZXRoZXIgYSBzcGVjaWZpYyBpdGVtIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImdsaWJjIG5jdXJzZXMiCisgICAgIE9WRVJSSURFUyA9ICJtYWNoaW5lOmxvY2FsIgorICAgICBERVBFTkRTX2FwcGVuZF9tYWNoaW5lID0gImxpYm1hZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2xpYmMgbmN1cnNlcyBsaWJtYWQiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdXNpbmcgYW4gT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmaWxlIGFzIGFuIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBsaW5lcyB3aWxsIGNvbmRpdGlvbmFsbHkgYXBwZW5kIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBiYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBhcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2tleS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPktleSBFeHBhbnNpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBLZXkgZXhwYW5zaW9uIGhhcHBlbnMgd2hlbiB0aGUgQml0QmFrZSBkYXRhc3RvcmUgaXMgZmluYWxpemVkCisgICAgICAgICAgICAgICAganVzdCBiZWZvcmUgQml0QmFrZSBleHBhbmRzIG92ZXJyaWRlcy4KKyAgICAgICAgICAgICAgICBUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBJHtCfSA9ICJYIgorICAgICBCID0gIjIiCisgICAgIEEyID0gIlkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYWZ0ZXIgYWxsIHRoZSBwYXJzaW5nIGlzIGNvbXBsZXRlLCBhbmQKKyAgICAgICAgICAgICAgICBiZWZvcmUgYW55IG92ZXJyaWRlcyBhcmUgaGFuZGxlZCwgQml0QmFrZSBleHBhbmRzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7Qn08L2ZpbGVuYW1lPiBpbnRvICIyIi4KKyAgICAgICAgICAgICAgICBUaGlzIGV4cGFuc2lvbiBjYXVzZXMgPGZpbGVuYW1lPkEyPC9maWxlbmFtZT4sIHdoaWNoIHdhcworICAgICAgICAgICAgICAgIHNldCB0byAiWSIgYmVmb3JlIHRoZSBleHBhbnNpb24sIHRvIGJlY29tZSAiWCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtaW50ZXJhY3Rpb24td29ya2VkLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlc3BpdGUgdGhlIHByZXZpb3VzIGV4cGxhbmF0aW9ucyB0aGF0IHNob3cgdGhlIGRpZmZlcmVudCBmb3JtcyBvZgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluaXRpb25zLCBpdCBjYW4gYmUgaGFyZCB0byB3b3JrCisgICAgICAgICAgICAgICAgb3V0IGV4YWN0bHkgd2hhdCBoYXBwZW5zIHdoZW4gdmFyaWFibGUgb3BlcmF0b3JzLCBjb25kaXRpb25hbAorICAgICAgICAgICAgICAgIG92ZXJyaWRlcywgYW5kIHVuY29uZGl0aW9uYWwgb3ZlcnJpZGVzIGFyZSBjb21iaW5lZC4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc29tZSBjb21tb24gc2NlbmFyaW9zIGFsb25nCisgICAgICAgICAgICAgICAgd2l0aCBleHBsYW5hdGlvbnMgZm9yIHZhcmlhYmxlIGludGVyYWN0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGNvbmZ1c2UgdXNlcnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIG9mdGVuIGNvbmZ1c2lvbiBjb25jZXJuaW5nIHRoZSBvcmRlciBpbiB3aGljaAorICAgICAgICAgICAgICAgIG92ZXJyaWRlcyBhbmQgdmFyaW91cyAiYXBwZW5kIiBvcGVyYXRvcnMgdGFrZSBlZmZlY3QuCisgICAgICAgICAgICAgICAgUmVjYWxsIHRoYXQgYW4gYXBwZW5kIG9yIHByZXBlbmQgb3BlcmF0aW9uIHVzaW5nICJfYXBwZW5kIgorICAgICAgICAgICAgICAgIGFuZCAiX3ByZXBlbmQiIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBpbW1lZGlhdGUgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIGFzIHdvdWxkICIrPSIsICIuPSIsICI9KyIsIG9yICI9LiIuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImZvbyIKKyAgICAgQSA9ICJaIgorICAgICBBX2Zvb19hcHBlbmQgPSAiWCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgIHVuY29uZGl0aW9uYWxseSBzZXQgdG8gIloiIGFuZCAiWCIgaXMKKyAgICAgICAgICAgICAgICB1bmNvbmRpdGlvbmFsbHkgYW5kIGltbWVkaWF0ZWx5IGFwcGVuZGVkIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEJlY2F1c2Ugb3ZlcnJpZGVzIGhhdmUgbm90IGJlZW4gYXBwbGllZCB5ZXQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4gaXMgc2V0IHRvICJYIiBkdWUgdG8gdGhlIGFwcGVuZAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IHNpbXBseSBlcXVhbHMgIloiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcHBseWluZyBvdmVycmlkZXMsIGhvd2V2ZXIsIGNoYW5nZXMgdGhpbmdzLgorICAgICAgICAgICAgICAgIFNpbmNlICJmb28iIGlzIGxpc3RlZCBpbiA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgdGhlIGNvbmRpdGlvbmFsIHZhcmlhYmxlIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgcmVwbGFjZWQKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSAiZm9vIiB2ZXJzaW9uLCB3aGljaCBpcyBlcXVhbCB0byAiWCIuCisgICAgICAgICAgICAgICAgU28gZWZmZWN0aXZlbHksIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IHJlcGxhY2VzIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGNoYW5nZXMgdGhlIG9yZGVyIG9mIHRoZSBvdmVycmlkZSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgYXBwZW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImZvbyIKKyAgICAgQSA9ICJaIgorICAgICBBX2FwcGVuZF9mb28gPSAiWCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgYmVmb3JlIG92ZXJyaWRlcyBhcmUgaGFuZGxlZCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCB0byAiWiIgYW5kIDxmaWxlbmFtZT5BX2FwcGVuZF9mb288L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGlzIHNldCB0byAiWCIuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgb3ZlcnJpZGUgZm9yICJmb28iIGlzIGFwcGxpZWQsIGhvd2V2ZXIsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBnZXRzIGFwcGVuZGVkIHdpdGggIlgiLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWVzICJaWCIuCisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgc3BhY2VzIGFyZSBub3QgYXBwZW5kZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGhhcyB0aGUgb3JkZXIgb2YgdGhlIGFwcGVuZHMgYW5kIG92ZXJyaWRlcyByZXZlcnNlZAorICAgICAgICAgICAgICAgIGJhY2sgYXMgaW4gdGhlIGZpcnN0IGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBPVkVSUklERVMgPSAiZm9vIgorICAgICBBID0gIlkiCisgICAgIEFfZm9vX2FwcGVuZCA9ICJaIgorICAgICBBX2Zvb19hcHBlbmQgKz0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIGJlZm9yZSBhbnkgb3ZlcnJpZGVzIGFyZSByZXNvbHZlZCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCB0byAiWSIgdXNpbmcgYW4gaW1tZWRpYXRlIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgICAgQWZ0ZXIgdGhpcyBpbW1lZGlhdGUgYXNzaWdubWVudCwgPGZpbGVuYW1lPkFfZm9vPC9maWxlbmFtZT4gaXMgc2V0CisgICAgICAgICAgICAgICAgdG8gIloiLCBhbmQgdGhlbiBmdXJ0aGVyIGFwcGVuZGVkIHdpdGgKKyAgICAgICAgICAgICAgICAiWCIgbGVhdmluZyB0aGUgdmFyaWFibGUgc2V0IHRvICJaIFgiLgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGFwcGx5aW5nIHRoZSBvdmVycmlkZSBmb3IgImZvbyIgcmVzdWx0cyBpbiB0aGUgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGJlY29taW5nICJaIFgiIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyByZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaW5hbCBleGFtcGxlIG1peGVzIGluIHNvbWUgdmFyeWluZyBvcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID0gIjEiCisgICAgIEFfYXBwZW5kID0gIjIiCisgICAgIEFfYXBwZW5kID0gIjMiCisgICAgIEEgKz0gIjQiCisgICAgIEEgLj0gIjUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHRoZSB0eXBlIG9mIGFwcGVuZCBvcGVyYXRvcnMgYXJlIGFmZmVjdGluZyB0aGUKKyAgICAgICAgICAgICAgICBvcmRlciBvZiBhc3NpZ25tZW50cyBhcyBCaXRCYWtlIHBhc3NlcyB0aHJvdWdoIHRoZSBjb2RlCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgdGltZXMuCisgICAgICAgICAgICAgICAgSW5pdGlhbGx5LCA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHNldCB0byAiMSA0NSIgYmVjYXVzZQorICAgICAgICAgICAgICAgIG9mIHRoZSB0aHJlZSBzdGF0ZW1lbnRzIHRoYXQgdXNlIGltbWVkaWF0ZSBvcGVyYXRvcnMuCisgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlc2UgYXNzaWdubWVudHMgYXJlIG1hZGUsIEJpdEJha2UgYXBwbGllcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgVGhvc2Ugb3BlcmF0aW9ucyByZXN1bHQgaW4gPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWluZyAiMSA0NTIzIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzaGFyaW5nLWZ1bmN0aW9uYWxpdHknPgorICAgICAgICA8dGl0bGU+U2hhcmluZyBGdW5jdGlvbmFsaXR5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxsb3dzIGZvciBtZXRhZGF0YSBzaGFyaW5nIHRocm91Z2ggaW5jbHVkZSBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGFuZCBjbGFzcyBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgcGllY2Ugb2YgY29tbW9uIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgIHN1Y2ggYXMgYSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3Ugd2FudCB0byBzaGFyZSBiZXR3ZWVuCisgICAgICAgICAgICBtb3JlIHRoYW4gb25lIHJlY2lwZS4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgY3JlYXRpbmcgYSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjb21tb24gZnVuY3Rpb25hbGl0eSBhbmQgdGhlbiB1c2luZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIGluIHlvdXIgcmVjaXBlcyB0bworICAgICAgICAgICAgaW5oZXJpdCB0aGUgY2xhc3Mgd291bGQgYmUgYSBjb21tb24gd2F5IHRvIHNoYXJlIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIG1lY2hhbmlzbXMgQml0QmFrZSBwcm92aWRlcyB0bworICAgICAgICAgICAgYWxsb3cgeW91IHRvIHNoYXJlIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiByZWNpcGVzLgorICAgICAgICAgICAgU3BlY2lmaWNhbGx5LCB0aGUgbWVjaGFuaXNtcyBpbmNsdWRlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2NhdGluZy1pbmNsdWRlLWFuZC1jbGFzcy1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+TG9jYXRpbmcgSW5jbHVkZSBhbmQgQ2xhc3MgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBuZWVkZWQgaW5jbHVkZSBhbmQgY2xhc3MgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8KKyAgICAgICAgICAgICAgICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzIHRvIGJlIGZvdW5kIGJ5IEJpdEJha2UsCisgICAgICAgICAgICAgICAgdGhleSBuZWVkIHRvIGJlIGxvY2F0ZWQgaW4gYSAiY2xhc3NlcyIgc3ViZGlyZWN0b3J5IHRoYXQgY2FuCisgICAgICAgICAgICAgICAgYmUgZm91bmQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luaGVyaXQtZGlyZWN0aXZlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gd3JpdGluZyBhIHJlY2lwZSBvciBjbGFzcyBmaWxlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0byBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYSBjbGFzcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEJpdEJha2Ugb25seSBzdXBwb3J0cyB0aGlzIGRpcmVjdGl2ZSB3aGVuIHVzZWQgd2l0aGluIHJlY2lwZQorICAgICAgICAgICAgICAgIGFuZCBjbGFzcyBmaWxlcyAoaS5lLiA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgaXMgYSBydWRpbWVudGFyeQorICAgICAgICAgICAgICAgIG1lYW5zIG9mIHNwZWNpZnlpbmcgd2hhdCBjbGFzc2VzIG9mIGZ1bmN0aW9uYWxpdHkgeW91cgorICAgICAgICAgICAgICAgIHJlY2lwZXMgcmVxdWlyZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBlYXNpbHkgYWJzdHJhY3Qgb3V0IHRoZSB0YXNrcyBpbnZvbHZlZCBpbgorICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGEgcGFja2FnZSB0aGF0IHVzZXMgQXV0b2NvbmYgYW5kIEF1dG9tYWtlIGFuZCBwdXQKKyAgICAgICAgICAgICAgICB0aG9zZSB0YXNrcyBpbnRvIGEgY2xhc3MgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3VyIHJlY2lwZXMgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgdG8gaW5oZXJpdCBhbiA8ZmlsZW5hbWU+YXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBmaWxlIHdvdWxkIGNvbnRhaW4gY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHVzaW5nCisgICAgICAgICAgICAgICAgQXV0b3Rvb2xzIHRoYXQgY291bGQgYmUgc2hhcmVkIGFjcm9zcyByZWNpcGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5oZXJpdCBhdXRvdG9vbHMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBCaXRCYWtlIHdvdWxkIHNlYXJjaCBmb3IgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgYW55IHZhbHVlcyBhbmQgZnVuY3Rpb25zIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0ZWQgY2xhc3Mgd2l0aGluIHlvdXIgcmVjaXBlIGJ5IGRvaW5nIHNvCisgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSAiaW5oZXJpdCIgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmNsdWRlLWRpcmVjdGl2ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVuZGVyc3RhbmRzIHRoZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLgorICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0aXZlIGNhdXNlcyBCaXRCYWtlIHRvIHBhcnNlIHdoYXRldmVyIGZpbGUgeW91IHNwZWNpZnksCisgICAgICAgICAgICAgICAgYW5kIHRvIGluc2VydCB0aGF0IGZpbGUgYXQgdGhhdCBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICBUaGUgZGlyZWN0aXZlIGlzIG11Y2ggbGlrZSBpdHMgZXF1aXZhbGVudCBpbiBNYWtlIGV4Y2VwdAorICAgICAgICAgICAgICAgIHRoYXQgaWYgdGhlIHBhdGggc3BlY2lmaWVkIG9uIHRoZSBpbmNsdWRlIGxpbmUgaXMgYSByZWxhdGl2ZQorICAgICAgICAgICAgICAgIHBhdGgsIEJpdEJha2UgbG9jYXRlcyB0aGUgZmlyc3QgZmlsZSBpdCBjYW4gZmluZAorICAgICAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWRlZCBhIHJlY2lwZSB0byBpbmNsdWRlIHNvbWUKKyAgICAgICAgICAgICAgICBzZWxmLXRlc3QgZGVmaW5pdGlvbnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmNsdWRlIHRlc3RfZGVmcy5pbmMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIGFuIGVycm9yIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaWYgdGhlIGZpbGUgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSBpbmNsdWRpbmcgaXMgZXhwZWN0ZWQgdG8gZXhpc3QsIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlcXVpcmUtaW5jbHVzaW9uJz48ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIG1ha2VzIHN1cmUgdGhhdCBhbiBlcnJvciBpcyBwcm9kdWNlZCBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlcXVpcmUtaW5jbHVzaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IERpcmVjdGl2ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdW5kZXJzdGFuZHMgdGhlIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RpdmUuCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RpdmUgYmVoYXZlcyBqdXN0IGxpa2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHJhaXNlcyBhIHBhcnNpbmcgZXJyb3IgaWYgdGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQgY2Fubm90CisgICAgICAgICAgICAgICAgYmUgZm91bmQuCisgICAgICAgICAgICAgICAgVGh1cywgYW55IGZpbGUgeW91IHJlcXVpcmUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgZmlsZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgYmVpbmcgcGFyc2VkIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0aXZlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW1pbGFyIHRvIGhvdyBCaXRCYWtlIGhhbmRsZXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbmNsdWRlLWRpcmVjdGl2ZSc+PGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgaWYgdGhlIHBhdGggc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgb24gdGhlIHJlcXVpcmUgbGluZSBpcyBhIHJlbGF0aXZlIHBhdGgsIEJpdEJha2UgbG9jYXRlcworICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBmaWxlIGl0IGNhbiBmaW5kIHdpdGhpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgdHdvIHZlcnNpb25zIG9mIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmZvb18xLjIuMi5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMi4wLjAuYmI8L2ZpbGVuYW1lPikgd2hlcmUKKyAgICAgICAgICAgICAgICBlYWNoIHZlcnNpb24gY29udGFpbnMgc29tZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSB0aGF0IGNvdWxkIGJlCisgICAgICAgICAgICAgICAgc2hhcmVkLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBjcmVhdGUgYW4gaW5jbHVkZSBmaWxlIG5hbWVkIDxmaWxlbmFtZT5mb28uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBjb21tb24gZGVmaW5pdGlvbnMgbmVlZGVkIHRvIGJ1aWxkICJmb28iLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIHN1cmUgPGZpbGVuYW1lPmZvby5pbmM8L2ZpbGVuYW1lPiBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgZGlyZWN0b3J5IGFzIHlvdXIgdHdvIHJlY2lwZSBmaWxlcyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlc2UgY29uZGl0aW9ucyBhcmUgc2V0IHVwLCB5b3UgY2FuIHNoYXJlIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgdXNpbmcgYSA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBmcm9tIHdpdGhpbiBlYWNoCisgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVxdWlyZSBmb28uaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luaGVyaXQtY29uZmlndXJhdGlvbi1kaXJlY3RpdmUnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4gQ29uZmlndXJhdGlvbiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4gZGlyZWN0aXZlIHRvCisgICAgICAgICAgICAgICAgaW5oZXJpdCBhIGNsYXNzLgorICAgICAgICAgICAgICAgIEJpdEJha2Ugb25seSBzdXBwb3J0cyB0aGlzIGRpcmVjdGl2ZSB3aGVuIHVzZWQgd2l0aGluCisgICAgICAgICAgICAgICAgYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWRlZCB0byBpbmhlcml0IGEgY2xhc3MKKyAgICAgICAgICAgICAgICBmaWxlIGNhbGxlZCA8ZmlsZW5hbWU+YWJjLmJiY2xhc3M8L2ZpbGVuYW1lPiBmcm9tIGEKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImFiYyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSBjYXVzZXMgdGhlIG5hbWVkCisgICAgICAgICAgICAgICAgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0IHRoZSBwb2ludCBvZiB0aGUgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgQXMgd2l0aCB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgbXVzdCBiZSBsb2NhdGVkIGluIGEKKyAgICAgICAgICAgICAgICAiY2xhc3NlcyIgc3ViZGlyZWN0b3J5IGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGVzIGFyZSBwYXJzZWQKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgZHVyaW5nIEJpdEJha2UncyBleGVjdXRpb24sIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4gdG8gaW5oZXJpdCBhIGNsYXNzIGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzIHRoZSBjbGFzcyBnbG9iYWxseSAoaS5lLiBmb3IgYWxsIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmdW5jdGlvbnMnPgorICAgICAgICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHdpdGggbW9zdCBsYW5ndWFnZXMsIGZ1bmN0aW9ucyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0CisgICAgICAgICAgICBhcmUgdXNlZCB0byBidWlsZCB1cCBvcGVyYXRpb25zIGludG8gdGFza3MuCisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9uczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGVsbCBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gc2hlbGwgc2NyaXB0IGFuZCBleGVjdXRlZCBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgYXMgZnVuY3Rpb25zLCB0YXNrcywgb3IgYm90aC4KKyAgICAgICAgICAgICAgICAgICAgVGhleSBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgb3RoZXIgc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2UgU3R5bGUgUHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5IEJpdEJha2Ugb3Igb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyB1c2luZyA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QeXRob24gRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkgUHl0aG9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFub255bW91cyBQeXRob24gRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgZXhlY3V0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgZnVuY3Rpb24sIHlvdSBjYW4gb25seQorICAgICAgICAgICAgZGVmaW5lIHRoZW0gaW4gY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgYW5kIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pCisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzaGVsbC1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPlNoZWxsIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIHNoZWxsIHNjcmlwdCBhbmQgZXhlY3V0ZWQgZWl0aGVyCisgICAgICAgICAgICAgICAgZGlyZWN0bHkgYXMgZnVuY3Rpb25zLCB0YXNrcywgb3IgYm90aC4KKyAgICAgICAgICAgICAgICBUaGV5IGNhbiBhbHNvIGJlIGNhbGxlZCBieSBvdGhlciBzaGVsbCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzb21lX2Z1bmN0aW9uICgpIHsKKyAgICAgICAgIGVjaG8gIkhlbGxvIFdvcmxkIgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4geW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICBvciBjbGFzcyBmaWxlcywgeW91IG5lZWQgdG8gZm9sbG93IHRoZSBzaGVsbCBwcm9ncmFtbWluZworICAgICAgICAgICAgICAgIHJ1bGVzLgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHRzIGFyZSBleGVjdXRlZCBieSA8ZmlsZW5hbWU+L2Jpbi9zaDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIG1heSBub3QgYmUgYSBiYXNoIHNoZWxsIGJ1dCBtaWdodCBiZSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5kYXNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgdXNlIEJhc2gtc3BlY2lmaWMgc2NyaXB0IChiYXNoaXNtcykuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYml0YmFrZS1zdHlsZS1weXRob24tZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5CaXRCYWtlIFN0eWxlIFB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieQorICAgICAgICAgICAgICAgIEJpdEJha2Ugb3Igb3RoZXIgUHl0aG9uIGZ1bmN0aW9ucyB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5leGVjX2Z1bmMoKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbiBleGFtcGxlIEJpdEJha2UgZnVuY3Rpb24gaXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gc29tZV9weXRob25fZnVuY3Rpb24gKCkgeworICAgICAgICAgZC5zZXRWYXIoIlRFWFQiLCAiSGVsbG8gV29ybGQiKQorICAgICAgICAgcHJpbnQgZC5nZXRWYXIoIlRFWFQiLCBUcnVlKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIFB5dGhvbiAiYmIiIGFuZCAib3MiIG1vZHVsZXMgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICBpbXBvcnRlZCwgeW91IGRvIG5vdCBuZWVkIHRvIGltcG9ydCB0aGVzZSBtb2R1bGVzLgorICAgICAgICAgICAgICAgIEFsc28gaW4gdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zLCB0aGUgZGF0YXN0b3JlICgiZCIpCisgICAgICAgICAgICAgICAgaXMgYSBnbG9iYWwgdmFyaWFibGUgYW5kIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHl0aG9uLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+UHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIGFyZSBleGVjdXRlZCBieQorICAgICAgICAgICAgICAgIG90aGVyIFB5dGhvbiBjb2RlLgorICAgICAgICAgICAgICAgIEV4YW1wbGVzIG9mIFB5dGhvbiBmdW5jdGlvbnMgYXJlIHV0aWxpdHkgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgdGhhdCB5b3UgaW50ZW5kIHRvIGNhbGwgZnJvbSBpbi1saW5lIFB5dGhvbiBvcgorICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVmIGdldF9kZXBlbmRzKGQpOgorICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVDT05ESVRJT04nLCBUcnVlKToKKyAgICAgICAgICAgICByZXR1cm4gImRlcGVuZGVuY3l3aXRoY29uZCIKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgcmV0dXJuICJkZXBlbmRlbmN5IgorICAgICBTT01FQ09ORElUSU9OID0gIjEiCisgICAgIERFUEVORFMgPSAiJHtAZ2V0X2RlcGVuZHMoZCl9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHdvdWxkIHJlc3VsdCBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbmluZyA8ZmlsZW5hbWU+ZGVwZW5kZW5jeXdpdGhjb25kPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgdGhpbmdzIHRvIGtub3cgYWJvdXQgUHl0aG9uIGZ1bmN0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHl0aG9uIGZ1bmN0aW9ucyBjYW4gdGFrZSBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgQml0QmFrZSBkYXRhc3RvcmUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgcGFzcyBpdCBpbiBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgImJiIiBhbmQgIm9zIiBQeXRob24gbW9kdWxlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGltcG9ydCB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYW5vbnltb3VzLXB5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkFub255bW91cyBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBydW4gc29tZSBjb2RlIGR1cmluZworICAgICAgICAgICAgICAgIHBhcnNpbmcgdG8gc2V0IHZhcmlhYmxlcyBvciB0byBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICBwcm9ncmFtbWF0aWNhbGx5LgorICAgICAgICAgICAgICAgIFRvIGRvIHRoaXMsIHlvdSBjYW4gZGVmaW5lIGFuIGFub255bW91cyBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY29uZGl0aW9uYWxseSBzZXRzIGEKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYW5vdGhlciB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgICAgICBpZiBkLmdldFZhcignU09NRVZBUicsIFRydWUpID09ICd2YWx1ZSc6CisgICAgICAgICAgICAgZC5zZXRWYXIoJ0FOT1RIRVJWQVInLCAndmFsdWUyJykKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgIl9fYW5vbnltb3VzIiBmdW5jdGlvbiBuYW1lIGlzIG9wdGlvbmFsLCBzbyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZXhhbXBsZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgYWJvdmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gKCkgeworICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVWQVInLCBUcnVlKSA9PSAndmFsdWUnOgorICAgICAgICAgICAgIGQuc2V0VmFyKCdBTk9USEVSVkFSJywgJ3ZhbHVlMicpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSB1bmxpa2Ugb3RoZXIgUHl0aG9uIGZ1bmN0aW9ucyBhbm9ueW1vdXMKKyAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBkdXJpbmcgcGFyc2luZywgdGhlCisgICAgICAgICAgICAgICAgImQiIHZhcmlhYmxlIHdpdGhpbiBhbiBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9uIHJlcHJlc2VudHMKKyAgICAgICAgICAgICAgICB0aGUgZGF0YXN0b3JlIGZvciB0aGUgZW50aXJlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBjYW4gc2V0IHZhcmlhYmxlIHZhbHVlcyBoZXJlIGFuZAorICAgICAgICAgICAgICAgIHRob3NlIHZhbHVlcyBjYW4gYmUgcGlja2VkIHVwIGJ5IG90aGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdmbGV4aWJsZS1pbmhlcml0YW5jZS1mb3ItY2xhc3MtZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5GbGV4aWJsZSBJbmhlcml0YW5jZSBmb3IgQ2xhc3MgRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhyb3VnaCBjb2RpbmcgdGVjaG5pcXVlcyBhbmQgdGhlIHVzZSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4sIEJpdEJha2Ugc3VwcG9ydHMKKyAgICAgICAgICAgICAgICBleHBvcnRpbmcgYSBmdW5jdGlvbiBmcm9tIGEgY2xhc3Mgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIGNsYXNzIGZ1bmN0aW9uIGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICBvZiB0aGUgZnVuY3Rpb24sIGJ1dCBjYW4gc3RpbGwgYmUgY2FsbGVkIGlmIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgaW5oZXJpdGluZyB0aGUgY2xhc3MgbmVlZHMgdG8gZGVmaW5lIGl0cyBvd24gdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdW5kZXJzdGFuZCB0aGUgYmVuZWZpdHMgb2YgdGhpcyBmZWF0dXJlLCBjb25zaWRlcgorICAgICAgICAgICAgICAgIHRoZSBiYXNpYyBzY2VuYXJpbyB3aGVyZSBhIGNsYXNzIGRlZmluZXMgYSB0YXNrIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYW5kIHlvdXIgcmVjaXBlIGluaGVyaXRzIHRoZSBjbGFzcy4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGJhc2ljIHNjZW5hcmlvLCB5b3VyIHJlY2lwZSBpbmhlcml0cyB0aGUgdGFzaworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzIGRlZmluZWQgaW4gdGhlIGNsYXNzLgorICAgICAgICAgICAgICAgIElmIGRlc2lyZWQsIHlvdXIgcmVjaXBlIGNhbiBhZGQgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnkgdXNpbmcgdGhlICJfcHJlcGVuZCIgb3IgIl9hcHBlbmQiIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHksIG9yIGl0IGNhbiByZWRlZmluZSB0aGUgZnVuY3Rpb24gY29tcGxldGVseS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBpdCByZWRlZmluZXMgdGhlIGZ1bmN0aW9uLCB0aGVyZSBpcworICAgICAgICAgICAgICAgIG5vIG1lYW5zICBmb3IgaXQgdG8gY2FsbCB0aGUgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiBwcm92aWRlcyBhIG1lY2hhbmlzbQorICAgICAgICAgICAgICAgIHRoYXQgZW5hYmxlcyB0aGUgcmVjaXBlJ3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gbWFrZSB1c2Ugb2YgdGhpcyB0ZWNobmlxdWUsIHlvdSBuZWVkIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0aGluZ3MgaW4gcGxhY2U6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIG5lZWRzIHRvIGRlZmluZSB0aGUgZnVuY3Rpb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPmNsYXNzbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPl88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5mdW5jdGlvbm5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgY2xhc3MgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhci5iYmNsYXNzPC9maWxlbmFtZT4gYW5kIGEgZnVuY3Rpb24gbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPiwgdGhlIGNsYXNzIG11c3QgZGVmaW5lIHRoZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYmFyX2RvX2ZvbworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBuZWVkcyB0byBjb250YWluIHRoZSA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhQT1JUX0ZVTkNUSU9OUyA8cmVwbGFjZWFibGU+ZnVuY3Rpb25uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb250aW51aW5nIHdpdGggdGhlIHNhbWUgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlIDxmaWxlbmFtZT5iYXIuYmJjbGFzczwvZmlsZW5hbWU+IHdvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFBPUlRfRlVOQ1RJT05TIGRvX2ZvbworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGFwcHJvcHJpYXRlbHkgZnJvbSB3aXRoaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIGlmIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBjYWxsIHRoZSBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBjYWxsIDxmaWxlbmFtZT5iYXJfZG9fZm9vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4gd2FzIGEgc2hlbGwgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+IHdhcyB1c2VkIGFzIGFib3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSdzIGZ1bmN0aW9uIGNvdWxkIGNvbmRpdGlvbmFsbHkgY2FsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2ZvbygpIHsKKyAgICAgICAgICAgICBpZiBbIHNvbWVjb25kaXRpb24gXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGJhcl9kb19mb28KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAjIERvIHNvbWV0aGluZyBlbHNlCisgICAgICAgICAgICAgZmkKKyAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2FsbCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGFzIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlLCBjYWxsIGl0IGFzIDxmaWxlbmFtZT5kb19mb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFdpdGggdGhlc2UgY29uZGl0aW9ucyBtZXQsIHlvdXIgc2luZ2xlIHJlY2lwZQorICAgICAgICAgICAgICAgIGNhbiBmcmVlbHkgY2hvb3NlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZmlsZSBhbmQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IHVwIHRoZXNlIGNvbmRpdGlvbnMsIHlvdSBhcmUgbGltaXRlZCB0byB1c2luZyBvbmUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBvciB0aGUgb3RoZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGFza3MnPgorICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGFza3MgYXJlIEJpdEJha2UgZXhlY3V0aW9uIHVuaXRzIHRoYXQgb3JpZ2luYXRlIGFzCisgICAgICAgICAgICBmdW5jdGlvbnMgYW5kIG1ha2UgdXAgdGhlIHN0ZXBzIHRoYXQgQml0QmFrZSBuZWVkcyB0byBydW4KKyAgICAgICAgICAgIGZvciBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICBUYXNrcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGFuZCBjbGFzcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHRhc2sgbmFtZXMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICJkb18iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSB0YXNrIHRoYXQgcHJpbnRzIG91dCB0aGUgZGF0ZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIGRvX3ByaW50ZGF0ZSAoKSB7CisgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgcHJpbnQgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdGltZS5nbXRpbWUoKSkKKyAgICAgfQorICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm9tb3RpbmctYS1mdW5jdGlvbi10by1hLXRhc2snPgorICAgICAgICAgICAgPHRpdGxlPlByb21vdGluZyBhIEZ1bmN0aW9uIHRvIGEgVGFzazwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFueSBmdW5jdGlvbiBjYW4gYmUgcHJvbW90ZWQgdG8gYSB0YXNrIGJ5IGFwcGx5aW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIGFsc28gZGVzY3JpYmVzCisgICAgICAgICAgICAgICAgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc2VjdGlvbiBidXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQgcHJvbW90aW5nIGl0IHRvIGEgdGFzaworICAgICAgICAgICAgICAgIGFuZCBkZWZpbmluZyBzb21lIGRlcGVuZGVuY2llczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBkb19wcmludGRhdGUgKCkgeworICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgIHByaW50IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsIHRpbWUuZ210aW1lKCkpCisgICAgIH0KKyAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdGhlbiBwcm9tb3RlZAorICAgICAgICAgICAgICAgIGFzIGEgdGFzay4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgYmVjb21lcyBhIGRlcGVuZGVuY3kgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEFuZCwgdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGlzIGRlcGVuZGVudCB1cG9uCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICAgICAgRXhlY3V0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIHJlc3VsdHMKKyAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmRvX3ByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgcnVubmluZyBmaXJzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZWxldGluZy1hLXRhc2snPgorICAgICAgICAgICAgPHRpdGxlPkRlbGV0aW5nIGEgVGFzazwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHdlbGwgYXMgYmVpbmcgYWJsZSB0byBhZGQgdGFza3MsIHlvdSBjYW4gZGVsZXRlIHRoZW0uCisgICAgICAgICAgICAgICAgU2ltcGx5IHVzZSB0aGUgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgZGVsZXRlIGEgdGFzay4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlIHRoZSBleGFtcGxlIHRhc2sgdXNlZCBpbiB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgeW91IHdvdWxkIHVzZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlbHRhc2sgcHJpbnRkYXRlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIHlvdSBkZWxldGUgYSB0YXNrIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBhbmQgdGhlIHRhc2sgaGFzIGRlcGVuZGVuY2llcywgdGhlIGRlcGVuZGVuY2llcyBhcmUKKyAgICAgICAgICAgICAgICBub3QgcmVjb25uZWN0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgdGhyZWUgdGFza3MgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIHdoaWNoIGluIHR1cm4gaXMgZGVwZW5kZW50IG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCBpZiB5b3UgdXNlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0byBkZWxldGUgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgdGhlIGltcGxpY2l0IGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICByZWxhdGlvbnNoaXAgYmV0d2VlbiA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4gdGhyb3VnaCA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbm8gbG9uZ2VyIGV4aXN0cywgYW5kIDxmaWxlbmFtZT5kb19jPC9maWxlbmFtZT4gZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgYXJlIG5vdCB1cGRhdGVkIHRvIGluY2x1ZGUgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaHVzLCA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGlzIGZyZWUgdG8gcnVuIGJlZm9yZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGRlcGVuZGVuY2llcyBzdWNoIGFzIHRoZXNlIHRvIHJlbWFpbiBpbnRhY3QsIHVzZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4gdmFyZmxhZyB0byBkaXNhYmxlIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgZGVsZXRlIGl0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fYltub2V4ZWNdID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Bhc3NpbmctaW5mb3JtYXRpb24taW50by10aGUtYnVpbGQtdGFzay1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+UGFzc2luZyBJbmZvcm1hdGlvbiBJbnRvIHRoZSBCdWlsZCBUYXNrIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgdGFzaywgQml0QmFrZSB0aWdodGx5IGNvbnRyb2xzIHRoZSBleGVjdXRpb24KKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBvZiB0aGUgYnVpbGQgdGFza3MgdG8gbWFrZQorICAgICAgICAgICAgICAgIHN1cmUgdW53YW50ZWQgY29udGFtaW5hdGlvbiBmcm9tIHRoZSBidWlsZCBtYWNoaW5lIGNhbm5vdAorICAgICAgICAgICAgICAgIGluZmx1ZW5jZSB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgZG8gd2FudCBzb21ldGhpbmcgdG8gZ2V0IHBhc3NlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHRhc2sgZW52aXJvbm1lbnQsIHlvdSBtdXN0IHRha2UgdGhlc2UgdHdvIHN0ZXBzOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbCBCaXRCYWtlIHRvIGxvYWQgd2hhdCB5b3Ugd2FudCBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyBzbyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFzc3VtZSB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSBidWlsZCBzeXN0ZW0gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHlvdXIgPGZpbGVuYW1lPiRIT01FLy5jY2FjaGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHRlbGxzIEJpdEJha2UgdG8gbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNDQUNIRV9ESVI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YXN0b3JlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9IiRCQl9FTlZfRVhUUkFXSElURSBDQ0FDSEVfRElSIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxsIEJpdEJha2UgdG8gZXhwb3J0IHdoYXQgeW91IGhhdmUgbG9hZGVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBzb21ldGhpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50byB0aGUgZGF0YXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXMgc3RlcCkgb25seSBtYWtlcyBpdCBhdmFpbGFibGUgaW4gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGV4cG9ydCBpdCB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgYSBjb21tYW5kIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQ0NBQ0hFX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJldmlvdXMgc3RlcHMgaXMgdGhhdCBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkcyB0aGUgdmFyaWFibGUgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBidWlsZCBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhpbmdzIGxpa2UgdGhlIHNldHNjZW5lIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBkb2luZyBzbyByZXN1bHRzIGluIHVubmVjZXNzYXJ5IHJlYnVpbGRzIG9mIHRhc2tzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0IHRoZSB2YXJpYWJsZSBzbyB0aGF0IHRoZSBzZXRzY2VuZSBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlcyB0aGUgZGVwZW5kZW5jeSB3aGVuIGl0IGNyZWF0ZXMgY2hlY2tzdW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcywgaXQgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gb2J0YWluIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgZnJvbSB0aGUgb3JpZ2luYWwgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEJpdGJha2Ugc2F2ZXMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCBpbnRvCisgICAgICAgICAgICAgICAgYSBzcGVjaWFsIHZhcmlhYmxlIG5hbWVkCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX09SSUdFTlYnPjxmaWxlbmFtZT5CQl9PUklHRU5WPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkJCX09SSUdFTlY8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXR1cm5zIGEgZGF0YXN0b3JlCisgICAgICAgICAgICAgICAgb2JqZWN0IHRoYXQgY2FuIGJlIHF1ZXJpZWQgdXNpbmcgdGhlIHN0YW5kYXJkIGRhdGFzdG9yZSBvcGVyYXRvcnMKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5nZXRWYXIoLCBGYWxzZSk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZGF0YXN0b3JlIG9iamVjdCBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNQTEFZPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgb3JpZ2VudiA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpCisgICAgIGJhciA9IG9yaWdlbnYuZ2V0VmFyKCJCQVIiLCBGYWxzZSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgcmV0dXJucyA8ZmlsZW5hbWU+QkFSPC9maWxlbmFtZT4gZnJvbSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIEJpdEJha2UgY2xlYW5zIHRoZSBlbnZpcm9ubWVudCB0byBpbmNsdWRlIG9ubHkgdGhvc2UKKyAgICAgICAgICAgICAgICB0aGluZ3MgZXhwb3J0ZWQgb3IgbGlzdGVkIGluIGl0cyB3aGl0ZWxpc3QgdG8gZW5zdXJlIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaXMgcmVwcm9kdWNpYmxlIGFuZCBjb25zaXN0ZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWZsYWdzJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWdzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZhcmlhYmxlIGZsYWdzICh2YXJmbGFncykgaGVscCBjb250cm9sIGEgdGFzaydzIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgIGFuZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBCaXRCYWtlIHJlYWRzIGFuZCB3cml0ZXMgdmFyZmxhZ3MgdG8gdGhlIGRhdGFzdG9yZSB1c2luZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICBjb21tYW5kIGZvcm1zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+dmFyaWFibGU8L3JlcGxhY2VhYmxlPiA9IGQuZ2V0VmFyRmxhZ3MoIjxyZXBsYWNlYWJsZT52YXJpYWJsZTwvcmVwbGFjZWFibGU+IikKKyAgICAgc2VsZi5kLnNldFZhckZsYWdzKCJGT08iLCB7ImZ1bmMiOiBUcnVlfSkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB3b3JraW5nIHdpdGggdmFyZmxhZ3MsIHRoZSBzYW1lIHN5bnRheCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgICAgICBvdmVycmlkZXMsIGFwcGxpZXMuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBzZXQsIGFwcGVuZCwgYW5kIHByZXBlbmQgdmFyZmxhZ3MganVzdCBsaWtlCisgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPlZhcmlhYmxlIEZsYWcgU3ludGF4PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgaGFzIGEgZGVmaW5lZCBzZXQgb2YgdmFyZmxhZ3MgYXZhaWxhYmxlIGZvciByZWNpcGVzIGFuZAorICAgICAgICAgICAgY2xhc3Nlcy4KKyAgICAgICAgICAgIFRhc2tzIHN1cHBvcnQgYSBudW1iZXIgb2YgdGhlc2UgZmxhZ3Mgd2hpY2ggY29udHJvbCB2YXJpb3VzCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YXNrOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsZWFuZGlyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFbXB0eSBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBjcmVhdGVkIGJlZm9yZSB0aGUgdGFzayBydW5zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcGVuZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdidWlsZC1kZXBlbmRlbmNpZXMnPkJ1aWxkIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGlyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgdGFzayBydW5zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmxvY2tmaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIG9uZSBvciBtb3JlIGxvY2tmaWxlcyB0byBsb2NrIHdoaWxlIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgICAgICBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIE9ubHkgb25lIHRhc2sgbWF5IGhvbGQgYSBsb2NrZmlsZSwgYW5kIGFueSB0YXNrIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzIHRvIGxvY2sgYW4gYWxyZWFkeSBsb2NrZWQgZmlsZSB3aWxsIGJsb2NrIHVudGlsCisgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jayBpcyByZWxlYXNlZC4KKyAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgZmxhZyB0byBhY2NvbXBsaXNoIG11dHVhbAorICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5vZXhlYzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBNYXJrcyB0aGUgdGFza3MgYXMgYmVpbmcgZW1wdHkgYW5kIG5vIGV4ZWN1dGlvbiByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ub2V4ZWM8L2ZpbGVuYW1lPiBmbGFnIGNhbiBiZSB1c2VkIHRvIHNldCB1cAorICAgICAgICAgICAgICAgICAgICB0YXNrcyBhcyBkZXBlbmRlbmN5IHBsYWNlaG9sZGVycywgb3IgdG8gZGlzYWJsZSB0YXNrcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGVsc2V3aGVyZSB0aGF0IGFyZSBub3QgbmVlZGVkIGluIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bm9zdGFtcDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUZWxscyBCaXRCYWtlIHRvIG5vdCBnZW5lcmF0ZSBhIHN0YW1wIGZpbGUgZm9yIGEgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaW1wbGllcyB0aGUgdGFzayBzaG91bGQgYWx3YXlzIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBvc3RmdW5jczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnByZWZ1bmNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZSB0YXNrIGV4ZWN1dGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJkZXBlbmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3J1bnRpbWUtZGVwZW5kZW5jaWVzJz5SdW50aW1lIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmVjaWRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjcmRlcHRhc2s8L2ZpbGVuYW1lPiwgc3BlY2lmaWVzIGEgdGFzayB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBpbnNwZWN0ZWQgZm9yIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlY3JkZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHRhc2sgcmVjdXJzaXZlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlY3Vyc2l2ZS1kZXBlbmRlbmNpZXMnPlJlY3Vyc2l2ZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN0YW1wLWV4dHJhLWluZm86PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgc3RhbXAgaW5mb3JtYXRpb24gdG8gYXBwZW5kIHRvIHRoZSB0YXNrJ3Mgc3RhbXAuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIE9wZW5FbWJlZGRlZCB1c2VzIHRoaXMgZmxhZyB0byBhbGxvdworICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVtYXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSB1bWFzayB0byBydW4gdGhlIHRhc2sgdW5kZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNldmVyYWwgdmFyZmxhZ3MgYXJlIHVzZWZ1bCBmb3IgY29udHJvbGxpbmcgaG93IHNpZ25hdHVyZXMgYXJlCisgICAgICAgICAgICBjYWxjdWxhdGVkIGZvciB2YXJpYWJsZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2Nlc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjaGVja3N1bXMnPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXBzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGFkZCB0byBhIHZhcmlhYmxlJ3MgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgaXRzIHNpZ25hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHZhcmlhYmxlcyB0byB0aGlzIGxpc3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgd2hlbgorICAgICAgICAgICAgICAgICAgICBhIGZ1bmN0aW9uIHJlZmVycyB0byBhIHZhcmlhYmxlIGluIGEgbWFubmVyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWxsb3cgQml0QmFrZSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSB2YXJpYWJsZSBpcyByZWZlcnJlZCB0by4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXBzZXhjbHVkZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBhIHZhcmlhYmxlJ3MgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHVycG9zZXMgb2YgY2FsY3VsYXRpbmcgaXRzIHNpZ25hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXB2YWx1ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIGluc3RydWN0cyBCaXRCYWtlIHRvIGlnbm9yZSB0aGUgYWN0dWFsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBhbmQgaW5zdGVhZCB1c2UgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2YXJpYWJsZSdzIHNpZ25hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz52YXJkZXB2YWx1ZWV4Y2x1ZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzIHRvIGV4Y2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgdmFyaWFibGUncyB2YWx1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSdzIHNpZ25hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdldmVudHMnPgorICAgICAgICA8dGl0bGU+RXZlbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxsb3dzIGluc3RhbGxhdGlvbiBvZiBldmVudCBoYW5kbGVycyB3aXRoaW4KKyAgICAgICAgICAgIHJlY2lwZSBhbmQgY2xhc3MgZmlsZXMuCisgICAgICAgICAgICBFdmVudHMgYXJlIHRyaWdnZXJlZCBhdCBjZXJ0YWluIHBvaW50cyBkdXJpbmcgb3BlcmF0aW9uLAorICAgICAgICAgICAgc3VjaCBhcyB0aGUgYmVnaW5uaW5nIG9mIGFuIG9wZXJhdGlvbiBhZ2FpbnN0IGEgZ2l2ZW4gcmVjaXBlCisgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmI8L2ZpbGVuYW1lPiBmaWxlKSwgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gdGFzaywKKyAgICAgICAgICAgIHRhc2sgZmFpbHVyZSwgdGFzayBzdWNjZXNzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICBUaGUgaW50ZW50IGlzIHRvIG1ha2UgaXQgZWFzeSB0byBkbyB0aGluZ3MgbGlrZSBlbWFpbAorICAgICAgICAgICAgbm90aWZpY2F0aW9uIG9uIGJ1aWxkIGZhaWx1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGV2ZW50IGhhbmRsZXIgdGhhdAorICAgICAgICAgICAgcHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhbmQgdGhlIGNvbnRlbnQgb2YKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+RklMRTwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGRoYW5kbGVyIG15Y2xhc3NfZXZlbnRoYW5kbGVyCisgICAgIHB5dGhvbiBteWNsYXNzX2V2ZW50aGFuZGxlcigpIHsKKyAgICAgICAgIGZyb20gYmIuZXZlbnQgaW1wb3J0IGdldE5hbWUKKyAgICAgICAgIGZyb20gYmIgaW1wb3J0IGRhdGEKKyAgICAgICAgIHByaW50KCJUaGUgbmFtZSBvZiB0aGUgRXZlbnQgaXMgJXMiICUgZ2V0TmFtZShlKSkKKyAgICAgICAgIHByaW50KCJUaGUgZmlsZSB3ZSBydW4gZm9yIGlzICVzIiAlIGRhdGEuZ2V0VmFyKCdGSUxFJywgZS5kYXRhLCBUcnVlKSkKKyAgICAgfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBldmVudCBoYW5kbGVyIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgYW4gZXZlbnQgaXMKKyAgICAgICAgICAgIHRyaWdnZXJlZC4KKyAgICAgICAgICAgIEEgZ2xvYmFsIHZhcmlhYmxlICI8ZmlsZW5hbWU+ZTwvZmlsZW5hbWU+IiBpcyBkZWZpbmVkIGFuZAorICAgICAgICAgICAgIjxmaWxlbmFtZT5lLmRhdGE8L2ZpbGVuYW1lPiIgY29udGFpbnMgYW4gaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+YmIuZGF0YTwvZmlsZW5hbWU+Ii4KKyAgICAgICAgICAgIFdpdGggdGhlIDxmaWxlbmFtZT5nZXROYW1lKGUpPC9maWxlbmFtZT4gbWV0aG9kLCBvbmUgY2FuIGdldAorICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHRyaWdnZXJlZCBldmVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSB5b3UgcHJvYmFibHkgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhIHN1YnNldCBvZiBldmVudHMsCisgICAgICAgICAgICB5b3Ugd291bGQgbGlrZWx5IHVzZSB0aGUgPGZpbGVuYW1lPltldmVudG1hc2tdPC9maWxlbmFtZT4gZmxhZworICAgICAgICAgICAgZm9yIHlvdXIgZXZlbnQgaGFuZGxlciB0byBiZSBzdXJlIHRoYXQgb25seSBjZXJ0YWluIGV2ZW50cworICAgICAgICAgICAgdHJpZ2dlciB0aGUgaGFuZGxlci4KKyAgICAgICAgICAgIEdpdmVuIHRoZSBwcmV2aW91cyBleGFtcGxlLCBzdXBwb3NlIHlvdSBvbmx5IHdhbnRlZCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrRmFpbGVkPC9maWxlbmFtZT4gZXZlbnQgdG8gdHJpZ2dlciB0aGF0CisgICAgICAgICAgICBldmVudCBoYW5kbGVyLgorICAgICAgICAgICAgVXNlIHRoZSBmbGFnIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFkZGhhbmRsZXIgbXljbGFzc19ldmVudGhhbmRsZXIKKyAgICAgbXljbGFzc19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5idWlsZC5UYXNrRmFpbGVkIgorICAgICBweXRob24gbXljbGFzc19ldmVudGhhbmRsZXIoKSB7CisgICAgICAgICBmcm9tIGJiLmV2ZW50IGltcG9ydCBnZXROYW1lCisgICAgICAgICBmcm9tIGJiIGltcG9ydCBkYXRhCisgICAgICAgICBwcmludCgiVGhlIG5hbWUgb2YgdGhlIEV2ZW50IGlzICVzIiAlIGdldE5hbWUoZSkpCisgICAgICAgICBwcmludCgiVGhlIGZpbGUgd2UgcnVuIGZvciBpcyAlcyIgJSBkYXRhLmdldFZhcignRklMRScsIGUuZGF0YSwgVHJ1ZSkpCisgICAgIH0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIGEgc3RhbmRhcmQgYnVpbGQsIHRoZSBmb2xsb3dpbmcgY29tbW9uIGV2ZW50cyBtaWdodCBvY2N1cjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnUGFyc2VkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZVN0YXJ0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5CdWlsZFN0YXJ0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrSW52YWxpZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza1N1Y2NlZWRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmNvb2tlci5Db29rZXJFeGl0KCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2Ygb3RoZXIgZXZlbnRzIHRoYXQgb2NjdXIgYmFzZWQgb24gc3BlY2lmaWMgcmVxdWVzdHMKKyAgICAgICAgICAgIHRvIHRoZSBzZXJ2ZXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uUHJvZ3Jlc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvcmVCYXNlRmlsZXNGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ0ZpbGVQYXRoRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5GaWxlc01hdGNoaW5nRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhbnRzLWNsYXNzLWV4dGVuc2lvbi1tZWNoYW5pc20nPgorICAgICAgICA8dGl0bGU+VmFyaWFudHMgLSBDbGFzcyBFeHRlbnNpb24gTWVjaGFuaXNtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgdHdvIGZlYXR1cmVzIHRoYXQgZmFjaWxpdGF0ZSBjcmVhdGluZworICAgICAgICAgICAgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZSBtdWx0aXBsZSBpbmNhcm5hdGlvbnMgb2YgdGhhdAorICAgICAgICAgICAgcmVjaXBlIGZpbGUgd2hlcmUgYWxsIGluY2FybmF0aW9ucyBhcmUgYnVpbGRhYmxlLgorICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJWRVJTSU9OUyc+PGZpbGVuYW1lPkJCVkVSU0lPTlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBtZWNoYW5pc20gZm9yIHRoaXMgY2xhc3MgZXh0ZW5zaW9uIGlzIGV4dHJlbWVseQorICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBVc3VhbGx5LCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzIHdvdWxkIG5lZWQgdG8gYmUgbW9kaWZpZWQgYnkgdGhlIGV4dGVuc2lvbiBjbGFzcy4KKyAgICAgICAgICAgICAgICBGb3Igc3BlY2lmaWMgZXhhbXBsZXMsIHNlZSB0aGUgT0UtQ29yZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bXVsdGlsaWI8L2ZpbGVuYW1lPiBjbGFzc2VzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMgdXNlZCB0byAiZXh0ZW5kIiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZvciBlYWNoIHZhcmlhbnQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHJlc3VsdHMgaW4gYSBzZWNvbmQgaW5jYXJuYXRpb24gb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGJlaW5nIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWNvbmQgaW5jYXJuYXRpb24gd2lsbCBoYXZlIHRoZSAibmF0aXZlIiBjbGFzcyBpbmhlcml0ZWQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgYSBzaW5nbGUgcmVjaXBlIHRvIGJ1aWxkIG11bHRpcGxlIHZlcnNpb25zIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBmcm9tIGEgc2luZ2xlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSBjb25kaXRpb25hbCBtZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICAodXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbWVjaGFuaXNtKSBmb3IgYSBzaW5nbGUgdmVyc2lvbiwgb3IgYW4gb3B0aW9uYWxseSBuYW1lZCByYW5nZSBvZiB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCVkVSU0lPTlMgPSAiMS4wIDIuMCBnaXQiCisgICAgIFNSQ19VUklfZ2l0ID0gImdpdDovL3NvbWV1cmwvc29tZXBhdGguZ2l0IgorCisgICAgIEJCVkVSU0lPTlMgPSAiMS4wLlswLTZdOjEuMC4wKyBcIDEuMC5bNy05XToxLjAuNysiCisgICAgIFNSQ19VUklfYXBwZW5kXzEuMC43KyA9ICJmaWxlOi8vc29tZV9wYXRjaF93aGljaF90aGVfbmV3X3ZlcnNpb25zX25lZWQucGF0Y2g7cGF0Y2g9MSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmFuZ2UgZGVmYXVsdHMgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIE9wZW5FbWJlZGRlZCwgdGhlIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4wLjArLmJiPC9maWxlbmFtZT4gY3JlYXRlcyBhIGRlZmF1bHQgbmFtZSByYW5nZQorICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+MS4wLjArPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgdGhlIHJhbmdlIG5hbWUgaXMgbm90IG9ubHkgcGxhY2VkCisgICAgICAgICAgICAgICAgICAgIGludG8gb3ZlcnJpZGVzLCBidXQgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSBmb3IgdGhlIG1ldGFkYXRhIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdmFyaWFibGUgdGhhdCBkZWZpbmVzIHRoZSBiYXNlIHJlY2lwZSB2ZXJzaW9ucyBmb3IgdXNlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gc2VhcmNoIHBhdGhzCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGFsbG93IGZvciBlZmZpY2llbnQgb3BlcmF0aW9uIGdpdmVuIG11bHRpcGxlIHByb2Nlc3NlcworICAgICAgICAgICAgZXhlY3V0aW5nIGluIHBhcmFsbGVsLCBCaXRCYWtlIGhhbmRsZXMgZGVwZW5kZW5jaWVzIGF0CisgICAgICAgICAgICB0aGUgdGFzayBsZXZlbC4KKyAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgYSByb2J1c3QgbWV0aG9kIHRvIGhhbmRsZSB0aGVzZSBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgc2V2ZXJhbCB0eXBlcyBvZiBkZXBlbmRlbmN5IG1lY2hhbmlzbXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVwZW5kZW5jaWVzLWludGVybmFsLXRvLXRoZS1iYi1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXMgSW50ZXJuYWwgdG8gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIHRvIG1hbmFnZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gYSBnaXZlbiByZWNpcGUKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0bworICAgICAgICAgICAgICAgIGluZGljYXRlIHdoZW4gYSB0YXNrIGlzIGRlcGVuZGVudCBvbiBvdGhlciB0YXNrcyBvciB3aGVuCisgICAgICAgICAgICAgICAgb3RoZXIgdGFza3MgZGVwZW5kIG9uIHRoYXQgcmVjaXBlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFkZHRhc2sgcHJpbnRkYXRlIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBpcworICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIGNvbXBsZXRpb24gb2YgdGhlIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBBbmQsIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiBkZXBlbmRzIG9uIHRoZSBjb21wbGV0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIG1hbmFnZSBidWlsZCB0aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGUgImRlcHRhc2siIHZhcmZsYWcgZm9yIHRhc2tzIHNpZ25pZmllcyB0aGUgdGFzayBvZiBlYWNoCisgICAgICAgICAgICAgICAgaXRlbSBsaXN0ZWQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiB0aGF0IG11c3QKKyAgICAgICAgICAgICAgICBjb21wbGV0ZSBiZWZvcmUgdGhhdCB0YXNrIGNhbiBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCBpdGVtIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gbXVzdCBjb21wbGV0ZSBiZWZvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gY2FuIGV4ZWN1dGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPlJ1bnRpbWUgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBtYW5hZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBsaXN0cyBydW50aW1lCisgICAgICAgICAgICAgICAgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aG9zZSBwYWNrYWdlcyBjYW4gaGF2ZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGUgInJkZXB0YXNrIiBmbGFnIGZvciB0YXNrcyBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIHRhc2sgb2YgZWFjaAorICAgICAgICAgICAgICAgIGl0ZW0gcnVudGltZSBkZXBlbmRlbmN5IHdoaWNoIG11c3QgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIHRoYXQKKyAgICAgICAgICAgICAgICB0YXNrIGNhbiBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX3BhY2thZ2VfcWFbcmRlcHRhc2tdID0gImRvX3BhY2thZ2VkYXRhIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzayBvZiBlYWNoIGl0ZW0gaW4gPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gbXVzdCBoYXZlCisgICAgICAgICAgICAgICAgY29tcGxldGVkIGJlZm9yZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZV9xYTwvZmlsZW5hbWU+IGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlY3Vyc2l2ZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPlJlY3Vyc2l2ZSBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlICJyZWNyZGVwdGFzayIgZmxhZyB0byBtYW5hZ2UKKyAgICAgICAgICAgICAgICByZWN1cnNpdmUgdGFzayBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgQml0QmFrZSBsb29rcyB0aHJvdWdoIHRoZSBidWlsZC10aW1lIGFuZCBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIHRoZSBjdXJyZW50IHJlY2lwZSwgbG9va3MgdGhyb3VnaAorICAgICAgICAgICAgICAgIHRoZSB0YXNrJ3MgaW50ZXItdGFzaworICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gYWRkcyBkZXBlbmRlbmNpZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIGxpc3RlZCB0YXNrLgorICAgICAgICAgICAgICAgIE9uY2UgQml0QmFrZSBoYXMgYWNjb21wbGlzaGVkIHRoaXMsIGl0IHJlY3Vyc2l2ZWx5IHdvcmtzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9mIHRob3NlIHRhc2tzLgorICAgICAgICAgICAgICAgIEl0ZXJhdGl2ZSBwYXNzZXMgY29udGludWUgdW50aWwgYWxsIGRlcGVuZGVuY2llcyBhcmUgZGlzY292ZXJlZAorICAgICAgICAgICAgICAgIGFuZCBhZGRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gbm90IG9ubHkgaGF2ZSBCaXRCYWtlIGxvb2sgZm9yCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIHRob3NlIHRhc2tzLCBidXQgYWxzbyBoYXZlIEJpdEJha2UgbG9vaworICAgICAgICAgICAgICAgIGZvciBidWlsZC10aW1lIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcyBvZiB0aGUgZGVwZW5kZW50CisgICAgICAgICAgICAgICAgdGFza3MgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB5b3UgbmVlZCB0byByZWZlcmVuY2UgdGhlIHRhc2sgbmFtZQorICAgICAgICAgICAgICAgIGl0c2VsZiBpbiB0aGUgdGFzayBsaXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fYVtyZWNyZGVwdGFza10gPSAiZG9fYSBkb19iIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlICJkZXBlbmRzIiBmbGFnIGluIGEgbW9yZSBnZW5lcmljIGZvcm0KKyAgICAgICAgICAgICAgICB0byBtYW5hZ2UgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhpcyBtb3JlIGdlbmVyaWMgZm9ybSBhbGxvd3MgZm9yIGludGVyLWRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBjaGVja3MgZm9yIHNwZWNpZmljIHRhc2tzIHJhdGhlciB0aGFuIGNoZWNrcyBmb3IKKyAgICAgICAgICAgICAgICB0aGUgZGF0YSBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX3BhdGNoW2RlcGVuZHNdID0gInF1aWx0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGFzayBvZiB0aGUgdGFyZ2V0IDxmaWxlbmFtZT5xdWlsdC1uYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG11c3QgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+IHRhc2sgY2FuIGV4ZWN1dGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAicmRlcGVuZHMiIGZsYWcgd29ya3MgaW4gYSBzaW1pbGFyIHdheSBidXQgdGFrZXMgdGFyZ2V0cworICAgICAgICAgICAgICAgIGluIHRoZSBydW50aW1lIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBuYW1lc3BhY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYWNjZXNzaW5nLWRhdGFzdG9yZS12YXJpYWJsZXMtdXNpbmctcHl0aG9uJz4KKyAgICAgICAgPHRpdGxlPkFjY2Vzc2luZyBEYXRhc3RvcmUgVmFyaWFibGVzIFVzaW5nIFB5dGhvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBvZnRlbiBuZWNlc3NhcnkgdG8gYWNjZXNzIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgIEJpdEJha2UgZGF0YXN0b3JlIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMuCisgICAgICAgICAgICBUaGUgQml0YmFrZSBkYXRhc3RvcmUgaGFzIGFuIEFQSSB0aGF0IGFsbG93cyB5b3UgdGhpcworICAgICAgICAgICAgYWNjZXNzLgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIG9wZXJhdGlvbnM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSdub25lJz4KKyAgICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9JzInIGFsaWduPSdsZWZ0JyBjb2xzZXA9JzEnIHJvd3NlcD0nMSc+CisgICAgICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MxJyBjb2x3aWR0aD0nMSonLz4KKyAgICAgICAgICAgICAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0nYzInIGNvbHdpZHRoPScxKicvPgorICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGVtcGhhc2lzPk9wZXJhdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5EZXNjcmlwdGlvbjwvZW1waGFzaXM+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZ2V0VmFyKCJYIiwgZXhwYW5kPUZhbHNlKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJldHVybnMgdGhlIHZhbHVlIG9mIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgImV4cGFuZD1UcnVlIiBleHBhbmRzIHRoZSB2YWx1ZS48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuc2V0VmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BZGRzICJ2YWx1ZSIgdG8gdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyKCJYIiwgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BZGRzICJ2YWx1ZSIgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhcigiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+RGVsZXRlcyB0aGUgdmFyaWFibGUgIlgiIGZyb20gdGhlIGRhdGFzdG9yZS48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucmVuYW1lVmFyKCJYIiwgIlkiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlJlbmFtZXMgdGhlIHZhcmlhYmxlICJYIiB0byAiWSIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWcoIlgiLCBmbGFnLCBleHBhbmQ9RmFsc2UpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+R2V0cyB0aGVuIG5hbWVkIGZsYWcgZnJvbSB0aGUgdmFyaWFibGUgIlgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiZXhwYW5kPVRydWUiIGV4cGFuZHMgdGhlIG5hbWVkIGZsYWcuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIG5hbWVkIGZsYWcgZm9yIHZhcmlhYmxlICJYIiB0byAidmFsdWUiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5hcHBlbmRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5BcHBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5wcmVwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UHJlcGVuZHMgInZhbHVlIiB0byB0aGUgbmFtZWQgZmxhZyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWcoIlgiLCBmbGFnKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIG5hbWVkIGZsYWcgb24gdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhckZsYWdzKCJYIiwgZmxhZ3NkaWN0KTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlNldHMgdGhlIGZsYWdzIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmZsYWdzZGljdCgpPC9maWxlbmFtZT4gcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0VmFyRmxhZ3M8L2ZpbGVuYW1lPiBkb2VzIG5vdCBjbGVhciBwcmV2aW91cyBmbGFncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhpcyBvcGVyYXRpb24gYXMgPGZpbGVuYW1lPmFkZFZhckZsYWdzPC9maWxlbmFtZT4uPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIGEgPGZpbGVuYW1lPmZsYWdzZGljdDwvZmlsZW5hbWU+IG9mIHRoZSBmbGFncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuZGVsVmFyRmxhZ3MoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgYWxsIHRoZSBmbGFncyBmb3IgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgPC90Z3JvdXA+CisgICAgICAgICAgICA8L2luZm9ybWFsdGFibGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz4KKyAgICAgICAgPHRpdGxlPlRhc2sgQ2hlY2tzdW1zIGFuZCBTZXRzY2VuZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgY2hlY2tzdW1zIChvciBzaWduYXR1cmVzKSBhbG9uZyB3aXRoIHRoZSBzZXRzY2VuZQorICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIGlmIGEgdGFzayBuZWVkcyB0byBiZSBydW4uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwcm9jZXNzLgorICAgICAgICAgICAgVG8gaGVscCB1bmRlcnN0YW5kIGhvdyBCaXRCYWtlIGRvZXMgdGhpcywgdGhlIHNlY3Rpb24gYXNzdW1lcyBhbgorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIG1ldGFkYXRhLWJhc2VkIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbGlzdCBpcyBhIHBsYWNlIGhvbGRlciBvZiBjb250ZW50IGV4aXN0ZWQgZnJvbSBwcmV2aW91cyB3b3JrCisgICAgICAgICAgICBvbiB0aGUgbWFudWFsLgorICAgICAgICAgICAgU29tZSBvciBhbGwgb2YgaXQgcHJvYmFibHkgbmVlZHMgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdWJzZWN0aW9ucworICAgICAgICAgICAgdGhhdCBtYWtlIHVwIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgIEZvciBub3csIEkgaGF2ZSBqdXN0IHByb3ZpZGVkIGEgc2hvcnQgZ2xvc3NhcnktbGlrZSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgZm9yIGVhY2ggdmFyaWFibGUuCisgICAgICAgICAgICBVbHRpbWF0ZWx5LCB0aGlzIGxpc3QgZ29lcyBhd2F5LgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHBhdGggdG8gY3JlYXRlIHN0YW1wIGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+U1RBTVBDTEVBTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIEFnYWluLCB0aGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcyBidXQgY2FuIHVzZSB3aWxkY2FyZHMKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1hdGNoaW5nIGEgcmFuZ2Ugb2YgZmlsZXMgZm9yIGNsZWFuIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU1RBTVBfV0hJVEVMSVNUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgc3RhbXAgZmlsZXMgdGhhdCBhcmUgbG9va2VkIGF0IHdoZW4gdGhlIHN0YW1wIHBvbGljeQorICAgICAgICAgICAgICAgICAgICBpcyAid2hpdGVsaXN0Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9TVEFNUF9QT0xJQ1k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBtb2RlIGZvciBjb21wYXJpbmcgdGltZXN0YW1wcyBvZiBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSAic2V0c2NlbmUiIHBhcnQgb2YgdGhlIHRhc2sncyBleGVjdXRpb24gaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gdmFsaWRhdGUgdGhlIGxpc3Qgb2YgdGFzayBoYXNoZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGF0IHZlcmlmaWVzIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBsYW5uZWQgdGFzayBleGVjdXRpb24gYmVmb3JlIHRoZSBtYWluIHRhc2sgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgICAgIGhhcHBlbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU0VUU0NFTkVfREVQVkFMSUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiBCaXRCYWtlIGNhbGxzIHRoYXQgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIEJpdEJha2UgcmVxdWlyZXMgYSBzZXRzY2VuZSBkZXBlbmRlbmN5IHRvCisgICAgICAgICAgICAgICAgICAgIGJlIG1ldC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9UQVNLSEFTSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRpbmcgdGFzaywgdGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgaGFzaAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdGFzayBhcyByZXR1cm5lZCBieSB0aGUgY3VycmVudGx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIGdlbmVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUxYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sCkBAIC0wLDAgKzEsMjI2MiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPCEtLSBEdW1teSBjaGFwdGVyIC0tPgorPGNoYXB0ZXIgaWQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+CisKKzx0aXRsZT5WYXJpYWJsZXMgR2xvc3Nhcnk8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgbGlzdHMgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGJ5IEJpdEJha2UgYW5kIGdpdmVzIGFuIG92ZXJ2aWV3CisgICAgb2YgdGhlaXIgZnVuY3Rpb24gYW5kIGNvbnRlbnRzLgorPC9wYXJhPgorCis8bm90ZT4KKyAgICBGb2xsb3dpbmcgYXJlIHNvbWUgcG9pbnRzIHJlZ2FyZGluZyB0aGUgdmFyaWFibGVzIGxpc3RlZCBpbiB0aGlzIGdsb3NzYXJ5OgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdmFyaWFibGVzIGxpc3RlZCBpbiB0aGlzIGdsb3NzYXJ5CisgICAgICAgICAgICBhcmUgc3BlY2lmaWMgdG8gQml0QmFrZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCB0byB0aGF0IGNvbnRleHQuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsc28sIHZhcmlhYmxlcyBleGlzdCBpbiBvdGhlciBzeXN0ZW1zIHRoYXQgdXNlIEJpdEJha2UKKyAgICAgICAgICAgIChlLmcuIFRoZSBZb2N0byBQcm9qZWN0IGFuZCBPcGVuRW1iZWRkZWQpIHRoYXQgaGF2ZSBuYW1lcyBpZGVudGljYWwKKyAgICAgICAgICAgIHRvIHRob3NlIGZvdW5kIGluIHRoaXMgZ2xvc3NhcnkuCisgICAgICAgICAgICBGb3Igc3VjaCBjYXNlcywgdGhlIHZhcmlhYmxlcyBpbiB0aG9zZSBzeXN0ZW1zIGV4dGVuZCB0aGUKKyAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHZhcmlhYmxlIGFzIGl0IGlzIGRlc2NyaWJlZCBoZXJlIGluCisgICAgICAgICAgICB0aGlzIGdsb3NzYXJ5LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GaW5hbGx5LCB0aGVyZSBhcmUgdmFyaWFibGVzIG1lbnRpb25lZCBpbiB0aGlzCisgICAgICAgICAgICBnbG9zc2FyeSB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gdGhlIEJpdEJha2UgZ2xvc3NhcnkuCisgICAgICAgICAgICBUaGVzZSBvdGhlciB2YXJpYWJsZXMgYXJlIHZhcmlhYmxlcyB1c2VkIGluIHN5c3RlbXMgdGhhdCB1c2UKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKzwvbm90ZT4KKworPGdsb3NzYXJ5IGlkPSdyZWYtdmFyaWFibGVzLWdsb3NzYXJ5Jz4KKworICAgIDxwYXJhPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BU1NVTUVfUFJPVklERUQnPkE8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNBQ0hFJz5DPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPkQ8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYQ0xVREVfRlJPTV9XT1JMRCc+RTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkFLRVJPT1QnPkY8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdJVERJUic+RzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSEdESVInPkg8L2xpbms+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19ESVNBQkxFRCc+STwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LWonPko8L2xpbms+IC0tPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0FSQ0gnPks8L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkw8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPk08L2xpbms+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LW4nPk48L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPk88L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QPC9saW5rPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUU1BS0VfUFJPRklMRVMnPlE8L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VDVElPTic+UzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVCc+VDwvbGluaz4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVCT09UX0NPTkZJRyc+VTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXYnPlY8L2xpbms+IC0tPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+VzwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXgnPlg8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS15Jz5ZPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnkteic+WjwvbGluaz4tLT4KKyAgICA8L3BhcmE+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1hJz48dGl0bGU+QTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BU1NVTUVfUFJPVklERUQnPjxnbG9zc3Rlcm0+QVNTVU1FX1BST1ZJREVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHJlY2lwZSBuYW1lcworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzKSBCaXRCYWtlIGRvZXMgbm90IGF0dGVtcHQgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEluc3RlYWQsIEJpdEJha2UgYXNzdW1lcyB0aGVzZSByZWNpcGVzIGhhdmUgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBPcGVuRW1iZWRkZWQgQ29yZSwgPGZpbGVuYW1lPkFTU1VNRV9QUk9WSURFRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1vc3RseSBzcGVjaWZpZXMgbmF0aXZlIHRvb2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBpcyA8ZmlsZW5hbWU+Z2l0LW5hdGl2ZTwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICAgICAgICAgICAgICB3aGVuIHNwZWNpZmllZCBhbGxvd3MgZm9yIHRoZSBHaXQgYmluYXJ5IGZyb20gdGhlIGhvc3QgdG8KKyAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCByYXRoZXIgdGhhbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0LW5hdGl2ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWInPjx0aXRsZT5CPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUInPjxnbG9zc3Rlcm0+QjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIEJpdEJha2UgZXhlY3V0ZXMgZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfQUxMT1dFRF9ORVRXT1JLUyc+PGdsb3NzdGVybT5CQl9BTExPV0VEX05FVFdPUktTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGhvc3RzIHRoYXQgdGhlIGZldGNoZXIKKyAgICAgICAgICAgICAgICAgICAgaXMgYWxsb3dlZCB0byB1c2UgdG8gb2J0YWluIHRoZSByZXF1aXJlZCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBjb25zaWRlcmF0aW9ucyBzdXJyb3VuZGluZyB0aGlzIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaG9zdCBsaXN0IGlzIG9ubHkgdXNlZCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OT19ORVRXT1JLJz48ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVpdGhlciBub3Qgc2V0IG9yIHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRlZCBzdXBwb3J0IGZvciB3aWxkY2FyZCBtYXRjaGluZyBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiBob3N0IG5hbWVzIGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0LmdudS5vcmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwLmdudS5vcmc8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfQUxMT1dFRF9ORVRXT1JLUyA9ICIqLmdudS5vcmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvcnMgbm90IGluIHRoZSBob3N0IGxpc3QgYXJlIHNraXBwZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VkIGluIGRlYnVnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVtcHRzIHRvIGFjY2VzcyBuZXR3b3JrcyBub3QgaW4gdGhlIGhvc3QgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIGEgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5CQl9BTExPV0VEX05FVFdPUktTPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgaG9zdCB5b3Ugd2FudCB0byB1c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiByZXN1bHRzIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBmZXRjaGVkIGZyb20gYW4gYWxsb3dlZCBsb2NhdGlvbiBhbmQgYXZvaWRzIHJhaXNpbmcKKyAgICAgICAgICAgICAgICAgICAgYW4gZXJyb3Igd2hlbiBhIGhvc3QgdGhhdCBpcyBub3QgYWxsb3dlZCBpcyBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmV0Y2hlciBkb2VzIG5vdCBhdHRlbXB0IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBsaXN0ZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhZnRlciBhCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgZmV0Y2ggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiBvY2N1cnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfQ09OU09MRUxPRyc+PGdsb3NzdGVybT5CQl9DT05TT0xFTE9HPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byBhIGxvZyBmaWxlIGludG8gd2hpY2ggQml0QmFrZSdzIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHdyaXRlcyBvdXRwdXQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9DVVJSRU5UVEFTSyc+PGdsb3NzdGVybT5CQl9DVVJSRU5UVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvXzwvZmlsZW5hbWU+IHByZWZpeC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFknPjxnbG9zc3Rlcm0+QkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgaG93IEJpdEJha2UgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGFuIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICBmaWxlICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGhhcyBubworICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmRpdGlvbiBvZnRlbiBvY2N1cnMgd2hlbiBsYXllcnMgZ2V0IG91dCBvZiBzeW5jCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5vZS1jb3JlPC9maWxlbmFtZT4gYnVtcHMgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgdmVyc2lvbiBhbmQgdGhlIG9sZCByZWNpcGUgbm8gbG9uZ2VyIGV4aXN0cyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIG90aGVyIGxheWVyIGhhcyBub3QgYmVlbiB1cGRhdGVkIHRvIHRoZSBuZXcgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHlldCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZhdGFsIGJlaGF2aW9yIGlzIHNhZmVzdCBiZWNhdXNlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgIHRoZSBzYW5lIHJlYWN0aW9uIGdpdmVuIHNvbWV0aGluZyBpcyBvdXQgb2Ygc3luYy4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgd2hlbiB5b3VyIGNoYW5nZXMgYXJlIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBiZWluZyBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RFRkFVTFRfVEFTSyc+PGdsb3NzdGVybT5CQl9ERUZBVUxUX1RBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdGFzayB0byB1c2Ugd2hlbiBub25lIGlzIHNwZWNpZmllZCAoZS5nLgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8ZmlsZW5hbWU+LWM8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhc2sgbmFtZSBzcGVjaWZpZWQgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT4gcHJlZml4LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fRElSUyc+PGdsb3NzdGVybT5CQl9ESVNLTU9OX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2sgc3BhY2UgbW9uaXRvcmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiJmx0O2FjdGlvbiZndDssJmx0O2RpciZndDssJmx0O3RocmVzaG9sZCZndDsgWy4uLl0iCisKKyAgICAgd2hlcmU6CisKKyAgICAgICAgJmx0O2FjdGlvbiZndDsgaXM6CisgICAgICAgICAgIEFCT1JUOiAgICAgSW1tZWRpYXRlbHkgYWJvcnQgdGhlIGJ1aWxkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgIFNUT1BUQVNLUzogU3RvcCB0aGUgYnVpbGQgYWZ0ZXIgdGhlIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyB0YXNrcyBoYXZlIGZpbmlzaGVkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgIFdBUk46ICAgICAgSXNzdWUgYSB3YXJuaW5nIGJ1dCBjb250aW51ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZCB3aGVuIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGFyZSBpc3N1ZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2xpbms+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3QgYmUgZGVmaW5lZC4KKworICAgICAgICAmbHQ7ZGlyJmd0OyBpczoKKyAgICAgICAgICAgQW55IGRpcmVjdG9yeSB5b3UgY2hvb3NlLiBZb3UgY2FuIHNwZWNpZnkgb25lIG9yCisgICAgICAgICAgIG1vcmUgZGlyZWN0b3JpZXMgdG8gbW9uaXRvciBieSBzZXBhcmF0aW5nIHRoZQorICAgICAgICAgICBncm91cGluZ3Mgd2l0aCBhIHNwYWNlLiAgSWYgdHdvIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICBvbiB0aGUgc2FtZSBkZXZpY2UsIG9ubHkgdGhlIGZpcnN0IGRpcmVjdG9yeQorICAgICAgICAgICBpcyBtb25pdG9yZWQuCisKKyAgICAgICAgJmx0O3RocmVzaG9sZCZndDsgaXM6CisgICAgICAgICAgIEVpdGhlciB0aGUgbWluaW11bSBhdmFpbGFibGUgZGlzayBzcGFjZSwKKyAgICAgICAgICAgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgaW5vZGVzLCBvcgorICAgICAgICAgICBib3RoLiAgWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUuICBUbworICAgICAgICAgICBvbWl0IG9uZSBvciB0aGUgb3RoZXIsIHNpbXBseSBvbWl0IHRoZSB2YWx1ZS4KKyAgICAgICAgICAgU3BlY2lmeSB0aGUgdGhyZXNob2xkIHVzaW5nIEcsIE0sIEsgZm9yIEdieXRlcywKKyAgICAgICAgICAgTWJ5dGVzLCBhbmQgS2J5dGVzLCByZXNwZWN0aXZlbHkuIElmIHlvdSBkbworICAgICAgICAgICBub3Qgc3BlY2lmeSBHLCBNLCBvciBLLCBLYnl0ZXMgaXMgYXNzdW1lZCBieQorICAgICAgICAgICBkZWZhdWx0LiAgRG8gbm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxRywxMDBLIFdBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxRyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwsMTAwSyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSB3b3JrcyBvbmx5IGlmIHlvdSBhbHNvIHNldAorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgICAgICBhYm9ydCB3aGVuIGVpdGhlciB0aGUgZGlzayBzcGFjZSBpbiA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4gZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgYXZhaWxhYmxlIGZyZWUgaW5vZGVzIGRyb3BzIGJlbG93CisgICAgICAgICAgICAgICAgICAgIDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdHdvIGRpcmVjdG9yaWVzIGFyZSBwcm92aWRlZCB3aXRoIHRoZSB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbHNvIGlzc3VlcyBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgd2hlbiB0aGUgZGlzayBzcGFjZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBkdXJpbmcgaW50ZXJ2YWxzIGFzCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgc3RvcHMgdGhlIGJ1aWxkIGFmdGVyIGFsbCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGNvbXBsZXRlIHdoZW4gdGhlIG1pbmltdW0gZGlzayBzcGFjZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBkcm9wcyBiZWxvdyAxIEdieXRlLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIG1vbml0b3Jpbmcgb2NjdXJzIGZvciB0aGUgZnJlZSBpbm9kZXMgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZXhhbXBsZSBpbW1lZGlhdGVseSBhYm9ydHMgdGhlIGJ1aWxkIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBmcmVlIGlub2RlcyBpbiB0aGUgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBkcm9wcyBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIHNwYWNlIG1vbml0b3JpbmcgZm9yIHRoZSBkaXJlY3RvcnkgaXRzZWxmIG9jY3VycworICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+IHZhcmlhYmxlLCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICBhbHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0RJU0tNT05fRElSUyc+PGZpbGVuYW1lPkJCX0RJU0tNT05fRElSUzwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhbmQgZGVmaW5lIGl0cyBhY3Rpb24gYXMgIldBUk4iLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCBzdWJzZXF1ZW50IHdhcm5pbmdzIGFyZSBpc3N1ZWQgZWFjaCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2Ugb3IgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieQorICAgICAgICAgICAgICAgICAgICB0aGUgcmVzcGVjdGl2ZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHlvdSBkbyB1c2UgPGZpbGVuYW1lPkJCX0RJU0tNT05fRElSUzwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlICJXQVJOIiBhY3Rpb24sIHRoZSBkaXNrIG1vbml0b3JpbmcgaW50ZXJ2YWwgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHRoZSB2YXJpYWJsZSBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICImbHQ7ZGlza19zcGFjZV9pbnRlcnZhbCZndDssJmx0O2Rpc2tfaW5vZGVfaW50ZXJ2YWwmZ3Q7IgorCisgICAgIHdoZXJlOgorCisgICAgICAgICZsdDtkaXNrX3NwYWNlX2ludGVydmFsJmd0OyBpczoKKyAgICAgICAgICAgQW4gaW50ZXJ2YWwgb2YgbWVtb3J5IGV4cHJlc3NlZCBpbiBlaXRoZXIKKyAgICAgICAgICAgRywgTSwgb3IgSyBmb3IgR2J5dGVzLCBNYnl0ZXMsIG9yIEtieXRlcywKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LiBZb3UgY2Fubm90IHVzZSBHQiwgTUIsIG9yIEtCLgorCisgICAgICAgICZsdDtkaXNrX2lub2RlX2ludGVydmFsJmd0OyBpczoKKyAgICAgICAgICAgQW4gaW50ZXJ2YWwgb2YgZnJlZSBpbm9kZXMgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBjYXVzZSBCaXRCYWtlIHRvCisgICAgICAgICAgICAgICAgICAgIGlzc3VlIHN1YnNlcXVlbnQgd2FybmluZ3MgZWFjaCB0aW1lIHRoZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBmdXJ0aGVyIHJlZHVjZXMgYnkgNTAgTWJ5dGVzIG9yIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5IDUgS2J5dGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBiYXNlZCBvbiB0aGUgaW50ZXJ2YWwgb2NjdXIgZWFjaCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGEgcmVzcGVjdGl2ZSBpbnRlcnZhbCBpcyByZWFjaGVkIGJleW9uZCB0aGUgaW5pdGlhbCB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDEgR2J5dGVzIGFuZCAxMDAgS2J5dGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9FTlZfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX0VOVl9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBpbnRlcm5hbCB3aGl0ZWxpc3Qgb2YgdmFyaWFibGVzIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggZnJvbSB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQgaW50byBCaXRCYWtlJ3MKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgbGlzdCBpcyB1c2VkOgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfUFJFU0VSVkVfRU5WJz48ZmlsZW5hbWU+QkJfUFJFU0VSVkVfRU5WPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0VOVl9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX0VYVFJBV0hJVEUnPjxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRU5WX0VYVFJBV0hJVEUnPjxnbG9zc3Rlcm0+QkJfRU5WX0VYVFJBV0hJVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFuIGFkZGl0aW9uYWwgc2V0IG9mIHZhcmlhYmxlcyB0byBhbGxvdyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICh3aGl0ZWxpc3QpIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IG9mIHZhcmlhYmxlcyBhcmUgb24gdG9wIG9mIHRoZSBpbnRlcm5hbCBsaXN0CisgICAgICAgICAgICAgICAgICAgIHNldCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0VOVl9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0ZFVENIX1BSRU1JUlJPUk9OTFknPjxnbG9zc3Rlcm0+QkJfRkVUQ0hfUFJFTUlSUk9ST05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCB0byAiMSIsIGNhdXNlcyBCaXRCYWtlJ3MgZmV0Y2hlciBtb2R1bGUgdG8gb25seQorICAgICAgICAgICAgICAgICAgICBzZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aWxsIG5vdCBzZWFyY2ggdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9GSUxFTkFNRSc+PGdsb3NzdGVybT5CQl9GSUxFTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgZmlsZW5hbWUgb2YgdGhlIHJlY2lwZSB0aGF0IG93bnMgdGhlIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayB0aGF0CisgICAgICAgICAgICAgICAgICAgIHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5teS1yZWNpcGUuYmI8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcsIHRoZSA8ZmlsZW5hbWU+QkJfRklMRU5BTUU8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAiL2Zvby9wYXRoL215LXJlY2lwZS5iYiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48Z2xvc3N0ZXJtPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgR2l0IG1ldGFkYXRhLCB0byBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBBbnlvbmUgd2lzaGluZyB0byBjcmVhdGUgYSBzb3VyY2UgbWlycm9yIHdvdWxkIHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBjcmVhdGluZyBhbmQgcGxhY2luZyB0YXJiYWxscyBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgR2l0IHJlcG9zaXRvcmllcyBpcyBub3QgdGhlIGRlZmF1bHQgYWN0aW9uIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9IQVNIQ09ORklHX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9IQVNIQ09ORklHX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSBiYXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0sIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgcmV1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmUgb2YgdGhlIHdheXMgQml0QmFrZSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmUtcGFyc2UgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW4gbWV0YWRhdGEgaXMgdGhyb3VnaCBjaGVja3N1bXMgb2YgdGhlIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlIG9mIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHZhcmlhYmxlcyB0aGF0IHlvdSB0eXBpY2FsbHkgd2FudCB0byBleGNsdWRlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcgd2hldGhlciBvciBub3QgdG8gcmUtcGFyc2UgYW5kIHRodXMgcmVidWlsZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSB3b3VsZCB1c3VhbGx5IGV4Y2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRJTUU8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZXNlIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGNoYW5naW5nLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlkIG5vdCBleGNsdWRlIHRoZW0sIEJpdEJha2Ugd291bGQgbmV2ZXIgcmV1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0hBU0hCQVNFX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gY2hlY2tzdW0gYW5kCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGNhbiB0aGVyZWZvcmUgY2hhbmdlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgYWZmZWN0aW5nIHRoZSBjaGVja3N1bSBtZWNoYW5pc20uCisgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGV4YW1wbGUgd291bGQgYmUgdGhlIHZhcmlhYmxlIGZvciB0aGUgcGF0aCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBvdXRwdXQgc2hvdWxkIG5vdCAoYW5kIHVzdWFsbHkgZG9lcyBub3QpIGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IHdhcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9IQVNIQ0hFQ0tfRlVOQ1RJT04nPjxnbG9zc3Rlcm0+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICJzZXRzY2VuZSIgcGFydCBvZiB0aGUgdGFzaydzIGV4ZWN1dGlvbiBpbiBvcmRlciB0bworICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZSB0aGUgbGlzdCBvZiB0YXNrIGhhc2hlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2Ygc2V0c2NlbmUgdGFza3MgdGhhdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY29kZSwgdGhlIG9iamVjdGl2ZQorICAgICAgICAgICAgICAgICAgICBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBhIGdpdmVuIHNldHNjZW5lIGZ1bmN0aW9uIGlzIGxpa2VseQorICAgICAgICAgICAgICAgICAgICB0byB3b3JrIG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgSXQncyBlYXNpZXIgdG8gY2hlY2sgdGhlIGxpc3Qgb2Ygc2V0c2NlbmUgZnVuY3Rpb25zIGluCisgICAgICAgICAgICAgICAgICAgIG9uZSBwYXNzIHRoYW4gdG8gY2FsbCBtYW55IGluZGl2aWR1YWwgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXR1cm5lZCBsaXN0IG5lZWQgbm90IGJlIGNvbXBsZXRlbHkgYWNjdXJhdGUuCisgICAgICAgICAgICAgICAgICAgIEEgZ2l2ZW4gc2V0c2NlbmUgdGFzayBjYW4gc3RpbGwgbGF0ZXIgZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIG1vcmUgYWNjdXJhdGUgdGhlIGRhdGEgcmV0dXJuZWQsIHRoZSBtb3JlCisgICAgICAgICAgICAgICAgICAgIGVmZmljaWVudCB0aGUgYnVpbGQgd2lsbCBiZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9JTlZBTElEQ09ORic+PGdsb3NzdGVybT5CQl9JTlZBTElEQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Db25maWdQYXJzZWQ8L2ZpbGVuYW1lPiBldmVudCB0byB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgIHJlLXBhcnNpbmcgdGhlIGJhc2UgbWV0YWRhdGEgKGkuZS4gYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5Db25maWdQYXJzZWQ8L2ZpbGVuYW1lPiBldmVudCBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB0cmlnZ2VyIHRoZSByZS1wYXJzZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYmUgY2FyZWZ1bCB0byBhdm9pZCByZWN1cnNpdmUgbG9vcHMgd2l0aCB0aGlzCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTE9HRk1UJz48Z2xvc3N0ZXJtPkJCX0xPR0ZNVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGxvZyBmaWxlcyBzYXZlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVQnPjxmaWxlbmFtZT5UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5CQl9MT0dGTVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpcyB1bmRlZmluZWQgYW5kIHRoZSBsb2cgZmlsZSBuYW1lcyBnZXQgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbG9nLnt0YXNrfS57cGlkfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZvcmNlIGxvZyBmaWxlcyB0byB0YWtlIGEgc3BlY2lmaWMgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OSUNFX0xFVkVMJz48Z2xvc3N0ZXJtPkJCX05JQ0VfTEVWRUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIEJpdEJha2UgdG8gcnVuIGF0IGEgc3BlY2lmaWMgcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbmljZSBsZXZlbCkuCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBwZXJtaXNzaW9ucyB1c3VhbGx5IG1lYW4gdGhhdCBCaXRCYWtlIGNhbiByZWR1Y2UgaXRzCisgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5IGJ1dCBub3QgcmFpc2UgaXQgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfVEFTS19OSUNFX0xFVkVMJz48ZmlsZW5hbWU+QkJfVEFTS19OSUNFX0xFVkVMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05PX05FVFdPUksnPjxnbG9zc3Rlcm0+QkJfTk9fTkVUV09SSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxlcyBuZXR3b3JrIGFjY2VzcyBpbiB0aGUgQml0QmFrZSBmZXRjaGVyIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBhY2Nlc3MgZGlzYWJsZWQsIGFueSBjb21tYW5kIHRoYXQgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzIHRoZSBuZXR3b3JrIGJlY29tZXMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGluZyBuZXR3b3JrIGFjY2VzcyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMsIHJ1bm5pbmcgYnVpbGRzIHdoZW4gbm90IGNvbm5lY3RlZCB0byB0aGUgSW50ZXJuZXQsCisgICAgICAgICAgICAgICAgICAgIGFuZCB3aGVuIG9wZXJhdGluZyBpbiBjZXJ0YWluIGtpbmRzIG9mIGZpcmV3YWxsCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGdsb3NzdGVybT5CQl9OVU1CRVJfVEhSRUFEUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsCisgICAgICAgICAgICAgICAgICAgIGF0IGFueSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBzdXBwb3J0cyBtdWx0aXBsZSBjb3JlcywKKyAgICAgICAgICAgICAgICAgICAgYSBnb29kIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gdHdpY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBjb3Jlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUyc+PGdsb3NzdGVybT5CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBCaXRCYWtlIHVzZXMgd2hlbiBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgaXMgZXF1YWwgdG8gdGhlIG51bWJlcgorICAgICAgICAgICAgICAgICAgICBvZiBjb3JlcyBvbiB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX09SSUdFTlYnPjxnbG9zc3Rlcm0+QkJfT1JJR0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGV4dGVybmFsIGVudmlyb25tZW50IGluCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIEJpdEJha2Ugd2FzIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvcHkgaXMgdGFrZW4gYmVmb3JlIGFueSB3aGl0ZWxpc3RlZCB2YXJpYWJsZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGZpbHRlcmVkIGludG8gQml0QmFrZSdzIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyB2YXJpYWJsZSBpcyBhIGRhdGFzdG9yZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHF1ZXJpZWQgdXNpbmcgdGhlIG5vcm1hbCBkYXRhc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9QUkVTRVJWRV9FTlYnPjxnbG9zc3Rlcm0+QkJfUFJFU0VSVkVfRU5WPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIHdoaXRlbGlzdGluZyBhbmQgaW5zdGVhZCBhbGxvd3MgYWxsIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfUlVORk1UJz48Z2xvc3N0ZXJtPkJCX1JVTkZNVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgc2NyaXB0IGZpbGVzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHJ1biBmaWxlcykgc2F2ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJfUlVORk1UPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGFuZCB0aGUgcnVuIGZpbGUgbmFtZXMgZ2V0IGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJ1bi57dGFza30ue3BpZH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBydW4gZmlsZXMgdG8gdGFrZSBhIHNwZWNpZmljIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfUlVOVEFTSyc+PGdsb3NzdGVybT5CQl9SVU5UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSAiZG9fIiBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWc8L2ZpbGVuYW1lPiwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICJjb25maWciLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NDSEVEVUxFUic+PGdsb3NzdGVybT5CQl9TQ0hFRFVMRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0cyB0aGUgbmFtZSBvZiB0aGUgc2NoZWR1bGVyIHRvIHVzZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxpbmcgb2YgQml0QmFrZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgVGhyZWUgb3B0aW9ucyBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YmFzaWM8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2ljIGZyYW1ld29yayBmcm9tIHdoaWNoIGV2ZXJ5dGhpbmcgZGVyaXZlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgdGFza3MgdG8gYmUgb3JkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNhbGx5IGFzIHRoZXkgYXJlIHBhcnNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3BlZWQ8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZXMgdGFza3MgZmlyc3QgdGhhdCBoYXZlIG1vcmUgdGFza3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgInNwZWVkIiBvcHRpb24gaXMgdGhlIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNvbXBsZXRpb248L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBzY2hlZHVsZXIgdG8gdHJ5IHRvIGNvbXBsZXRlIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgb25jZSBpdHMgYnVpbGQgaGFzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NDSEVEVUxFUlMnPjxnbG9zc3Rlcm0+QkJfU0NIRURVTEVSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGN1c3RvbSBzY2hlZHVsZXJzIHRvIGltcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tIHNjaGVkdWxlcnMgbmVlZCB0byBiZSBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SdW5RdWV1ZVNjaGVkdWxlcjwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gaG93IHRvIHNlbGVjdCBhIHNjaGVkdWxlciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0NIRURVTEVSJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NFVFNDRU5FX0RFUFZBTElEJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIEJpdEJha2UgY2FsbHMgdGhhdCBkZXRlcm1pbmVzCisgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgQml0QmFrZSByZXF1aXJlcyBhIHNldHNjZW5lIGRlcGVuZGVuY3kgdG8gYmUgbWV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgYSBzZXRzY2VuZSB0YXNrLCBCaXRCYWtlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGtub3cgd2hpY2ggZGVwZW5kZW5jaWVzIG9mIHRoYXQgc2V0c2NlbmUgdGFzayBhbHNvIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgcnVuLgorICAgICAgICAgICAgICAgICAgICBXaGV0aGVyIGRlcGVuZGVuY2llcyBhbHNvIG5lZWQgdG8gYmUgcnVuIGlzIGhpZ2hseQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUgcmV0dXJucyBhCisgICAgICAgICAgICAgICAgICAgICJUcnVlIiBvciAiRmFsc2UiIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkZXBlbmRlbmN5IG5lZWRzCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIG1ldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04nPjxnbG9zc3Rlcm0+QkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhhdCB2ZXJpZmllcyB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwbGFubmVkIHRhc2sgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgQml0QmFrZSBoYXMgYSBsaXN0IG9mIHNldHNjZW5lCisgICAgICAgICAgICAgICAgICAgIHRhc2tzIHRoYXQgaGF2ZSBydW4gYW5kIGVpdGhlciBzdWNjZWVkZWQgb3IgZmFpbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gYWxsb3dzIGZvciBhIHRhc2sgbGlzdCBjaGVjayB0byBzZWUgaWYgdGhleQorICAgICAgICAgICAgICAgICAgICBtYWtlIHNlbnNlLgorICAgICAgICAgICAgICAgICAgICBFdmVuIGlmIEJpdEJha2Ugd2FzIHBsYW5uaW5nIHRvIHNraXAgYSB0YXNrLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbiBmb3JjZSBCaXRCYWtlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFzaywgd2hpY2ggaXMgbmVjZXNzYXJ5IHVuZGVyIGNlcnRhaW4gbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBjaXJjdW1zdGFuY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTJz48Z2xvc3N0ZXJtPkJCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlIGZsYWdzICh2YXJmbGFncykKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgc2FmZWx5IGV4Y2x1ZGVkIGZyb20gY2hlY2tzdW0KKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGdlbmVyYXRpbmcgY2hlY2tzdW0gb3IgZGVwZW5kZW5jeSBkYXRhIGZvciBrZXlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUsIHRoZSBmbGFncyBzZXQgYWdhaW5zdCB0aGF0IGtleSBhcmUgbm9ybWFsbHkKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIGNoZWNrc3VtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB2YXJmbGFncywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TSUdOQVRVUkVfSEFORExFUic+PGdsb3NzdGVybT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBzaWduYXR1cmUgaGFuZGxlciBCaXRCYWtlIHVzZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzaWduYXR1cmUgaGFuZGxlciBkZWZpbmVzIHRoZSB3YXkgc3RhbXAgZmlsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYW5kIGhhbmRsZWQsIGlmIGFuZCBob3cgdGhlIHNpZ25hdHVyZSBpcworICAgICAgICAgICAgICAgICAgICBpbmNvcnBvcmF0ZWQgaW50byB0aGUgc3RhbXBzLCBhbmQgaG93IHRoZSBzaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgaXRzZWxmIGlzIGdlbmVyYXRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBuZXcgc2lnbmF0dXJlIGhhbmRsZXIgY2FuIGJlIGFkZGVkIGJ5IGluamVjdGluZyBhIGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNpZ25hdHVyZUdlbmVyYXRvcjwvZmlsZW5hbWU+IGNsYXNzIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBuYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1JDUkVWX1BPTElDWSc+PGdsb3NzdGVybT5CQl9TUkNSRVZfUE9MSUNZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmZXRjaGVyIHdoZW4gaXQgaW50ZXJhY3RzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvbnRyb2wgc3lzdGVtcyBhbmQgZHluYW1pYyBzb3VyY2UgcmV2aXNpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkJCX1NSQ1JFVl9QT0xJQ1k8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICB1c2VmdWwgd2hlbiB3b3JraW5nIHdpdGhvdXQgYSBuZXR3b3JrLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB1c2luZyBvbmUgb2YgdHdvIHBvbGljaWVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jYWNoZTwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRhaW5zIHRoZSB2YWx1ZSB0aGUgc3lzdGVtIG9idGFpbmVkIHByZXZpb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jbGVhcjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWVyaWVzIHRoZSBzb3VyY2UgY29udHJvbHMgc3lzdGVtIGV2ZXJ5IHRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIHBvbGljeSwgdGhlcmUgaXMgbm8gY2FjaGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJjbGVhciIgcG9saWN5IGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TVEFNUF9QT0xJQ1knPjxnbG9zc3Rlcm0+QkJfU1RBTVBfUE9MSUNZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIG1vZGUgdXNlZCBmb3IgaG93IHRpbWVzdGFtcHMgb2Ygc3RhbXAgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNvbXBhcmVkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbW9kZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBlcmZpbGU8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXN0YW1wIGNvbXBhcmlzb25zIGFyZSBvbmx5IG1hZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHRpbWVzdGFtcHMgb2YgYSBzcGVjaWZpYyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5mdWxsPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVzdGFtcCBjb21wYXJpc29ucyBhcmUgbWFkZSBmb3IgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53aGl0ZWxpc3Q8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpY2FsIHRvICJmdWxsIiBtb2RlIGV4Y2VwdCB0aW1lc3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29ucyBhcmUgbWFkZSBmb3IgcmVjaXBlcyBsaXN0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NUQU1QX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX1NUQU1QX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFtcCBwb2xpY2llcyBhcmUgbGFyZ2VseSBvYnNvbGV0ZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWN0aW9uIG9mIHNldHNjZW5lIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1RBTVBfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkJCX1NUQU1QX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBmaWxlcyB3aG9zZSBzdGFtcCBmaWxlIHRpbWVzdGFtcHMgYXJlIGNvbXBhcmVkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHN0YW1wIHBvbGljeSBtb2RlIGlzIHNldCB0byAid2hpdGVsaXN0Ii4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHN0YW1wIHBvbGljaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVEFNUF9QT0xJQ1knPjxmaWxlbmFtZT5CQl9TVEFNUF9QT0xJQ1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1RSSUNUX0NIRUNLU1VNJz48Z2xvc3N0ZXJtPkJCX1NUUklDVF9DSEVDS1NVTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXRzIGEgbW9yZSBzdHJpY3QgY2hlY2tzdW0gbWVjaGFuaXNtIGZvciBub24tbG9jYWwgVVJMcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGEgdmFsdWUgY2F1c2VzIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgdG8gcmVwb3J0IGFuIGVycm9yIGlmIGl0IGVuY291bnRlcnMgYSBub24tbG9jYWwgVVJMCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lcyBub3QgaGF2ZSBhdCBsZWFzdCBvbmUgY2hlY2tzdW0gc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1RBU0tfTklDRV9MRVZFTCc+PGdsb3NzdGVybT5CQl9UQVNLX05JQ0VfTEVWRUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHNwZWNpZmljIHRhc2tzIHRvIGNoYW5nZSB0aGVpciBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAoaS5lLiBuaWNlIGxldmVsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBpbiBjb21iaW5hdGlvbiB3aXRoIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzIHRvIHJhaXNlIG9yIGxvd2VyIHByaW9yaXRpZXMgb2Ygc3BlY2lmaWMgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnJz5Zb2N0byBQcm9qZWN0PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXV0b2J1aWxkZXIsIFFFTVUgZW11bGF0aW9uIGluIGltYWdlcyBpcyBnaXZlbiBhIGhpZ2hlcgorICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSBhcyBjb21wYXJlZCB0byBidWlsZCB0YXNrcyB0byBlbnN1cmUgdGhhdCBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IHN1ZmZlciB0aW1lb3V0cyBvbiBsb2FkZWQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9UQVNLSEFTSCc+PGdsb3NzdGVybT5CQl9UQVNLSEFTSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gYW4gZXhlY3V0aW5nIHRhc2ssIHRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhhc2gKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2sgYXMgcmV0dXJuZWQgYnkgdGhlIGN1cnJlbnRseSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfVkVSQk9TRV9MT0dTJz48Z2xvc3N0ZXJtPkJCX1ZFUkJPU0VfTE9HUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyBob3cgdmVyYm9zZSBCaXRCYWtlIGlzIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIElmIHNldCwgc2hlbGwgc2NyaXB0cyBlY2hvIGNvbW1hbmRzIGFuZCBzaGVsbCBzY3JpcHQgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGFwcGVhcnMgb24gc3RhbmRhcmQgb3V0IChzdGRvdXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1dPUktFUkNPTlRFWFQnPjxnbG9zc3Rlcm0+QkJfV09SS0VSQ09OVEVYVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBleGVjdXRpbmcgYSB0YXNrLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHNldHMgdGhpcyB2YXJpYWJsZSB0byAiMSIgd2hlbiBhIHRhc2sgaXMKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyBub3Qgc2V0IHdoZW4gdGhlIHRhc2sgaXMgaW4gc2VydmVyIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHBhcnNpbmcgb3IgZXZlbnQgaGFuZGxpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkNMQVNTRVhURU5EJz48Z2xvc3N0ZXJtPkJCQ0xBU1NFWFRFTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzIG9mIHRoZXNlIHZhcmlhbnRzIGZvciByZWNpcGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBDb3JlIG1ldGFkYXRhIGFyZSAibmF0aXZlcyIgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIGlzIGEgY29weSBvZgorICAgICAgICAgICAgICAgICAgICBRdWlsdCBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbTsgImNyb3NzZXMiIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgYXMgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LCB3aGljaCBpcyBhIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgbWFjaGluZSBidXQgcHJvZHVjZXMgYmluYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBydW4gb24gdGhlIHRhcmdldCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+OworICAgICAgICAgICAgICAgICAgICAibmF0aXZlc2RrIiwgd2hpY2ggdGFyZ2V0cyB0aGUgU0RLIG1hY2hpbmUgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+OyBhbmQgIm11bGl0bGlicyIgaW4gdGhlIGZvcm0KKyAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT5tdWx0aWxpYjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBidWlsZCBhIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSByZWNpcGUgd2l0aCBhIG1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50IG9mIGNvZGUsIGl0IHVzdWFsbHkgaXMgYXMgc2ltcGxlIGFzIGFkZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJuYXRpdmUiIHZhcmlhbnRzIGFyZSBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkNMQVNTRVhURU5EID0rICJuYXRpdmUgbmF0aXZlc2RrIgorICAgICBCQkNMQVNTRVhURU5EID0rICJtdWx0aWxpYjo8cmVwbGFjZWFibGU+bXVsdGlsaWJfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCREVCVUcnPjxnbG9zc3Rlcm0+QkJERUJVRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBCaXRCYWtlIGRlYnVnIG91dHB1dCBsZXZlbCB0byBhIHNwZWNpZmljIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGFzIGluY3JlbWVudGVkIGJ5IHRoZSA8ZmlsZW5hbWU+LWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz48Z2xvc3N0ZXJtPkJCRklMRV9DT0xMRUNUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBuYW1lcyBvZiBjb25maWd1cmVkIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbmFtZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgb3RoZXIgPGZpbGVuYW1lPkJCRklMRV8qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIGVhY2ggbGF5ZXIgYXBwZW5kcyBpdHMgbmFtZSB0byB0aGlzIHZhcmlhYmxlIGluIGl0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+PGdsb3NzdGVybT5CQkZJTEVfUEFUVEVSTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOX2VtZW5sb3c8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkJCRklMRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2FtZSByZWNpcGUgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZSAtIGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGxldHRpbmcgeW91IGNvbnRyb2wgdGhlIHByZWNlZGVuY2UgZm9yIHRoZSBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmVjZWRlbmNlIGVzdGFibGlzaGVkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBzdGFuZHMgcmVnYXJkbGVzcyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSdzIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgbGF5ZXIgdGhhdCBoYXMgYSByZWNpcGUgd2l0aCBhIGhpZ2hlciA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB2YWx1ZSBidXQgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gaXMgc2V0IHRvIGhhdmUgYSBsb3dlciBwcmVjZWRlbmNlIHN0aWxsIGhhcyBhCisgICAgICAgICAgICAgICAgICAgIGxvd2VyIHByZWNlZGVuY2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkEgbGFyZ2VyIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc3VsdHMgaW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSA2IGhhcyBhIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHZhbHVlIDUuCisgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGJhc2VkIG9uIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyAoc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+TEFZRVJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBwcmlvcml0eSwgaWYgdW5zcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGF5ZXIgd2l0aCBubyBkZXBlbmRlbmNpZXMsIGlzIHRoZSBsb3dlc3QgZGVmaW5lZCBwcmlvcml0eSArIDEKKyAgICAgICAgICAgICAgICAgICAgKG9yIDEgaWYgbm8gcHJpb3JpdGllcyBhcmUgZGVmaW5lZCkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBjb21tYW5kIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBzaG93LWxheWVyczwvZmlsZW5hbWU+IHRvIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgYWxsIGNvbmZpZ3VyZWQgbGF5ZXJzIGFsb25nIHdpdGggdGhlaXIgcHJpb3JpdGllcy4KKyAgICAgICAgICAgICAgICA8L3RpcD4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRVMnPjxnbG9zc3Rlcm0+QkJGSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3Qgb2YgcmVjaXBlIGZpbGVzIEJpdEJha2UgdXNlcyB0byBidWlsZCBzb2Z0d2FyZS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQklOQ0xVREVEJz48Z2xvc3N0ZXJtPkJCSU5DTFVERUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGwgb2YgYWxsIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIHBhcnNlciBpbmNsdWRlZCBkdXJpbmcgcGFyc2luZyBvZiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gYSB2YWx1ZSwgZW5hYmxlcyBwcmludGluZyB0aGUgdGFzayBsb2cgd2hlbgorICAgICAgICAgICAgICAgICAgICByZXBvcnRpbmcgYSBmYWlsZWQgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQklOQ0xVREVMT0dTX0xJTkVTJz48Z2xvc3N0ZXJtPkJCSU5DTFVERUxPR1NfTElORVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxmaWxlbmFtZT5CQklOQ0xVREVMT0dTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCwgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrIGxvZyBmaWxlIHRvIHByaW50IHdoZW4gcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IDxmaWxlbmFtZT5CQklOQ0xVREVMT0dTX0xJTkVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgbG9nIGlzIHByaW50ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlMnPjxnbG9zc3Rlcm0+QkJMQVlFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbGF5ZXJzIHRvIGVuYWJsZSBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA9ICIgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YSBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEtbXlrZXJuZWwgXAorICAgICAgICIKKworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBlbmFibGVzIGZvdXIgbGF5ZXJzLCBvbmUgb2Ygd2hpY2ggaXMgYSBjdXN0b20sIHVzZXItZGVmaW5lZCBsYXllcgorICAgICAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+bWV0YS1teWtlcm5lbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTX0ZFVENIX0RJUic+PGdsb3NzdGVybT5CQkxBWUVSU19GRVRDSF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgYmFzZSBsb2NhdGlvbiB3aGVyZSBsYXllcnMgYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBsb2NhdGlvbiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7Q09SRUJBU0V9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIGxheWVyaW5kZXgtZmV0Y2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGVsbHMgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4gd2hlcmUgdG8gcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZldGNoZWQgbGF5ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTUFTSyc+PGdsb3NzdGVybT5CQk1BU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3NpbmcgcmVjaXBlcyBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5CQk1BU0s8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0byAiaGlkZSIgdGhlc2UgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgaWdub3JlcyBhbnkgcmVjaXBlIG9yIHJlY2lwZSBhcHBlbmQgZmlsZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYXMgaWYgQml0QmFrZSBkb2VzIG5vdCBzZWUgdGhlbSBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgbWF0Y2hpbmcgZmlsZXMgYXJlIG5vdCBwYXJzZWQgb3Igb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgQml0QmFrZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSB5b3UgcHJvdmlkZSBpcyBwYXNzZWQgdG8gUHl0aG9uJ3MgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhwcmVzc2lvbiBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmdWxsIHBhdGhzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCBpbmZvcm1hdGlvbiwgc2VlIFB5dGhvbidzCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RvY3MucHl0aG9uLm9yZy9yZWxlYXNlLzIuMy9saWIvcmUtc3ludGF4Lmh0bWwnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyBhIGNvbXBsZXRlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICB0byB0ZWxsIEJpdEJha2UgdG8gaWdub3JlIGFsbCByZWNpcGUgYW5kIHJlY2lwZSBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLXRpL3JlY2lwZXMtbWlzYy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJNQVNLID0gIm1ldGEtdGkvcmVjaXBlcy1taXNjLyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBtYXNrIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBvciByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZlcnRpY2FsIGJhciB0byBzZXBhcmF0ZSB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgbWFza3Mgb3V0IG11bHRpcGxlIGRpcmVjdG9yaWVzIGFuZAorICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHJlY2lwZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJNQVNLID0gIm1ldGEtdGkvcmVjaXBlcy1taXNjL3xtZXRhLXRpL3JlY2lwZXMtdGkvcGFja2FnZWdyb3VwLyIKKyAgICAgQkJNQVNLIC49ICJ8LiptZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC8iCisgICAgIEJCTUFTSyAuPSAifC4qb3BlbmxkYXAiCisgICAgIEJCTUFTSyAuPSAifC4qb3BlbmN2IgorICAgICBCQk1BU0sgLj0gInwuKmx6bWEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgTm90aWNlIGhvdyB0aGUgdmVydGljYWwgYmFyIGlzIHVzZWQgdG8gYXBwZW5kIHRoZSBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIGEgZGlyZWN0b3J5IG5hbWUsIHVzZSB0aGUgdHJhaWxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsYXNoIGNoYXJhY3RlciB0byBlbnN1cmUgeW91IG1hdGNoIGp1c3QgdGhhdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlBBVEgnPjxnbG9zc3Rlcm0+QkJQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBhbmQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biBCaXRCYWtlIGZyb20gYSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBiZSBzdXJlIHRvIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdG8gcG9pbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBhcyB5b3Ugd291bGQgYW55IGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJ1biBCaXRCYWtlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgQkJQQVRIPSI8cmVwbGFjZWFibGU+YnVpbGRfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4iCisgICAgICQgZXhwb3J0IEJCUEFUSAorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlNFUlZFUic+PGdsb3NzdGVybT5CQlNFUlZFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgd2hlbiB5b3UgZW1wbG95IG1lbW9yeS1yZXNpZGVudAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCVkVSU0lPTlMnPjxnbG9zc3Rlcm0+QkJWRVJTSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgYSBzaW5nbGUgcmVjaXBlIHRvIGJ1aWxkIG11bHRpcGxlIHZlcnNpb25zIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBmcm9tIGEgc2luZ2xlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBhYmxlIHRvIHNwZWNpZnkgY29uZGl0aW9uYWwgbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbWVjaGFuaXNtIGZvciBhIHNpbmdsZSB2ZXJzaW9uIG9yIGZvciBhbiBvcHRpb25hbGx5IG5hbWVkCisgICAgICAgICAgICAgICAgICAgIHJhbmdlIG9mIHZlcnNpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YXJpYW50cy1jbGFzcy1leHRlbnNpb24tbWVjaGFuaXNtJz5WYXJpYW50cyAtIENsYXNzIEV4dGVuc2lvbiBNZWNoYW5pc208L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJJVEJBS0VfVUknPjxnbG9zc3Rlcm0+QklUQkFLRV9VSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIHNwZWNpZnkgdGhlIFVJIG1vZHVsZSB0byB1c2Ugd2hlbiBydW5uaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoaXMgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi11PC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTEROQU1FJz48Z2xvc3N0ZXJtPkJVSUxETkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIG5hbWUgYXNzaWduZWQgdG8gdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBkZWZhdWx0cyB0byBhIGRhdGV0aW1lIHN0YW1wIG9mIHdoZW4gdGhlIGJ1aWxkIHdhcworICAgICAgICAgICAgICAgICAgICBzdGFydGVkIGJ1dCBjYW4gYmUgZGVmaW5lZCBieSB0aGUgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlpSRElSJz48Z2xvc3N0ZXJtPkJaUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgQmF6YWFyCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1jJz48dGl0bGU+QzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DQUNIRSc+PGdsb3NzdGVybT5DQUNIRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbWV0YWRhdGEgc28gaXQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJzZWQgZXZlcnkKKyAgICAgICAgICAgICAgICAgICAgdGltZSBCaXRCYWtlIGlzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1ZTRElSJz48Z2xvc3N0ZXJtPkNWU0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IHVuZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBDVlMgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWQnPjx0aXRsZT5EPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGdsb3NzdGVybT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgd2VhayBiaWFzIGZvciByZWNpcGUgc2VsZWN0aW9uIHByaW9yaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzYWdlIG9mIHRoaXMgaXMgdmFyaWFibGUgaXMgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIGl0IHRvICItMSIgd2l0aGluIGEgcmVjaXBlIGZvciBhIGRldmVsb3BtZW50IHZlcnNpb24gb2YgYQorICAgICAgICAgICAgICAgICAgICBwaWVjZSBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIHZhcmlhYmxlIGluIHRoaXMgd2F5IGNhdXNlcyB0aGUgc3RhYmxlIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB0byBidWlsZCBieSBkZWZhdWx0IGluIHRoZSBhYnNlbmNlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1ZFUlNJT04nPlBSRUZFUlJFRF9WRVJTSU9OPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlaW5nIHVzZWQgdG8gYnVpbGQgdGhlIGRldmVsb3BtZW50IHZlcnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmlhcyBwcm92aWRlZCBieSA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgd2VhayBhbmQgaXMgb3ZlcnJpZGRlbiBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRV9QUklPUklUWSc+QkJGSUxFX1BSSU9SSVRZPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgdmFyaWFibGUgaXMgZGlmZmVyZW50IGJldHdlZW4gdHdvIGxheWVycworICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBFTkRTJz48Z2xvc3N0ZXJtPkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIHNpbXBsZSBleGFtcGxlIGZvciB0d28gcmVjaXBlcyBuYW1lZCAiYSIgYW5kCisgICAgICAgICAgICAgICAgICAgICJiIiB0aGF0IHByb2R1Y2Ugc2ltaWxhcmx5IG5hbWVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhcHBlYXJzIGluIHRoZSAiYSIgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgZGVwZW5kZW5jeSBpcyBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIGZvciByZWNpcGUgImEiCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBvZiByZWNpcGUgImIiLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIGFueXRoaW5nIHRoYXQgcmVjaXBlICJiIiBwdXRzIGludG8gc3lzcm9vdAorICAgICAgICAgICAgICAgICAgICBpcyBhdmFpbGFibGUgd2hlbiByZWNpcGUgImEiIGlzIGNvbmZpZ3VyaW5nIGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFU0NSSVBUSU9OJz48Z2xvc3N0ZXJtPkRFU0NSSVBUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbG9uZyBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ETF9ESVInPjxnbG9zc3Rlcm0+RExfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjZW50cmFsIGRvd25sb2FkIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvCisgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRvd25sb2Fkcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGdldHMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgc3VpdGFibGUgZm9yIG1pcnJvcmluZyBmb3IgZXZlcnl0aGluZyBleGNlcHQgR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGFyYmFsbHMgb2YgR2l0IHJlcG9zaXRvcmllcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisKKyAgICAgICAgPC9nbG9zc2VudHJ5PgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1lJz48dGl0bGU+RTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPjxnbG9zc3Rlcm0+RVhDTFVERV9GUk9NX1dPUkxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIHdvcmxkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgd29ybGQgYnVpbGRzLCBCaXRCYWtlIGxvY2F0ZXMsIHBhcnNlcyBhbmQgYnVpbGRzIGFsbAorICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGZvdW5kIGluIGV2ZXJ5IGxheWVyIGV4cG9zZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBleGNsdWRlIGEgcmVjaXBlIGZyb20gYSB3b3JsZCBidWlsZCB1c2luZyB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIGFkZGVkIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtYXkgc3RpbGwgYmUgYnVpbHQgZHVyaW5nIGEgd29ybGQgYnVpbGQgaW4gb3JkZXIgdG8gc2F0aXNmeQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIGEgcmVjaXBlIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgcmVjaXBlIGlzIG5vdCBleHBsaWNpdGx5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgaW4gYSB3b3JsZCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZic+PHRpdGxlPkY8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1QnPjxnbG9zc3Rlcm0+RkFLRVJPT1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBjb21tYW5kIHRvIHVzZSB3aGVuIHJ1bm5pbmcgYSBzaGVsbCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgIGluIGEgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkZBS0VST09UPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgb2Jzb2xldGUKKyAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GQUtFUk9PVCo8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlc2UgZW50cmllcyBpbiB0aGUgZ2xvc3NhcnkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1RCQVNFRU5WJz48Z2xvc3N0ZXJtPkZBS0VST09UQkFTRUVOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIGV4ZWN1dGluZworICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1hbmQgZGVmaW5lZCBieQorICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09UQ01EJz48ZmlsZW5hbWU+RkFLRVJPT1RDTUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgc3RhcnRzIHRoZSBiaXRiYWtlLXdvcmtlciBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1RDTUQnPjxnbG9zc3Rlcm0+RkFLRVJPT1RDTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSBjb21tYW5kIHRoYXQgc3RhcnRzIHRoZSBiaXRiYWtlLXdvcmtlcgorICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1RESVJTJz48Z2xvc3N0ZXJtPkZBS0VST09URElSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlIGJlZm9yZSBydW5uaW5nIGEgdGFzayBpbgorICAgICAgICAgICAgICAgICAgICAgdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09URU5WJz48Z2xvc3N0ZXJtPkZBS0VST09URU5WPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBMaXN0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gcnVubmluZyBhIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09UQkFTRUVOVic+PGZpbGVuYW1lPkZBS0VST09UQkFTRUVOVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkFLRVJPT1ROT0VOVic+PGdsb3NzdGVybT5GQUtFUk9PVE5PRU5WPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBMaXN0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gcnVubmluZyBhIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgbm90IGluIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09URU5WJz48ZmlsZW5hbWU+RkFLRVJPT1RFTlY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZFVENIQ01EJz48Z2xvc3N0ZXJtPkZFVENIQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGNvbW1hbmQgdGhlIEJpdEJha2UgZmV0Y2hlciBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZXMgd2hlbiBydW5uaW5nIGZldGNoIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHVzZSBhbiBvdmVycmlkZSBzdWZmaXggd2hlbiB5b3UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+RkVUQ0hDTURfZ2l0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPkZFVENIQ01EX3N2bjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFJz48Z2xvc3N0ZXJtPkZJTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIGF0IHRoZSBjdXJyZW50IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2V0cyB0aGlzIHZhcmlhYmxlIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBmaWxlIGJlaW5nIHBhcnNlZC4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIHNldHMgdGhpcyB2YXJpYWJsZSB3aGVuIGEgcmVjaXBlIGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIHRvIGlkZW50aWZ5IHRoZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU0RJUic+PGdsb3NzdGVybT5GSUxFU0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgZGlyZWN0b3JpZXMgQml0QmFrZSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvcgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJsb2NhbCIgZmV0Y2hlciBtb2R1bGUgdXNlcyB0aGVzZSBkaXJlY3RvcmllcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIGhhbmRsaW5nIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gVVJMcyBpZiB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICB3YXMgbm90IGZvdW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkIGFuZCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IGluIGFsbCBuZXcgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTUEFUSCc+PGdsb3NzdGVybT5GSUxFU1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibG9jYWwiIGZldGNoZXIgbW9kdWxlIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBiZWhhdmVzIGxpa2UgYSBzaGVsbCA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGFyZSBzZWFyY2hlZCBsZWZ0LXRvLXJpZ2h0IGluIG9yZGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWcnPjx0aXRsZT5HPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdJVERJUic+PGdsb3NzdGVybT5HSVRESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgd2hlbiBpdCBpcyBjbG9uZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktaCc+PHRpdGxlPkg8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSEdESVInPjxnbG9zc3Rlcm0+SEdESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIE1lcmN1cmlhbAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT01FUEFHRSc+PGdsb3NzdGVybT5IT01FUEFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZm91bmQuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWknPjx0aXRsZT5JPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSEVSSVQnPjxnbG9zc3Rlcm0+SU5IRVJJVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdAorICAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1qJz48dGl0bGU+SjwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWsnPjx0aXRsZT5LPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1sJz48dGl0bGU+TDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRFUEVORFMnPjxnbG9zc3Rlcm0+TEFZRVJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdHMgdGhlIGxheWVycywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgdXBvbiB3aGljaCB0aGlzIHJlY2lwZSBkZXBlbmRzLgorICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIHNwZWNpZnkgYSBzcGVjaWZpYyBsYXllciB2ZXJzaW9uIGZvciBhIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgYnkgYWRkaW5nIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxheWVyIG5hbWUgd2l0aCBhIGNvbG9uLCAoZS5nLiAiYW5vdGhlcmxheWVyOjMiCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNvbXBhcmVkIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSVkVSU0lPTic+PGZpbGVuYW1lPkxBWUVSVkVSU0lPTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT5fYW5vdGhlcmxheWVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlKS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBwcm9kdWNlcyBhbiBlcnJvciBpZiBhbnkgZGVwZW5kZW5jeSBpcyBtaXNzaW5nIG9yCisgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJzaW9uIG51bWJlcnMgZG8gbm90IG1hdGNoIGV4YWN0bHkgKGlmIHNwZWNpZmllZCkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHVzZSB0aGUgc3BlY2lmaWMgbGF5ZXIgbmFtZSBhcyBhIHN1ZmZpeAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkxBWUVSREVQRU5EU19teWxheWVyPC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxBWUVSRElSJz48Z2xvc3N0ZXJtPkxBWUVSRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB1c2VkIGluc2lkZSB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIG9mIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5IHdoZW4gcGFyc2luZyBvZiB0aGUgZmlsZSBjb21wbGV0ZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJWRVJTSU9OJz48Z2xvc3N0ZXJtPkxBWUVSVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPk9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJERVBFTkRTJz48ZmlsZW5hbWU+TEFZRVJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbm90aGVyIGxheWVyIGluIG9yZGVyIHRvIGRlcGVuZCBvbiBhIHNwZWNpZmljIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyB1c2UgdGhlIHNwZWNpZmljIGxheWVyIG5hbWUgYXMgYSBzdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFJz48Z2xvc3N0ZXJtPkxJQ0VOU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1tJz48dGl0bGU+TTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NSVJST1JTJz48Z2xvc3N0ZXJtPk1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUgdXBzdHJlYW0gc291cmNlLCBhbmQgdGhlbiBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT4gaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NVUxUSV9QUk9WSURFUl9XSElURUxJU1QnPjxnbG9zc3Rlcm0+TVVMVElfUFJPVklERVJfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gc3VwcHJlc3MgQml0QmFrZSB3YXJuaW5ncyBjYXVzZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyB0d28gc2VwYXJhdGUgcmVjaXBlcyB0aGF0IHByb3ZpZGUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRiYWtlIG5vcm1hbGx5IGlzc3VlcyBhIHdhcm5pbmcgd2hlbiBidWlsZGluZyB0d28KKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IHJlY2lwZXMgd2hlcmUgZWFjaCBwcm92aWRlcyB0aGUgc2FtZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2NlbmFyaW8gaXMgdXN1YWxseSBzb21ldGhpbmcgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgd2FudC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgY2FzZXMgZG8gZXhpc3Qgd2hlcmUgaXQgbWFrZXMgc2Vuc2UsIHBhcnRpY3VsYXJseQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPnZpcnR1YWwvKjwvZmlsZW5hbWU+IG5hbWVzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0byBzdXBwcmVzcyBCaXRCYWtlJ3Mgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIGxpc3QgcHJvdmlkZXIgbmFtZXMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWVzLCA8ZmlsZW5hbWU+dmlydHVhbC9rZXJuZWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbic+PHRpdGxlPk48L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CistLT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW8nPjx0aXRsZT5PPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9WRVJSSURFUyc+PGdsb3NzdGVybT5PVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb250cm9sCisgICAgICAgICAgICAgICAgICAgIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgdXNlcyBhbiBvdmVycmlkZXMKKyAgICAgICAgICAgICAgICAgICAgbGlzdCBiYXNlZCBvbiBtYWNoaW5lIGFyY2hpdGVjdHVyZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImFybTp4ODY6bWlwczpwb3dlcnBjIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmRpdGlvbmFsLXN5bnRheC1vdmVycmlkZXMnPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1wJz48dGl0bGU+UDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFUyc+PGdsb3NzdGVybT5QQUNLQUdFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoZSByZWNpcGUgY3JlYXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFU19EWU5BTUlDJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTX0RZTkFNSUM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWN0dWFsbHkgc2F0aXNmeSB0aGUgZGVwZW5kZW5jaWVzLCBpdCBvbmx5IHN0YXRlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIGJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgaGFyZCwgcnVudGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgb2YgYW5vdGhlciBwYWNrYWdlIGlzIHNhdGlzZmllZCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGJ1dCBhIHBhY2thZ2Ugd2l0aCB0aGUgbW9kdWxlIG5hbWUgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQsIHRoZW4gdGhlIG90aGVyIHBhY2thZ2Ugd2lsbCBiZSBicm9rZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEUnPjxnbG9zc3Rlcm0+UEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgdW5zZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgd2F5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFUlNJU1RFTlRfRElSJz48Z2xvc3N0ZXJtPlBFUlNJU1RFTlRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBkYXRhIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIGRhdGEgc3RvcmVkIGlzIHRoZSBkYXRhIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3MgcGVyc2lzdGVudCBkYXRhIEFQSSBhbmQgdGhlIGRhdGEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgUFIgU2VydmVyIGFuZCBQUiBTZXJ2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBGJz48Z2xvc3N0ZXJtPlBGPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIG51bWJlcnMgKGkuZS4gPGZpbGVuYW1lPmVnbGliYy0yLjEzLXIyMCtzdm5yMTU1MDgvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMi1yMS88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE4nPjxnbG9zc3Rlcm0+UE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgcmVjaXBlIG5hbWUuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFInPjxnbG9zc3Rlcm0+UFI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9QUk9WSURFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSB0aGUgc2FtZSBpdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGl0ZW0sIGFuZCB5b3Ugc2hvdWxkIHNldCBpdCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB0byB3aGljaCB5b3Ugd2FudCB0byBnaXZlIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA9ICJ4c2VydmVyLXhmODYiCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSUyc+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlIGZvcgorICAgICAgICAgICAgICAgICAgICBjYXNlcyB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGx5LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSUzwvZmlsZW5hbWU+IGlzIGlkZW50aWNhbCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBsZXRzIHlvdSBkZWZpbmUgcHJlZmVyZW5jZXMgZm9yIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIHNpdHVhdGlvbnMgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUlMgPSAieHh4Onl5eSBhYWE6YmJiIC4uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZvcm0gaXMgYSBjb252ZW5pZW50IHJlcGxhY2VtZW50IGZvciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl94eHggPSAieXl5IgorICAgICBQUkVGRVJSRURfUFJPVklERVJfYWFhID0gImJiYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiByZWNpcGVzIGF2YWlsYWJsZSwgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gc2VsZWN0LCBhbmQgeW91IHNob3VsZCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nbHkgZm9yIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgdG8gbWF0Y2ggYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gc3BlY2lmeWluZyB2ZXJzaW9ucyB0aGF0IGNvbnRhaW4gbG9uZyByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID0gIjIuNy4zIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA9ICIzLjEwJSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRU1JUlJPUlMnPjxnbG9zc3Rlcm0+UFJFTUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIEJpdEJha2UgZ2V0cyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgYnVpbGQgc3lzdGVtIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZSwgaXQgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhhdCBsb2NhdGlvbiBmYWlscywgdGhlIGJ1aWxkIHN5c3RlbSB0cmllcyBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+LCB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgc291cmNlLCBhbmQgdGhlbiBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGF0IG9yZGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3b3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gYXR0ZW1wdCBiZWZvcmUgYW55IG90aGVycyBieSBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0byB5b3VyIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFTUlSUk9SU19wcmVwZW5kID0gIlwKKyAgICAgZ2l0Oi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgZnRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHBzOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNoYW5nZXMgY2F1c2UgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbnRlcmNlcHQKKyAgICAgICAgICAgICAgICAgICAgR2l0LCBGVFAsIEhUVFAsIGFuZCBIVFRQUyByZXF1ZXN0cyBhbmQgZGlyZWN0IHRoZW0gdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gVVJMcyB0byBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byBsb2NhbCBkaXJlY3RvcmllcyBvciBuZXR3b3JrIHNoYXJlcyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBST1ZJREVTJz48Z2xvc3N0ZXJtPlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhbGlhc2VzIGJ5IHdoaWNoIGEgcGFydGljdWxhciByZWNpcGUgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIGtub3duLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBhIHJlY2lwZSdzIG93bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIHVzZXMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4sIHRoZQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGFsaWFzZXMgYXJlIHN5bm9ueW1zIGZvciB0aGUgcmVjaXBlIGFuZCBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgdXNlZnVsIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz5ERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IGZyb20gYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+bGliYXZfMC44LjExLmJiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJPVklERVMgKz0gImxpYnBvc3Rwcm9jIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgcmVzdWx0cyBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgImxpYmF2IiByZWNpcGUgYWxzbyBiZWluZyBrbm93biBhcyAibGlicG9zdHByb2MiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSU0VSVl9IT1NUJz48Z2xvc3N0ZXJtPlBSU0VSVl9IT1NUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuZXR3b3JrIGJhc2VkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRoZSA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICBzZXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJTRVJWX0hPU1QgPSAibG9jYWxob3N0OjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoZSB2YXJpYWJsZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGEgbG9jYWwgUFIgc2VydmljZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdG8gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHRvIHVzZSBhIHJlbW90ZSBQUiBzZXJ2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBWJz48Z2xvc3N0ZXJtPlBWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXEnPjx0aXRsZT5RPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1yJz48dGl0bGU+UjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SREVQRU5EUyc+PGdsb3NzdGVybT5SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBpbiBvcmRlciBmb3IgdGhlIGJ1aWx0IHBhY2thZ2UgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBwYWNrYWdlIGluIHRoaXMgbGlzdCBjYW5ub3QgYmUgZm91bmQgZHVyaW5nIHRoZSBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgeW91IHdpbGwgZ2V0IGEgYnVpbGQgZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFwcGxpZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGFja2FnZXMgYmVpbmcgYnVpbHQsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHdpdGggYW4gYXR0YWNoZWQgcGFja2FnZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGRldmVsb3BtZW50IHBhY2thZ2UgZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnBlcmw8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBuYW1lIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHNwZWNpZnlpbmcgdmVyc2lvbmVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgZGVwZW5kZW5jeSBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUFJPVklERVMnPjxnbG9zc3Rlcm0+UlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIChhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBwYWNrYWdlLWNvbnRyb2xsaW5nIHZhcmlhYmxlcywgeW91IG11c3QgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2YXJpYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJQUk9WSURFU18ke1BOfSA9ICJ3aWRnZXQtYWJpLTIiCisgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPlJSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgbmVlZHMgdGhlbSBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIGV4dGVuZGVkIHVzYWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSBydW50aW1lIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc3VwcG9ydHMgc3BlY2lmeWluZyB2ZXJzaW9uZWQgcmVjb21tZW5kcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRUNPTU1FTkRTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgcmVjb21tZW5kIG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRUNPTU1FTkRTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1zJz48dGl0bGU+UzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRUNUSU9OJz48Z2xvc3N0ZXJtPlNFQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDX1VSSSc+PGdsb3NzdGVybT5TUkNfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0ZWxscyBCaXRCYWtlIHdoaWNoIGJpdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gcHVsbCBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHNpbmdsZSB0YXJiYWxsIGZyb20gdGhlIEludGVybmV0LCB0aGUgcmVjaXBlIG9yCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIHVzZXMgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGVudHJ5IHRoYXQgc3BlY2lmaWVzIHRoYXQgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2ggYSB0YXJiYWxsIGFuZCBpbmNsdWRlIGEgY3VzdG9tIGZpbGUsIHRoZSByZWNpcGUgb3IKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgbmVlZHMgYW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHNwZWNpZmllcyBhbGwgdGhvc2Ugc291cmNlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBsaXN0IGV4cGxhaW5zIHRoZSBhdmFpbGFibGUgVVJJIHByb3RvY29sczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZXRjaGVzIGZpbGVzLCB3aGljaCBhcmUgdXN1YWxseSBmaWxlcyBzaGlwcGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXphYXIgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm9zYzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBPU0MgKE9wZW5TVVNFIEJ1aWxkIHNlcnZpY2UpIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlcG86Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXBvIChHaXQpIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJbnRlcm5ldCB1c2luZyBIVFRQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEludGVybmV0IHVzaW5nIEhUVFBTLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZnRwOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyBGVFAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jdnM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBDVlMgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGc6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBNZXJjdXJpYWwgKDxmaWxlbmFtZT5oZzwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wNDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFBlcmZvcmNlICg8ZmlsZW5hbWU+cDQ8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3NoOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2VjdXJlIHNoZWxsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgU3VidmVyc2lvbiAoPGZpbGVuYW1lPnN2bjwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IENvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gdW5wYWNrIHRoZSBmaWxlIGlmIGl0IGlzIGFuIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHVucGFjayB0aGUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN1YmRpcjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBQbGFjZXMgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZXh0cmFjdHMgaXRzIGNvbnRlbnRzKSBpbnRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciB1bnVzdWFsIHRhcmJhbGxzIG9yIG90aGVyIGFyY2hpdmVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgaGF2ZSB0aGVpciBmaWxlcyBhbHJlYWR5IGluIGEgc3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIHdpdGggPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBzcGVjaWZpZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvd25sb2FkZmlsZW5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lIHVzZWQgd2hlbiBzdG9yaW5nIHRoZSBkb3dubG9hZGVkIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ0RBVEUnPjxnbG9zc3Rlcm0+U1JDREFURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNSRVYnPjxnbG9zc3Rlcm0+U1JDUkVWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBidWlsZCBhIGZpeGVkIHJldmlzaW9uIGFuZCB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBwZXJmb3JtaW5nIGEgcXVlcnkgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IGV2ZXJ5IHRpbWUKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgeW91ciByZWNpcGUsIHlvdSBzaG91bGQgc3BlY2lmeSBhIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiB0aGF0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZnVsbCByZXZpc2lvbiBpZGVudGlmaWVyIGFuZCBub3QganVzdCBhIHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNSRVZfRk9STUFUJz48Z2xvc3N0ZXJtPlNSQ1JFVl9GT1JNQVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVscHMgY29uc3RydWN0IHZhbGlkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHdoZW4gbXVsdGlwbGUgc291cmNlIGNvbnRyb2xsZWQgVVJMcyBhcmUgdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gbmVlZHMgaGVscCBjb25zdHJ1Y3RpbmcgdGhlc2UgdmFsdWVzIHVuZGVyIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMuCisgICAgICAgICAgICAgICAgICAgIEVhY2ggY29tcG9uZW50IGluIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGFzc2lnbmVkIGEgbmFtZSBhbmQgdGhlc2UgYXJlIHJlZmVyZW5jZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNSRVZfRk9STUFUPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgd2l0aCBVUkxzIG5hbWVkICJtYWNoaW5lIiBhbmQgIm1ldGEiLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT5TUkNSRVZfRk9STUFUPC9maWxlbmFtZT4gY291bGQgbG9vaworICAgICAgICAgICAgICAgICAgICBsaWtlICJtYWNoaW5lX21ldGEiIGFuZCB0aG9zZSBuYW1lcyB3b3VsZCBoYXZlIHRoZSBTQ00KKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgc3Vic3RpdHV0ZWQgaW50byBlYWNoIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSA8ZmlsZW5hbWU+QVVUT0lOQzwvZmlsZW5hbWU+IHBsYWNlaG9sZGVyIGlzIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIGFuZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgdGhpcyBwbGFjZWhvbGRlciBpcyBwbGFjZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBzdHJpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBTVAnPjxnbG9zc3Rlcm0+U1RBTVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QQ0xFQU4nPjxnbG9zc3Rlcm0+U1RBTVBDTEVBTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFVubGlrZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QJz48ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIDxmaWxlbmFtZT5TVEFNUENMRUFOPC9maWxlbmFtZT4gY2FuIGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRzIHRvIG1hdGNoIHRoZSByYW5nZSBvZiBmaWxlcyBhIGNsZWFuIG9wZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgcmVtb3ZlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgYSBjbGVhbiBvcGVyYXRpb24gdG8gcmVtb3ZlIGFueSBvdGhlciBzdGFtcHMKKyAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHJlbW92aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgc3RhbXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1VNTUFSWSc+PGdsb3NzdGVybT5TVU1NQVJZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgc2hvcnQgc3VtbWFyeSBmb3IgdGhlIHJlY2lwZSwgd2hpY2ggaXMgNzIgY2hhcmFjdGVycyBvciBsZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNWTkRJUic+PGdsb3NzdGVybT5TVk5ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIFN1YnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXQnPjx0aXRsZT5UPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVQnPjxnbG9zc3Rlcm0+VDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZAorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9QRElSJz48Z2xvc3N0ZXJtPlRPUERJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdSc+PHRpdGxlPlU8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS12Jz48dGl0bGU+VjwvdGl0bGU+CisgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdyc+PHRpdGxlPlc8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS14Jz48dGl0bGU+WDwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXknPjx0aXRsZT5ZPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnkteic+PHRpdGxlPlo8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CistLT4KKworCis8L2dsb3NzYXJ5PgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRhMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZmOTMzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbApAQCAtMCwwICsxLDg4IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGJvb2sgaWQ9J2JpdGJha2UtdXNlci1tYW51YWwnIGxhbmc9J2VuJworICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIEJpdEJha2UgVXNlciBNYW51YWwKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+UmljaGFyZCBQdXJkaWUsIENocmlzIExhcnNvbiwgYW5kIDwvZmlyc3RuYW1lPiA8c3VybmFtZT5QaGlsIEJsdW5kZWxsPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+Qml0QmFrZSBDb21tdW5pdHk8L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+Yml0YmFrZS1kZXZlbEBsaXN0cy5vcGVuZW1iZWRkZWQub3JnPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCis8IS0tCisjIEFkZCBpbiBzb21lIHJldmlzaW9uIGhpc3RvcnkgaWYgd2Ugd2FudCBpdCBoZXJlLgorICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgPC9yZXZoaXN0b3J5PgorLS0+CisKKyAgICAgICAgPGNvcHlyaWdodD4KKyAgICAgICAgICAgIDx5ZWFyPjIwMDQtMjAxNTwveWVhcj4KKyAgICAgICAgICAgIDxob2xkZXI+UmljaGFyZCBQdXJkaWU8L2hvbGRlcj4KKyAgICAgICAgICAgIDxob2xkZXI+Q2hyaXMgTGFyc29uPC9ob2xkZXI+CisgICAgICAgICAgICA8aG9sZGVyPmFuZCBQaGlsIEJsdW5kZWxsPC9ob2xkZXI+CisgICAgICAgIDwvY29weXJpZ2h0PgorCisgICAgICAgIDxsZWdhbG5vdGljZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlLgorICAgICAgICAgICAgICAgIFRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgdmlzaXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8yLjUvIj5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8yLjUvPC91bGluaz4KKyAgICAgICAgICAgICAgICBvciBzZW5kIGEgbGV0dGVyIHRvIENyZWF0aXZlIENvbW1vbnMsIDQ0NCBDYXN0cm8gU3RyZWV0LAorICAgICAgICAgICAgICAgIFN1aXRlIDkwMCwgTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSA5NDA0MSwgVVNBLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xlZ2Fsbm90aWNlPgorICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sIi8+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjI5MDE1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9maWd1cmVzL2JpdGJha2UtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZWRmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzCkBAIC0wLDAgKzEsMjgxIEBACisvKiBGZXVpbGxlIGRlIHN0eWxlIERvY0Jvb2sgZHUgcHJvamV0IFRyYWR1Yy5vcmcgICAgICAgICAgICAgICAgKi8KKy8qIERvY0Jvb2sgQ1NTIHN0eWxlc2hlZXQgb2YgdGhlIFRyYWR1Yy5vcmcgcHJvamVjdCAgICAgICAgICAgICAqLworCisvKiAoYykgSmVhbi1QaGlsaXBwZSBHdelyYXJkIC0gMTQgYW/7dCAyMDA0ICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIChjKSBKZWFuLVBoaWxpcHBlIEd16XJhcmQgLSAxNCBBdWd1c3QgMjAwNCAgICAgICAgICAgICAgICAgICAqLworCisvKiBDZXR0ZSBmZXVpbGxlIGRlIHN0eWxlIGVzdCBsaWJyZSwgdm91cyBwb3V2ZXogbGEgICAgICAgICAgICAgKi8KKy8qIHJlZGlzdHJpYnVlciBldCBsYSBtb2RpZmllciBzZWxvbiBsZXMgdGVybWVzIGRlIGxhIExpY2VuY2UgICAqLworLyogQXJ0IExpYnJlLiBWb3VzIHRyb3V2ZXJleiB1biBleGVtcGxhaXJlIGRlIGNldHRlIExpY2VuY2Ugc3VyICovCisvKiBodHRwOi8vdGlncmVyYXllLm9yZy9QZXRpdC1ndWlkZS1kdS10cmFkdWN0ZXVyLmh0bWwjbGljZW5jZS1hcnQtbGlicmUgKi8KKworLyogVGhpcyB3b3JrIG9mIGFydCBpcyBmcmVlLCB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICovCisvKiBtb2RpZnkgaXQgYWNjb3JkaW5nIHRvIHRlcm1zIG9mIHRoZSBGcmVlIEFydCBsaWNlbnNlLiBZb3UgICAgKi8KKy8qIHdpbGwgZmluZCBhIHNwZWNpbWVuIG9mIHRoaXMgbGljZW5zZSBvbiB0aGUgQ29weWxlZnQgICAgICAgICAqLworLyogQXR0aXR1ZGUgd2ViIHNpdGU6IGh0dHA6Ly9hcnRsaWJyZS5vcmcgYXMgd2VsbCBhcyBvbiBvdGhlciAgICovCisvKiBzaXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFBsZWFzZSBub3RlIHRoYXQgdGhlIEZyZW5jaCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5jZSBhcyBzaG93biAqLworLyogb24gaHR0cDovL3RpZ3JlcmF5ZS5vcmcvUGV0aXQtZ3VpZGUtZHUtdHJhZHVjdGV1ci5odG1sI2xpY2VuY2UtYXJ0LWxpYnJlICovCisvKiBpcyBvbmx5IG9mZmljaWFsIGxpY2VuY2Ugb2YgdGhpcyBkb2N1bWVudC4gVGhlIEVuZ2xpc2ggICAgICAgKi8KKy8qIGlzIG9ubHkgcHJvdmlkZWQgdG8gaGVscCB5b3UgdW5kZXJzdGFuZCB0aGlzIGxpY2VuY2UuICAgICAgICAqLworCisvKiBMYSBkZXJuaehyZSB2ZXJzaW9uIGRlIGNldHRlIGZldWlsbGUgZGUgc3R5bGUgZXN0IHRvdWpvdXJzICAgKi8KKy8qIGRpc3BvbmlibGUgc3VyoDogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvc3R5bGUuY3NzICAgICAgICAgICAgICAqLworLyogRWxsZSBlc3Qg6WdhbGVtZW50IGRpc3BvbmlibGUgc3VyoDogICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBodHRwOi8vd3d3LnRyYWR1Yy5vcmcvZG9jcy9IT1dUTy9sZWN0dXJlL3N0eWxlLmNzcyAgICAgICAgICAgKi8KKworLyogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc3R5bGVzaGVldCBpcyBhdmFpbGFibGUgZnJvbTogICAgICovCisvKiBodHRwOi8vdGlncmVyYXllLm9yZy9zdHlsZS5jc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEl0IGlzIGFsc28gYXZhaWxhYmxlIG9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogaHR0cDovL3d3dy50cmFkdWMub3JnL2RvY3MvSE9XVE8vbGVjdHVyZS9zdHlsZS5jc3MgICAgICAgICAgICovCisKKy8qIE4naOlzaXRleiBwYXMg4CBlbnZveWVyIHZvcyBjb21tZW50YWlyZXMgZXQgY29ycmVjdGlvbnMg4CAgICAqLworLyogSmVhbi1QaGlsaXBwZSBHdelyYXJkIDxqZWFuLXBoaWxpcHBlLmd1ZXJhcmRAdGlncmVyYXllLm9yZz4gICovCisKKy8qIFBsZWFzZSBzZW5kIGZlZWRiYWNrIGFuZCBidWcgcmVwb3J0cyB0byAgICAgICAgICAgICAgICAgICAgICAqLworLyogSmVhbi1QaGlsaXBwZSBHdelyYXJkIDxqZWFuLXBoaWxpcHBlLmd1ZXJhcmRAdGlncmVyYXllLm9yZz4gICovCisKKy8qICRJZDogc3R5bGUuY3NzLHYgMS4xNCAyMDA0LzA5LzEwIDIwOjEyOjA5IGZldnJpZXIgRXhwIGZldnJpZXIgJCAqLworCisvKiBQculzZW50YXRpb24gZ+lu6XJhbGUgZHUgZG9jdW1lbnQgKi8KKy8qIE92ZXJhbGwgZG9jdW1lbnQgcHJlc2VudGF0aW9uICovCisKK2JvZHkgeworICAgIC8qCisgICAgZm9udC1mYW1pbHk6IEFwb2xsaW5lLCAiVVJXIFBhbGxhZGlvIEwiLCBHYXJhbW9uZCwgakdhcmFtb25kLAorICAgICAgICAgICAgICAgICAiQml0c3RyZWFtIEN5YmVyYml0IiwgIlBhbGF0aW5vIExpbm90eXBlIiwgc2VyaWY7CisgICAgICovCisgICAgbWFyZ2luOiA3JTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworLyogVGFpbGxlIGR1IHRleHRlICovCisvKiBUZXh0IHNpemUgKi8KKworKiB7IGZvbnQtc2l6ZTogMTAwJTsgfQorCisvKiBHZXN0aW9uIGRlcyB0ZXh0ZXMgbWlzIGVuIHJlbGllZiBpbWJyaXF16XMgKi8KKy8qIEVtYmVkZGVkIGVtcGhhc2lzICovCisKK2VtIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CitlbSBlbSB7IGZvbnQtc3R5bGU6IG5vcm1hbDsgfQorZW0gZW0gZW0geyBmb250LXN0eWxlOiBpdGFsaWM7IH0KKworLyogVGl0cmVzICovCisvKiBUaXRsZXMgKi8KKworaDEgeyBmb250LXNpemU6IDIwMCU7IGZvbnQtd2VpZ2h0OiA5MDA7IH0KK2gyIHsgZm9udC1zaXplOiAxNjAlOyBmb250LXdlaWdodDogOTAwOyB9CitoMyB7IGZvbnQtc2l6ZTogMTMwJTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2g0IHsgZm9udC1zaXplOiAxMTUlOyBmb250LXdlaWdodDogYm9sZDsgfQoraDUgeyBmb250LXNpemU6IDEwOCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CitoNiB7ICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKworLyogTm9tIGRlIGZhbWlsbGUgZW4gcGV0aXRlcyBtYWp1c2N1bGVzICh1bmlxdWVtZW50IGVuIGZyYW7nYWlzKSAqLworLyogTGFzdCBuYW1lcyBpbiBzbWFsbCBjYXBzIChmb3IgRnJlbmNoIG9ubHkpICovCisKKypbY2xhc3N+PSJzdXJuYW1lIl06bGFuZyhmcikgeyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7IH0KKworLyogQmxvY3MgZGUgY2l0YXRpb24gKi8KKy8qIFF1b3RhdGlvbiBibG9jcyAqLworCitkaXZbY2xhc3N+PSJibG9ja3F1b3RlIl0geworICBib3JkZXI6IHNvbGlkIDJweCAjQUFBOworICBwYWRkaW5nOiA1cHg7CisgIG1hcmdpbjogNXB4OworfQorCitkaXZbY2xhc3N+PSJibG9ja3F1b3RlIl0gPiB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworLyogQmxvY3MgbGl06XJhdXigOiBmb25kIGdyaXMgY2xhaXIgKi8KKy8qIExpdGVyYWwgYmxvY3M6IGxpZ2h0IGdyYXkgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0ibGl0ZXJhbGxheW91dCJdIHsKKyAgYmFja2dyb3VuZDogI2YwZjBmMDsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsKK30KKworLyogUHJvZ3JhbW1lcyBldCBjYXB0dXJlcyB0ZXh0ZaA6IGZvbmQgYmxldSBjbGFpciAqLworLyogTGlzdGluZyBhbmQgdGV4dCBzY3JlZW4gc25hcHNob3RzOiBsaWdodCBibHVlIGJhY2tncm91bmQgKi8KKworKltjbGFzc349InByb2dyYW1saXN0aW5nIl0sICpbY2xhc3N+PSJzY3JlZW4iXSB7CisgIGJhY2tncm91bmQ6ICNmMGYwZmY7CisgIHBhZGRpbmc6IDVweDsKKyAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIExlcyB0ZXh0ZXMg4CByZW1wbGFjZXIgc29udCBzdXJsaWdu6XMgZW4gdmVydCBw4mxlICovCisvKiBSZXBsYWNlYWJsZSB0ZXh0IGluIGhpZ2hsaWdodGVkIGluIHBhbGUgZ3JlZW4gKi8KKworKltjbGFzc349InJlcGxhY2VhYmxlIl0geyAKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOThmYjk4OworICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsgfQorCisvKiBUYWJsZXOgOiBmb25kcyBncmlzIGNsYWlyICYgYm9yZHMgc2ltcGxlcyAqLworLyogVGFibGVzOiBsaWdodCBncmF5IGJhY2tncm91bmQgYW5kIHNvbGlkIGJvcmRlcnMgKi8KKworKltjbGFzc349InRhYmxlIl0gKltjbGFzc349InRpdGxlIl0geyB3aWR0aDoxMDAlOyBib3JkZXI6IDBweDsgfQorCit0YWJsZSB7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKKyAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICAgIHBhZGRpbmc6IDJweDsKKyAgICBtYXJnaW46IDVweDsKK30KKworLyogTGlzdGVzIHNpbXBsZXMgZW4gc3R5bGUgdGFibGUgKi8KKy8qIFNpbXBsZXMgbGlzdHMgaW4gdGFibGUgcHJlc2VudGF0aW9uICovCisKK3RhYmxlW2NsYXNzfj0ic2ltcGxlbGlzdCJdIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOworICAgIG1hcmdpbjogNXB4OworICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Cit9CisKK3RhYmxlW2NsYXNzfj0ic2ltcGxlbGlzdCJdIHRkIHsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOworfQorCisvKiBMZXMgdGFibGVzICovCisvKiBUYWJsZXMgKi8KKworKltjbGFzc349InRhYmxlIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEYwRjA7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKK30KKypbY2xhc3N+PSJpbmZvcm1hbHRhYmxlIl0gdGFibGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOyB9CisKK3RoLHRkIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICBwYWRkaW5nOiAwLjFlbSAwLjNlbTsKKyAgICBlbXB0eS1jZWxsczogc2hvdzsgCit9CisKKy8qIEFsaWduZW1lbnQgZGVzIGNvbG9ubmVzICovCisvKiBDb2x1bm1zIGFsaWdubWVudCAqLworCit0ZFthbGlnbj1jZW50ZXJdICwgIHRoW2FsaWduPWNlbnRlcl0gIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9Cit0ZFthbGlnbj1yaWdodF0gLCAgIHRoW2FsaWduPXJpZ2h0XSAgIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KK3RkW2FsaWduPWxlZnRdICwgICAgdGhbYWxpZ249bGVmdF0gICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9Cit0ZFthbGlnbj1qdXN0aWZ5XSAsIHRoW2FsaWduPWp1c3RpZnldIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfQorCisvKiBQYXMgZGUgbWFyZ2UgYXV0b3VyIGRlcyBpbWFnZXMgKi8KKy8qIE5vIGluc2lkZSBtYXJnaW5zIGZvciBpbWFnZXMgKi8KKworaW1nIHsgYm9yZGVyOiAwOyB9CisKKy8qIExlcyBsaWVucyBuZSBzb250IHBhcyBzb3VsaWdu6XMgKi8KKy8qIE5vIHVuZGVybGluZXMgZm9yIGxpbmtzICovCisKKzpsaW5rICwgOnZpc2l0ZWQgLCA6YWN0aXZlIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisKKy8qIFBydWRlbmNloDogY2FkcmUgamF1bmUgZXQgZm9uZCBqYXVuZSBjbGFpciAqLworLyogQ2F1dGlvbjogeWVsbG93IGJvcmRlciBhbmQgbGlnaHQgeWVsbG93IGJhY2tncm91bmQgKi8KKworKltjbGFzc349ImNhdXRpb24iXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggeWVsbG93OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CisgICAgcGFkZGluZzogMWVtIDZweCAxZW0gOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0iY2F1dGlvbiJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCit9CisKKypbY2xhc3N+PSJjYXV0aW9uIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBOb3RlIGltcG9ydGFudGWgOiBjYWRyZSBqYXVuZSBldCBmb25kIGphdW5lIGNsYWlyICovCisvKiBJbXBvcnRhbnQ6IHllbGxvdyBib3JkZXIgYW5kIGxpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJpbXBvcnRhbnQiXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggeWVsbG93OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CisgICAgcGFkZGluZzogMWVtIDZweCAxZW07CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJpbXBvcnRhbnQiXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0iaW1wb3J0YW50Il0gdGFibGUgIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogTWlzZSBlbiDpdmlkZW5jZaA6IHRleHRlIGzpZ+hyZW1lbnQgcGx1cyBncmFuZCAqLworLyogSGlnaGxpZ2h0czogc2xpZ2h0bHkgbGFyZ2VyIHRleHRzICovCisKKypbY2xhc3N+PSJoaWdobGlnaHRzIl0geworICAgIGZvbnQtc2l6ZTogIDExMCU7Cit9CisKKy8qIE5vdGWgOiBjYWRyZSBibGV1IGV0IGZvbmQgYmxldSBjbGFpciAqLworLyogTm90ZXM6IGJsdWUgYm9yZGVyIGFuZCBsaWdodCBibHVlIGJhY2tncm91bmQgKi8KKworKltjbGFzc349Im5vdGUiXSAgIHsKKyAgICBib3JkZXI6IHNvbGlkIDJweCAjNzA5OUM1OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZmY7CisgICAgcGFkZGluZzogMWVtIDZweCAxZW0gOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0ibm90ZSJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCit9CisKKypbY2xhc3N+PSJub3RlIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZmY7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBBc3R1Y2WgOiBjYWRyZSB2ZXJ0IGV0IGZvbmQgdmVydCBjbGFpciAqLworLyogVGlwOiBncmVlbiBib3JkZXIgYW5kIGxpZ2h0IGdyZWVuIGJhY2tncm91bmQgKi8KKworKltjbGFzc349InRpcCJdIHsKKyAgICBib3JkZXI6IHNvbGlkIDJweCAjMDBmZjAwOworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZmZmY7CisgICAgcGFkZGluZzogMWVtIDZweCAxZW0gOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0idGlwIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKypbY2xhc3N+PSJ0aXAiXSB0YWJsZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZmZmZjsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEF2ZXJ0aXNzZW1lbnSgOiBjYWRyZSByb3VnZSBldCBmb25kIHJvdWdlIGNsYWlyICovCisvKiBXYXJuaW5nOiByZWQgYm9yZGVyIGFuZCBsaWdodCByZWQgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0id2FybmluZyJdIHsKKyAgICBib3JkZXI6IHNvbGlkIDJweCAjZmYwMDAwOworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYwZjA7IAorICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349Indhcm5pbmciXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKyAgICAgICAgICAgICAgICAgICAgCisKKypbY2xhc3N+PSJ3YXJuaW5nIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYwZjA7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBGaW4gKi8KKy8qIFRoZSBFbmQgKi8KKwo=