ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiAxLjUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxseSB0YXJyZWF1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE2LzEyLzI1CgoKMSkgSG93IHRvIGJ1aWxkIGl0Ci0tLS0tLS0tLS0tLS0tLS0tLQoKRmlyc3QsIHBsZWFzZSBub3RlIHRoYXQgdGhpcyB2ZXJzaW9uIGlzIGEgc3RhYmxlIHZlcnNpb24sIHNvIGluIGdlbmVyYWwgaWYgeW91CmFyZSBub3QgdXNlZCB0byBidWlsZCBmcm9tIHNvdXJjZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaW5zdGVhZCB5b3UgZm9sbG93CnRoZSBwYWNrYWdlZCB1cGRhdGVzIHByb3ZpZGVkIGJ5IHlvdXIgc29mdHdhcmUgdmVuZG9yIG9yIExpbnV4IGRpc3RyaWJ1dGlvbi4KTW9zdCBvZiB0aGVtIGFyZSB0YWtpbmcgdGhpcyB0YXNrIHNlcmlvdXNseSBhbmQgYXJlIGRvaW5nIGEgZ29vZCBqb2IuIElmIGZvcgphbnkgcmVhc29uIHlvdSdkIHByZWZlciBhIGRpZmZlcmVudCB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBwYWNrYWdlZCBmb3IgeW91cgpzeXN0ZW0sIG9yIHRvIGdldCBzb21lIGNvbW1lcmNpYWwgc3VwcG9ydCwgb3RoZXIgY2hvaWNlcyBhcmUgYXZhaWxhYmxlIGF0IDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaGFwcm94eS5jb20vCgpUbyBidWlsZCBoYXByb3h5LCB5b3Ugd2lsbCBuZWVkIDoKICAtIEdOVSBtYWtlLiBOZWl0aGVyIFNvbGFyaXMgbm9yIE9wZW5CU0QncyBtYWtlIHdvcmsgd2l0aCB0aGUgR05VIE1ha2VmaWxlLgogICAgSWYgeW91IGdldCBtYW55IHN5bnRheCBlcnJvcnMgd2hlbiBydW5uaW5nICJtYWtlIiwgeW91IG1heSB3YW50IHRvIHJldHJ5CiAgICB3aXRoICJnbWFrZSIgd2hpY2ggaXMgdGhlIG5hbWUgY29tbW9ubHkgdXNlZCBmb3IgR05VIG1ha2Ugb24gQlNEIHN5c3RlbXMuCiAgLSBHQ0MgYmV0d2VlbiAyLjk1IGFuZCA0LjguIE90aGVycyBtYXkgd29yaywgYnV0IG5vdCB0ZXN0ZWQuCiAgLSBHTlUgbGQKCkFsc28sIHlvdSBtaWdodCB3YW50IHRvIGJ1aWxkIHdpdGggbGlicGNyZSBzdXBwb3J0LCB3aGljaCB3aWxsIHByb3ZpZGUgYSB2ZXJ5CmVmZmljaWVudCByZWdleCBpbXBsZW1lbnRhdGlvbiBhbmQgd2lsbCBhbHNvIGZpeCBzb21lIGJhZG5lc3Mgb24gU29sYXJpcycgb25lLgoKVG8gYnVpbGQgaGFwcm94eSwgeW91IGhhdmUgdG8gY2hvb3NlIHlvdXIgdGFyZ2V0IE9TIGFtb25nc3QgdGhlIGZvbGxvd2luZyBvbmVzCmFuZCBhc3NpZ24gaXQgdG8gdGhlIFRBUkdFVCB2YXJpYWJsZSA6CgogIC0gbGludXgyMiAgICAgZm9yIExpbnV4IDIuMgogIC0gbGludXgyNCAgICAgZm9yIExpbnV4IDIuNCBhbmQgYWJvdmUgKGRlZmF1bHQpCiAgLSBsaW51eDI0ZSAgICBmb3IgTGludXggMi40IHdpdGggc3VwcG9ydCBmb3IgYSB3b3JraW5nIGVwb2xsICg+IDAuMjEpCiAgLSBsaW51eDI2ICAgICBmb3IgTGludXggMi42IGFuZCBhYm92ZQogIC0gbGludXgyNjI4ICAgZm9yIExpbnV4IDIuNi4yOCwgMy54LCBhbmQgYWJvdmUgKGVuYWJsZXMgc3BsaWNlIGFuZCB0cHJveHkpCiAgLSBzb2xhcmlzICAgICBmb3IgU29sYXJpcyA4IG9yIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBmcmVlYnNkICAgICBmb3IgRnJlZUJTRCA1IHRvIDEwIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBvc3ggICAgICAgICBmb3IgTWFjIE9TL1gKICAtIG9wZW5ic2QgICAgIGZvciBPcGVuQlNEIDMuMSBhbmQgYWJvdmUKICAtIGFpeDUxICAgICAgIGZvciBBSVggNS4xCiAgLSBhaXg1MiAgICAgICBmb3IgQUlYIDUuMgogIC0gY3lnd2luICAgICAgZm9yIEN5Z3dpbgogIC0gZ2VuZXJpYyAgICAgZm9yIGFueSBvdGhlciBPUyBvciB2ZXJzaW9uLgogIC0gY3VzdG9tICAgICAgdG8gbWFudWFsbHkgYWRqdXN0IGV2ZXJ5IHNldHRpbmcKCllvdSBtYXkgYWxzbyBjaG9vc2UgeW91ciBDUFUgdG8gYmVuZWZpdCBmcm9tIHNvbWUgb3B0aW1pemF0aW9ucy4gVGhpcyBpcwpwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIFVsdHJhU3BhcmMgbWFjaGluZXMuIEZvciB0aGlzLCB5b3UgY2FuIGFzc2lnbgpvbmUgb2YgdGhlIGZvbGxvd2luZyBjaG9pY2VzIHRvIHRoZSBDUFUgdmFyaWFibGUgOgoKICAtIGk2ODYgZm9yIGludGVsIFBlbnRpdW1Qcm8sIFBlbnRpdW0gMiBhbmQgYWJvdmUsIEFNRCBBdGhsb24KICAtIGk1ODYgZm9yIGludGVsIFBlbnRpdW0sIEFNRCBLNiwgVklBIEMzLgogIC0gdWx0cmFzcGFyYyA6IFN1biBVbHRyYVNwYXJjIEkvSUkvSUlJL0lWIHByb2Nlc3NvcgogIC0gbmF0aXZlIDogdXNlIHRoZSBidWlsZCBtYWNoaW5lJ3Mgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMuIFVzZSB3aXRoCiAgICBleHRyZW1lIGNhcmUsIGFuZCBuZXZlciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGtub3duIHRvIGJyZWFrKS4KICAtIGdlbmVyaWMgOiBhbnkgb3RoZXIgcHJvY2Vzc29yIG9yIG5vIENQVS1zcGVjaWZpYyBvcHRpbWl6YXRpb24uIChkZWZhdWx0KQoKQWx0ZXJuYXRpdmVseSwgeW91IG1heSBqdXN0IHNldCB0aGUgQ1BVX0NGTEFHUyB2YWx1ZSB0byB0aGUgb3B0aW1hbCBHQ0Mgb3B0aW9ucwpmb3IgeW91ciBwbGF0Zm9ybS4KCllvdSBtYXkgd2FudCB0byBidWlsZCBzcGVjaWZpYyB0YXJnZXQgYmluYXJpZXMgd2hpY2ggZG8gbm90IG1hdGNoIHlvdXIgbmF0aXZlCmNvbXBpbGVyJ3MgdGFyZ2V0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIG9uIDY0LWJpdCBzeXN0ZW1zIHdoZW4geW91IHdhbnQKdG8gYnVpbGQgYSAzMi1iaXQgYmluYXJ5LiBVc2UgdGhlIEFSQ0ggdmFyaWFibGUgZm9yIHRoaXMgcHVycG9zZS4gUmlnaHQgbm93Cml0IG9ubHkga25vd3MgYWJvdXQgYSBmZXcgeDg2IHZhcmlhbnRzIChpMzg2LGk0ODYsaTU4NixpNjg2LHg4Nl82NCksIHR3bwpnZW5lcmljIG9uZXMgKDMyLDY0KSBhbmQgc2V0cyAtbTMyLy1tNjQgYXMgd2VsbCBhcyAtbWFyY2g9PGFyY2g+IGFjY29yZGluZ2x5LgoKSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgUENSRSAoUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMpLCB0aGVuIHlvdQpyZWFsbHkgc2hvdWxkIGJ1aWxkIHdpdGggbGlicGNyZSB3aGljaCBpcyBiZXR3ZWVuIDIgYW5kIDEwIHRpbWVzIGZhc3RlciB0aGFuCm90aGVyIGxpYmMgaW1wbGVtZW50YXRpb25zLiBSZWdleCBhcmUgdXNlZCBmb3IgaGVhZGVyIHByb2Nlc3NpbmcgKGRlbGV0aW9uLApyZXdyaXRpbmcsIGFsbG93LCBkZW55KS4gVGhlIG9ubHkgaW5jb252ZW5pZW50IG9mIGxpYnBjcmUgaXMgdGhhdCBpdCBpcyBub3QKeWV0IHdpZGVseSBzcHJlYWQsIHNvIGlmIHlvdSBidWlsZCBmb3Igb3RoZXIgc3lzdGVtcywgeW91IG1pZ2h0IGdldCBpbnRvCnRyb3VibGUgaWYgdGhleSBkb24ndCBoYXZlIHRoZSBkeW5hbWljIGxpYnJhcnkuIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugc2hvdWxkCnN0YXRpY2FsbHkgbGluayBsaWJwY3JlIGludG8gaGFwcm94eSBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIG5lY2Vzc2FyeSB0bwppbnN0YWxsIGl0IG9uIHRhcmdldCBzeXN0ZW1zLiBBdmFpbGFibGUgYnVpbGQgb3B0aW9ucyBmb3IgUENSRSBhcmUgOgoKICAtIFVTRV9QQ1JFPTEgdG8gdXNlIGxpYnBjcmUsIGluIHdoYXRldmVyIGZvcm0gaXMgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtCiAgICAoc2hhcmVkIG9yIHN0YXRpYykKCiAgLSBVU0VfU1RBVElDX1BDUkU9MSB0byB1c2UgYSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJwY3JlIGV2ZW4gaWYgdGhlIGR5bmFtaWMKICAgIG9uZSBpcyBhdmFpbGFibGUuIFRoaXMgd2lsbCBlbmhhbmNlIHBvcnRhYmlsaXR5LgoKICAtIHdpdGggbm8gb3B0aW9uLCB1c2UgeW91ciBPUyBsaWJjJ3Mgc3RhbmRhcmQgcmVnZXggaW1wbGVtZW50YXRpb24gKGRlZmF1bHQpLgogICAgV2FybmluZyEgZ3JvdXAgcmVmZXJlbmNlcyBvbiBTb2xhcmlzIHNlZW0gYnJva2VuLiBVc2Ugc3RhdGljLXBjcmUgd2hlbmV2ZXIKICAgIHBvc3NpYmxlLgoKUmVjZW50IHN5c3RlbXMgY2FuIHJlc29sdmUgSVB2NiBob3N0IG5hbWVzIHVzaW5nIGdldGFkZHJpbmZvKCkuIFRoaXMgcHJpbWl0aXZlCmlzIG5vdCBwcmVzZW50IGluIGFsbCBsaWJjcyBhbmQgZG9lcyBub3Qgd29yayBpbiBhbGwgb2YgdGhlbSBlaXRoZXIuIFN1cHBvcnQgaW4KZ2xpYmMgd2FzIGJyb2tlbiBiZWZvcmUgMi4zLiBTb21lIGVtYmVkZGVkIGxpYnMgbWF5IG5vdCBwcm9wZXJseSB3b3JrIGVpdGhlciwKdGh1cywgc3VwcG9ydCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBtZWFuaW5nIHRoYXQgc29tZSBob3N0IG5hbWVzIHdoaWNoIG9ubHkKcmVzb2x2ZSBhcyBJUHY2IGFkZHJlc3NlcyB3aWxsIG5vdCByZXNvbHZlIGFuZCBjb25maWdzIG1pZ2h0IGVtaXQgYW4gZXJyb3IKZHVyaW5nIHBhcnNpbmcuIElmIHlvdSBrbm93IHRoYXQgeW91ciBPUyBsaWJjIGhhcyByZWxpYWJsZSBzdXBwb3J0IGZvcgpnZXRhZGRyaW5mbygpLCB5b3UgY2FuIGFkZCBVU0VfR0VUQUREUklORk89MSBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlCml0LiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBvcHRpb24gZm9yIG1vc3QgTGludXggZGlzdHJvIHBhY2thZ2VycyBzaW5jZSBpdCdzCndvcmtpbmcgZmluZSBvbiBhbGwgcmVjZW50IG1haW5zdHJlYW0gZGlzdHJvcy4gSXQgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIG9uClNvbGFyaXMgOCBhbmQgYWJvdmUsIGFzIGl0J3Mga25vd24gdG8gd29yay4KCkl0IGlzIHBvc3NpYmxlIHRvIGFkZCBuYXRpdmUgc3VwcG9ydCBmb3IgU1NMIHVzaW5nIHRoZSBHTlUgbWFrZWZpbGUsIGJ5IHBhc3NpbmcKIlVTRV9PUEVOU1NMPTEiIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4gVGhlIGxpYnNzbCBhbmQgbGliY3J5cHRvIHdpbGwKYXV0b21hdGljYWxseSBiZSBsaW5rZWQgd2l0aCBoYXByb3h5LiBTb21lIHN5c3RlbXMgYWxzbyByZXF1aXJlIGxpYnosIHNvIGlmIHRoZQpidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZyBzeW1ib2xzIHN1Y2ggYXMgZGVmbGF0ZUluaXQoKSwgdGhlbiB0cnkgYWdhaW4gd2l0aAoiQURETElCPS1seiIuCgpUbyBsaW5rIE9wZW5TU0wgc3RhdGljYWxseSBhZ2FpbnN0IGhhcHJveHksIGJ1aWxkIE9wZW5TU0wgd2l0aCB0aGUgbm8tc2hhcmVkCmtleXdvcmQgYW5kIGluc3RhbGwgaXQgdG8gYSBsb2NhbCBkaXJlY3RvcnksIHNvIHlvdXIgc3lzdGVtIGlzIG5vdCBhZmZlY3RlZCA6CgogICAgJCBleHBvcnQgU1RBVElDTElCU1NMPS90bXAvc3RhdGljbGlic3NsCiAgICAkIC4vY29uZmlnIC0tcHJlZml4PSRTVEFUSUNMSUJTU0wgbm8tc2hhcmVkCiAgICAkIG1ha2UgJiYgbWFrZSBpbnN0YWxsX3N3CgpXaGVuIGJ1aWxkaW5nIGhhcHJveHksIHBhc3MgdGhhdCBwYXRoIHZpYSBTU0xfSU5DIGFuZCBTU0xfTElCIHRvIG1ha2UgYW5kCmluY2x1ZGUgYWRkaXRpb25hbCBsaWJzIHdpdGggQURETElCIGlmIG5lZWRlZCAoaW4gdGhpcyBjYXNlIGZvciBleGFtcGxlIGxpYmRsKToKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX09QRU5TU0w9MSBTU0xfSU5DPSRTVEFUSUNMSUJTU0wvaW5jbHVkZSBTU0xfTElCPSRTVEFUSUNMSUJTU0wvbGliIEFERExJQj0tbGRsCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGluY2x1ZGUgbmF0aXZlIHN1cHBvcnQgZm9yIFpMSUIgdG8gYmVuZWZpdCBmcm9tIEhUVFAKY29tcHJlc3Npb24uIEZvciB0aGlzLCBwYXNzICJVU0VfWkxJQj0xIiBvbiB0aGUgIm1ha2UiIGNvbW1hbmQgbGluZSBhbmQgZW5zdXJlCnRoYXQgemxpYiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uCgpCeSBkZWZhdWx0LCB0aGUgREVCVUcgdmFyaWFibGUgaXMgc2V0IHRvICctZycgdG8gZW5hYmxlIGRlYnVnIHN5bWJvbHMuIEl0IGlzCm5vdCB3aXNlIHRvIGRpc2FibGUgaXQgb24gdW5jb21tb24gc3lzdGVtcywgYmVjYXVzZSBpdCdzIG9mdGVuIHRoZSBvbmx5IHdheSB0bwpnZXQgYSBjb21wbGV0ZSBjb3JlIHdoZW4geW91IG5lZWQgb25lLiBPdGhlcndpc2UsIHlvdSBjYW4gc2V0IERFQlVHIHRvICctcycgdG8Kc3RyaXAgdGhlIGJpbmFyeS4KCkZvciBleGFtcGxlLCBJIHVzZSB0aGlzIHRvIGJ1aWxkIGZvciBTb2xhcmlzIDggOgoKICAgICQgbWFrZSBUQVJHRVQ9c29sYXJpcyBDUFU9dWx0cmFzcGFyYyBVU0VfU1RBVElDX1BDUkU9MQoKQW5kIEkgYnVpbGQgaXQgdGhpcyB3YXkgb24gT3BlbkJTRCBvciBGcmVlQlNEIDoKCiAgICAkIGdtYWtlIFRBUkdFVD1mcmVlYnNkIFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpBbmQgb24gYSBjbGFzc2ljIExpbnV4IHdpdGggU1NMIGFuZCBaTElCIHN1cHBvcnQgKGVnOiBSZWQgSGF0IDUueCkgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKQW5kIG9uIGEgcmVjZW50IExpbnV4ID49IDIuNi4yOCB3aXRoIFNTTCBhbmQgWkxJQiBzdXBwb3J0IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYyOCBVU0VfUENSRT0xIFVTRV9PUEVOU1NMPTEgVVNFX1pMSUI9MQoKSW4gb3JkZXIgdG8gYnVpbGQgYSAzMi1iaXQgYmluYXJ5IG9uIGFuIHg4Nl82NCBMaW51eCBzeXN0ZW0gd2l0aCBTU0wgc3VwcG9ydAp3aXRob3V0IHN1cHBvcnQgZm9yIGNvbXByZXNzaW9uIGJ1dCB3aGVuIE9wZW5TU0wgcmVxdWlyZXMgWkxJQiBhbnl3YXkgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBBUkNIPWkzODYgVVNFX09QRU5TU0w9MSBBRERMSUI9LWx6CgpUaGUgU1NMIHN0YWNrIHN1cHBvcnRzIHNlc3Npb24gY2FjaGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gYWxsIHJ1bm5pbmcKcHJvY2Vzc2VzLiBUaGlzIGludm9sdmVzIHNvbWUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zCndoaWNoIGNvbWUgaW4gbXVsdGlwbGUgZmxhdm9ycyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgYXJjaGl0ZWN0dXJlIDoKCiAgQXRvbWljIG9wZXJhdGlvbnMgOgogICAgLSBpbnRlcm5hbCBhc3NlbWJsZXIgdmVyc2lvbnMgZm9yIHg4Ni94ODZfNjQgYXJjaGl0ZWN0dXJlcwoKICAgIC0gZ2NjIGJ1aWx0aW5zIGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLiBTb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90CiAgICAgIGJlIGZ1bGx5IHN1cHBvcnRlZCBvciBtaWdodCByZXF1aXJlIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBnY2MuCiAgICAgIElmIHlvdXIgYXJjaGl0ZWN0dXJlIGlzIG5vdCBzdXBwb3J0ZWQsIHlvdSB3aWxseSBoYXZlIHRvIGVpdGhlciB1c2UKICAgICAgcHRocmVhZCBpZiBzdXBwb3J0ZWQsIG9yIHRvIGRpc2FibGUgdGhlIHNoYXJlZCBjYWNoZS4KCiAgICAtIHB0aHJlYWQgKHBvc2l4IHRocmVhZHMpLiBQdGhyZWFkcyBhcmUgdmVyeSBjb21tb24gYnV0IGludGVyLXByb2Nlc3MKICAgICAgc3VwcG9ydCBpcyBub3QgdGhhdCBjb21tb24sIGFuZCBzb21lIG9sZGVyIG9wZXJhdGluZyBzeXN0ZW1zIGRpZCBub3QKICAgICAgcmVwb3J0IGFuIGVycm9yIHdoZW4gZW5hYmxpbmcgbXVsdGktcHJvY2VzcyBtb2RlLCBzbyB0aGV5IHVzZWQgdG8KICAgICAgc2lsZW50bHkgZmFpbCwgcG9zc2libHkgY2F1c2luZyBjcmFzaGVzLiBMaW51eCdzIGltcGxlbWVudGF0aW9uIGlzCiAgICAgIGZpbmUuIE9wZW5CU0QgZG9lc24ndCBzdXBwb3J0IHRoZW0gYW5kIGRvZXNuJ3QgYnVpbGQuIEZyZWVCU0QgOSBidWlsZHMKICAgICAgYW5kIHJlcG9ydHMgYW4gZXJyb3IgYXQgcnVudGltZSwgd2hpbGUgY2VydGFpbiBvbGRlciB2ZXJzaW9ucyBtaWdodAogICAgICBzaWxlbnRseSBmYWlsLiBQdGhyZWFkcyBhcmUgZW5hYmxlZCB1c2luZyBVU0VfUFRIUkVBRF9QU0hBUkVEPTEuCgogIFN5bmNocm9uaXphdGlvbiBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgc3BpbmxvY2sgOiB0aGlzIG1vZGUgaXMgT1MtaW5kZXBlbmRhbnQsIGxpZ2h0IGJ1dCB3aWxsIG5vdAogICAgICBzY2FsZSB3ZWxsIHRvIG1hbnkgcHJvY2Vzc2VzLiBIb3dldmVyLCBhY2Nlc3NlcyB0byB0aGUgc2Vzc2lvbiBjYWNoZQogICAgICBhcmUgcmFyZSBlbm91Z2ggdGhhdCB0aGlzIG1vZGUgY291bGQgY2VydGFpbmx5IGFsd2F5cyBiZSB1c2VkLiBUaGlzCiAgICAgIGlzIHRoZSBkZWZhdWx0IG1vZGUuCgogICAgLSBGdXRleGVzLCB3aGljaCBhcmUgTGludXgtc3BlY2lmaWMgaGlnaGx5IHNjYWxhYmxlIGxpZ2h0IHdlaWdodCBtdXRleGVzCiAgICAgIGltcGxlbWVudGVkIGluIHVzZXItc3BhY2Ugd2l0aCBzb21lIGxpbWl0ZWQgYXNzaXN0YW5jZSBmcm9tIHRoZSBrZXJuZWwuCiAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24gTGludXggMi42IGFuZCBhYm92ZSBhbmQgaXMgZW5hYmxlZCBieSBwYXNzaW5nCiAgICAgIFVTRV9GVVRFWD0xCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gU2VlIGFib3ZlLgoKSWYgbm9uZSBvZiB0aGVzZSBtZWNoYW5pc21zIGlzIHN1cHBvcnRlZCBieSB5b3VyIHBsYXRmb3JtLCB5b3UgbWF5IG5lZWQgdG8KYnVpbGQgd2l0aCBVU0VfUFJJVkFURV9DQUNIRT0xIHRvIHRvdGFsbHkgZGlzYWJsZSBTU0wgY2FjaGUgc2hhcmluZy4gVGhlbgppdCBpcyBiZXR0ZXIgbm90IHRvIHJ1biBTU0wgb24gbXVsdGlwbGUgcHJvY2Vzc2VzLgoKSWYgeW91IG5lZWQgdG8gcGFzcyBvdGhlciBkZWZpbmVzLCBpbmNsdWRlcywgbGlicmFyaWVzLCBldGMuLi4gdGhlbiBwbGVhc2UKY2hlY2sgdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGljaCBvbmVzIHdpbGwgYmUgYXZhaWxhYmxlIGluIHlvdXIgY2FzZSwgYW5kCnVzZSB0aGUgVVNFXyogdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KCkFJWCA1LjMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBnZW5lcmljIHRhcmdldC4gSG93ZXZlciwgZm9yIHRoZSBiaW5hcnkgdG8KYWxzbyBydW4gb24gNS4yIG9yIGVhcmxpZXIsIHlvdSBuZWVkIHRvIGJ1aWxkIHdpdGggREVGSU5FPSItRF9NU0dRU1VQUE9SVCIsCm90aGVyd2lzZSBfX2ZkX3NlbGVjdCgpIHdpbGwgYmUgdXNlZCB3aGlsZSBub3QgYmVpbmcgcHJlc2VudCBpbiB0aGUgbGliYywgYnV0CnRoaXMgaXMgZWFzaWx5IGFkZHJlc3NlZCB1c2luZyB0aGUgImFpeDUyIiB0YXJnZXQuIElmIHlvdSBnZXQgYnVpbGQgZXJyb3JzCmJlY2F1c2Ugb2Ygc3RyYW5nZSBzeW1ib2xzIG9yIHNlY3Rpb24gbWlzbWF0Y2hlcywgc2ltcGx5IHJlbW92ZSAtZyBmcm9tCkRFQlVHX0NGTEFHUy4KCllvdSBjYW4gZWFzaWx5IGRlZmluZSB5b3VyIG93biB0YXJnZXQgd2l0aCB0aGUgR05VIE1ha2VmaWxlLiBVbmtub3duIHRhcmdldHMKYXJlIHByb2Nlc3NlZCB3aXRoIG5vIGRlZmF1bHQgb3B0aW9uIGV4Y2VwdCBVU0VfUE9MTD1kZWZhdWx0LiBTbyB5b3UgY2FuIHZlcnkKd2VsbCB1c2UgdGhhdCBwcm9wZXJ0eSB0byBkZWZpbmUgeW91ciBvd24gc2V0IG9mIG9wdGlvbnMuIFVTRV9QT0xMIGNhbiBldmVuIGJlCmRpc2FibGVkIGJ5IHNldHRpbmcgVVNFX1BPTEw9IiIuIEZvciBleGFtcGxlIDoKCiAgICAkIGdtYWtlIFRBUkdFVD10aW55IFVTRV9QT0xMPSIiIFRBUkdFVF9DRkxBR1M9LWZvbWl0LWZyYW1lLXBvaW50ZXIKCgoyKSBIb3cgdG8gaW5zdGFsbCBpdAotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVG8gaW5zdGFsbCBoYXByb3h5LCB5b3UgY2FuIGVpdGhlciBjb3B5IHRoZSBzaW5nbGUgcmVzdWx0aW5nIGJpbmFyeSB0byB0aGUKcGxhY2UgeW91IHdhbnQsIG9yIHJ1biA6CgogICAgJCBzdWRvIG1ha2UgaW5zdGFsbAoKSWYgeW91J3JlIHBhY2thZ2luZyBpdCBmb3IgYW5vdGhlciBzeXN0ZW0sIHlvdSBjYW4gc3BlY2lmeSBpdHMgcm9vdCBkaXJlY3RvcnkKaW4gdGhlIHVzdWFsIERFU1RESVIgdmFyaWFibGUuCgoKMykgSG93IHRvIHNldCBpdCB1cAotLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGVyZSBpcyBzb21lIGRvY3VtZW50YXRpb24gaW4gdGhlIGRvYy8gZGlyZWN0b3J5IDoKCiAgICAtIGFyY2hpdGVjdHVyZS50eHQgOiB0aGlzIGlzIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsLiBJdCBpcyBxdWl0ZSBvbGQgYW5kCiAgICAgIGRvZXMgbm90IHRlbGwgYWJvdXQgdGhlIG5pY2UgbmV3IGZlYXR1cmVzLCBidXQgaXQncyBzdGlsbCBhIGdvb2Qgc3RhcnRpbmcKICAgICAgcG9pbnQgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSB3YW50IGJ1dCBkb24ndCBrbm93IGhvdyB0byBkbyBpdC4KCiAgICAtIGNvbmZpZ3VyYXRpb24udHh0IDogdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwuIEl0IHJlY2FsbHMgYSBmZXcKICAgICAgZXNzZW50aWFsIEhUVFAgYmFzaWMgY29uY2VwdHMsIGFuZCBkZXRhaWxzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAgICAgIHN5bnRheCAoa2V5d29yZHMsIHVuaXRzKS4gSXQgYWxzbyBkZXNjcmliZXMgdGhlIGxvZyBhbmQgc3RhdHMgZm9ybWF0LiBJdAogICAgICBpcyBub3JtYWxseSBhbHdheXMgdXAgdG8gZGF0ZS4gSWYgeW91IHNlZSB0aGF0IHNvbWV0aGluZyBpcyBtaXNzaW5nIGZyb20KICAgICAgaXQsIHBsZWFzZSByZXBvcnQgaXQgYXMgdGhpcyBpcyBhIGJ1Zy4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZpbGUgaXMKICAgICAgaHVnZSBhbmQgdGhhdCBpdCdzIGdlbmVyYWxseSBtb3JlIGNvbnZlbmllbnQgdG8gcmV2aWV3IEN5cmlsIEJvbnTpJ3MKICAgICAgSFRNTCB0cmFuc2xhdGlvbiBvbmxpbmUgaGVyZSA6CgogICAgICAgICAgIGh0dHA6Ly9jYm9udGUuZ2l0aHViLmlvL2hhcHJveHktZGNvbnYvY29uZmlndXJhdGlvbi0xLjUuaHRtbAoKICAgIC0gaGFwcm94eS1lbi50eHQgLyBoYXByb3h5LWZyLnR4dCA6IHRoZXNlIGFyZSB0aGUgb2xkIG91dGRhdGVkIGRvY3MuIFlvdQogICAgICBzaG91bGQgbmV2ZXIgbmVlZCB0aGVtLiBJZiB5b3UgZG8sIHRoZW4gcGxlYXNlIHJlcG9ydCB3aGF0IHlvdSBkaWRuJ3QKICAgICAgZmluZCBpbiB0aGUgb3RoZXIgb25lcy4KCiAgICAtIGdwbC50eHQgLyBsZ3BsLnR4dCA6IHRoZSBjb3B5IG9mIHRoZSBsaWNlbnNlcyBjb3ZlcmluZyB0aGUgc29mdHdhcmUuIFNlZQogICAgICB0aGUgJ0xJQ0VOU0UnIGZpbGUgYXQgdGhlIHRvcCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAtIHRoZSByZXN0IGlzIG1haW5seSBmb3IgZGV2ZWxvcGVycy4KClRoZXJlIGFyZSBhbHNvIGEgbnVtYmVyIG9mIG5pY2UgY29uZmlndXJhdGlvbiBleGFtcGxlcyBpbiB0aGUgImV4YW1wbGVzIgpkaXJlY3RvcnkgYXMgd2VsbCBhcyBvbiBzZXZlcmFsIHNpdGVzIGFuZCBhcnRpY2xlcyBvbiB0aGUgbmV0IHdoaWNoIGFyZSBsaW5rZWQKdG8gZnJvbSB0aGUgaGFwcm94eSB3ZWIgc2l0ZS4KCgo0KSBIb3cgdG8gcmVwb3J0IGEgYnVnCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkl0IGlzIHBvc3NpYmxlIHRoYXQgZnJvbSB0aW1lIHRvIHRpbWUgeW91J2xsIGZpbmQgYSBidWcuIEEgYnVnIGlzIGEgY2FzZSB3aGVyZQp3aGF0IHlvdSBzZWUgaXMgbm90IHdoYXQgaXMgZG9jdW1lbnRlZC4gT3RoZXJ3aXNlIGl0IGNhbiBiZSBhIG1pc2Rlc2lnbi4gSWYgeW91CmZpbmQgdGhhdCBzb21ldGhpbmcgaXMgc3R1cGlkbHkgZGVzaWduLCBwbGVhc2UgZGlzY3VzcyBpdCBvbiB0aGUgbGlzdCAoc2VlIHRoZQoiaG93IHRvIGNvbnRyaWJ1dGUiIHNlY3Rpb24gYmVsb3cpLiBJZiB5b3UgZmVlbCBsaWtlIHlvdSdyZSBwcm9jZWVkaW5nIHJpZ2h0CmFuZCBoYXByb3h5IGRvZXNuJ3Qgb2JleSwgdGhlbiBmaXJzdCBhc2sgeW91cnNlbGYgaWYgaXQgaXMgcG9zc2libGUgdGhhdCBub2JvZHkKYmVmb3JlIHlvdSBoYXMgZXZlbiBlbmNvdW50ZXJlZCB0aGlzIGlzc3VlLiBJZiBpdCdzIHVubGlrZWx5LCB0aGUgeW91IHByb2JhYmx5CmhhdmUgYW4gaXNzdWUgaW4geW91ciBzZXR1cC4gSnVzdCBpbiBjYXNlIG9mIGRvdWJ0LCBwbGVhc2UgY29uc3VsdCB0aGUgbWFpbGluZwpsaXN0IGFyY2hpdmVzIDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9tYXJjLmluZm8vP2w9aGFwcm94eQoKT3RoZXJ3aXNlLCBwbGVhc2UgdHJ5IHRvIGdhdGhlciB0aGUgbWF4aW11bSBhbW91bnQgb2YgaW5mb3JtYXRpb24gdG8gaGVscApyZXByb2R1Y2UgdGhlIGlzc3VlIGFuZCBzZW5kIHRoYXQgdG8gdGhlIG1haWxpbmcgbGlzdCA6CgogICAgICAgICAgICAgICAgICAgICAgICBoYXByb3h5QGZvcm1pbHV4Lm9yZwoKUGxlYXNlIGluY2x1ZGUgeW91ciBjb25maWd1cmF0aW9uIGFuZCBsb2dzLiBZb3UgY2FuIG1hc2sgeW91ciBJUCBhZGRyZXNzZXMgYW5kCnBhc3N3b3Jkcywgd2UgZG9uJ3QgbmVlZCB0aGVtLiBCdXQgaXQncyBlc3NlbnRpYWwgdGhhdCB5b3UgcG9zdCB5b3VyIGNvbmZpZyBpZgp5b3Ugd2FudCBwZW9wbGUgdG8gZ3Vlc3Mgd2hhdCBpcyBoYXBwZW5pbmcuCgpBbHNvLCBrZWVwIGluIG1pbmQgdGhhdCBoYXByb3h5IGlzIGRlc2lnbmVkIHRvIE5FVkVSIENSQVNILiBJZiB5b3Ugc2VlIGl0IGRpZQp3aXRob3V0IGFueSByZWFzb24sIHRoZW4gaXQgZGVmaW5pdGVseSBpcyBhIGNyaXRpY2FsIGJ1ZyB0aGF0IG11c3QgYmUgcmVwb3J0ZWQKYW5kIHVyZ2VudGx5IGZpeGVkLiBJdCBoYXMgaGFwcGVuZWQgYSBjb3VwbGUgb2YgdGltZXMgaW4gdGhlIHBhc3QsIGVzc2VudGlhbGx5Cm9uIGRldmVsb3BtZW50IHZlcnNpb25zIHJ1bm5pbmcgb24gbmV3IGFyY2hpdGVjdHVyZXMuIElmIHlvdSB0aGluayB5b3VyIHNldHVwCmlzIGZhaXJseSBjb21tb24sIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWUgaXMgdG90YWxseSB1bnJlbGF0ZWQuCkFueXdheSwgaWYgdGhhdCBoYXBwZW5zLCBmZWVsIGZyZWUgdG8gY29udGFjdCBtZSBkaXJlY3RseSwgYXMgSSB3aWxsIGdpdmUgeW91Cmluc3RydWN0aW9ucyBvbiBob3cgdG8gY29sbGVjdCBhIHVzYWJsZSBjb3JlIGZpbGUsIGFuZCB3aWxsIHByb2JhYmx5IGFzayBmb3IKb3RoZXIgY2FwdHVyZXMgdGhhdCB5b3UnbGwgbm90IHdhbnQgdG8gc2hhcmUgd2l0aCB0aGUgbGlzdC4KCgo1KSBIb3cgdG8gY29udHJpYnV0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUGxlYXNlIGNhcmVmdWxseSByZWFkIHRoZSBDT05UUklCVVRJTkcgZmlsZSB0aGF0IGNvbWVzIHdpdGggdGhlIHNvdXJjZXMuIEl0IGlzCm1hbmRhdG9yeS4KCi0tIGVuZAo=