# Name: smd_xml v0.3 # Type: Client side plugin # Extract any XML/feed info and reformat it # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjc6InNtZF94bWwiO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMyI7czoxMToiZGVzY3JpcHRpb24iO3M6NDE6IkV4 dHJhY3QgYW55IFhNTC9mZWVkIGluZm8gYW5kIHJlZm9ybWF0IGl0IjtzOjQ6ImhlbHAiO3M6 MjgwMzY6IjxkaXYgaWQ9InNtZF9oZWxwIj4NCg0KCTxoMT5zbWRfeG1sPC9oMT4NCg0KCTxw PllhbmsgYml0cyBvdXQgb2YgYW55IGh1bmsgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwv c3Bhbj4gYW5kIHJlZm9ybWF0IGl0IHRvIHlvdXIgb3duIG5lZWRzLiBHcmVhdCBmb3IgcHVs bGluZyBmZWVkIGluZm8gaW50byB5b3VyIFRleHRwYXR0ZXJuIHNpdGUsIGZvciBleGFtcGxl IGZyb20gZGVsaWNpb3VzLmNvbS48L3A+DQoNCgk8aDI+RmVhdHVyZXM8L2gyPg0KDQoJPHVs Pg0KCQk8bGk+U3BlY2lmeSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5YTUw8L3NwYW4+IGRh dGEgZnJvbSBhbnkgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gJiM4MjEyOyBpbnRl cm5hbCBvciBleHRlcm5hbCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvbGk+ DQoJCTxsaT5TZWxlY3RpdmVseSBleHRyYWN0IGFueSBpdGVtcyBpbiB5b3VyIHJlY29yZCBz ZXQ8L2xpPg0KCQk8bGk+VXNlIGEgRm9ybSBvciB0aGUgcGx1Z2luIGNvbnRhaW5lciB0byBv dXRwdXQgZGF0YSB5b3UgaGF2ZSBleHRyYWN0ZWQ8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9 ImNhcHMiPlhNTDwvc3Bhbj4gdGFnIGF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZSBhcyB3ZWxs PC9saT4NCgkJPGxpPlN1cHBvcnRzIHBhZ2luYXRpb24gb2YgcmVzdWx0cyB3aXRoIGxpbWl0 L29mZnNldDwvbGk+DQoJPC91bD4NCg0KCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPg0K DQoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3 c29uPC9hPi4gRm9yIG90aGVyIHNvZnR3YXJlIGJ5IG1lLCBvciB0byBtYWtlIGEgZG9uYXRp b24sIHNlZSB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2Fy ZSBwYWdlPC9hPi48L3A+DQoNCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVu aW5zdGFsbGF0aW9uPC9oMj4NCg0KCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNSs8L3A+DQoNCgk8cD5Eb3dubG9hZCB0aGUg cGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1 Z2lucy8xMTM4L3NtZF94bWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSBzb2Z0d2Fy ZSBwYWdlIGFib3ZlLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVu YWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMyNzE4Ij5mb3J1bSB0aHJlYWQ8L2E+IGZv ciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBv ZiB0aGUgcGx1Z2luLjwvcD4NCg0KCTxwPlRvIHJlbW92ZSB0aGUgcGx1Z2luLCBzaW1wbHkg ZGVsZXRlIGl0IGZyb20gdGhlIEFkbWluLSZndDtQbHVnaW5zIHRhYi48L3A+DQoNCgk8aDI+ VXNhZ2U6IHNtZF94bWw8L2gyPg0KDQoJPHA+UGxhY2UgYSA8Y29kZT4mbHQ7dHhwOnNtZF94 bWwmZ3Q7PC9jb2RlPiB0YWcgd2hlcmUgeW91IHdpc2ggdG8gcHJvY2VzcyA8c3BhbiBjbGFz cz0iY2FwcyI+WE1MPC9zcGFuPiBkYXRhICYjODIxMjsgdGhpcyBjb3VsZCBiZSBmcm9tIGEg ZmVlZC4gU2luY2UgdGhpcyBwbHVnaW4gaXMgYmVzdCBleHBsYWluZWQgYnkgZXhhbXBsZSwg YXNzdW1lIHRoZSBmb2xsb3dpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwvc3Bhbj4gZG9j dW1lbnQgaXMgcHJlc2VudGVkIHRvIHRoZSBwbHVnaW46PC9wPg0KDQo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7ZW1wbG95ZWVzJmd0Ow0KICAgJmx0O2Vt cGxveWVlJmd0Ow0KICAgICAgJmx0O25hbWUgaWQ9JnF1b3Q7d2lsZV9lX2NveW90ZSZxdW90 OyZndDtXaWxlIEUuIENveW90ZSZsdDsvbmFtZSZndDsNCiAgICAgICZsdDtqb2JfdGl0bGUm Z3Q7U2NoZW1lciZsdDsvam9iX3RpdGxlJmd0Ow0KICAgICAgJmx0O2RlcHQmZ3Q7QUNNRSBj b3JwJmx0Oy9kZXB0Jmd0Ow0KICAgICAgJmx0O3F1YWxpdHkmZ3Q7Q3VubmluZyZsdDsvcXVh bGl0eSZndDsNCiAgICAgICZsdDtxdWFsaXR5Jmd0O0RldmlvdXNuZXNzJmx0Oy9xdWFsaXR5 Jmd0Ow0KICAgICAgJmx0O3F1YWxpdHkmZ3Q7UGVyc2lzdGVuY2UmbHQ7L3F1YWxpdHkmZ3Q7 DQogICAmbHQ7L2VtcGxveWVlJmd0Ow0KICAgJmx0O2VtcGxveWVlJmd0Ow0KICAgICAgJmx0 O25hbWUgaWQ9JnF1b3Q7cm9hZF9ydW5uZXImcXVvdDsmZ3Q7Um9hZCBSdW5uZXImbHQ7L25h bWUmZ3Q7DQogICAgICAmbHQ7am9iX3RpdGxlJmd0O1NlZWQgZXhwZXJ0Jmx0Oy9qb2JfdGl0 bGUmZ3Q7DQogICAgICAmbHQ7ZGVwdCZndDtFdmFzaW9uJmx0Oy9kZXB0Jmd0Ow0KICAgICAg Jmx0O3F1YWxpdHkmZ3Q7U3BlZWQmbHQ7L3F1YWxpdHkmZ3Q7DQogICAgICAmbHQ7cXVhbGl0 eSZndDtNZWVwIG1lZXAmbHQ7L3F1YWxpdHkmZ3Q7DQogICAmbHQ7L2VtcGxveWVlJmd0Ow0K Jmx0Oy9lbXBsb3llZXMmZ3Q7DQo8L2NvZGU+PC9wcmU+DQoNCgk8aDM+QXR0cmlidXRlczog PGNvZGU+c21kX3htbDwvY29kZT48L2gzPg0KDQoJPHA+VXNlIHRoZSBmb2xsb3dpbmcgYXR0 cmlidXRlcyB0byBjb25maWd1cmUgdGhlIHNtZF94bWwgcGx1Z2luIChzaGFkZWQgYXR0cmli dXRlcyBhcmUgbWFuZGF0b3J5KSA6PC9wPg0KDQoJPGg0PkRhdGEgaW1wb3J0PC9oND4NCg0K CTx1bD4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIG1hbmQiPmRhdGE8L3NwYW4+IDogdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5YTUw8L3NwYW4+IGRhdGEgc291cmNlLiBNb3N0IG9mIHRo ZSB0aW1lIHRoaXMgd2lsbCBiZSBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LCB0 aG91Z2ggeW91IGNvdWxkIGhhcmQtY29kZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwv c3Bhbj4gZGF0YSBvdCB1c2UgYW5vdGhlciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiB0YWcgaGVyZSAoZS5nLiA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPik8 L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0gbWFuZCI+cmVjb3JkPC9zcGFuPiA6IHRo ZSBuYW1lIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+WE1MPC9zcGFuPiB0YWcgdGhhdCBz dXJyb3VuZHMgZWFjaCByZWNvcmQgb2YgZGF0YSBpbiB5b3VyIGZlZWQuIFRodXMgeW91IHdv dWxkIG5lZWQgPGNvZGU+cmVjb3JkPSZxdW90O2VtcGxveWVlJnF1b3Q7PC9jb2RlPiBpbiB0 aGUgYWJvdmUgZG9jdW1lbnQ8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0gbWFuZCI+ ZmllbGRzPC9zcGFuPiA6IGxpc3Qgb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwvc3Bhbj4g ZmllbGRzIHlvdSB3YW50IHRvIGV4dHJhY3QgZnJvbSBlYWNoIHJlY29yZC4gRm9yIGV4YW1w bGUsIDxjb2RlPmZpZWxkcz0mcXVvdDtuYW1lLCBkZXB0JnF1b3Q7PC9jb2RlPi4gRWFjaCBm aWVsZCB5b3Ugc3BlY2lmeSBoZXJlIHdpbGwgY3JlYXRlIGEgc2ltaWxhcmx5LW5hbWVkIDxh IGhyZWY9IiNyZXBzIj5yZXBsYWNlbWVudCB0YWc8L2E+IHRoYXQgeW91IG1heSB1c2UgaW4g eW91ciBmb3JtL2NvbnRhaW5lciB0byBkaXNwbGF5IHRoZSByZWxldmFudCBwaWVjZSBvZiBk YXRhLiBJbiB0aGlzIGNhc2UsIDxjb2RlPntuYW1lfTwvY29kZT4gYW5kIDxjb2RlPntkZXB0 fTwvY29kZT4gd291bGQgYmUgYXZhaWxhYmxlIGluIHlvdXIgb3V0cHV0LiBZb3UgbWF5IGFs c28gZXh0cmFjdCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZmllbGQgYnkgc2VwYXJh dGluZyB0aGUgbmFtZSBvZiB0aGUgZmllbGQmIzgyMTc7cyBjb3B5IHdpdGggPGNvZGU+cGFy YW1fZGVsaW08L2NvZGU+LiBGb3IgZXhhbXBsZTogPGNvZGU+ZmllbGRzPSZxdW90O3B1YkRh dGUsIHRpdGxlfHVybF90dGwsIGlkLCBsaW5rJnF1b3Q7PC9jb2RlPiB3b3VsZCBleHRyYWN0 IHRpdGxlIHR3aWNlOiBvbmNlIGFzIDxjb2RlPnt0aXRsZX08L2NvZGU+IGFuZCBhZ2FpbiBh cyA8Y29kZT57dXJsX3R0bH08L2NvZGU+LiBTZWUgPGEgaHJlZj0iI2VnNiI+ZXhhbXBsZSA2 PC9hPiBmb3IgYSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgdGhpczwvbGk+DQoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+c2tpcDwvc3Bhbj4gOiBsaXN0IG9mIDxzcGFuIGNsYXNzPSJj YXBzIj5YTUw8L3NwYW4+IGZpZWxkcyB5b3Ugd2FudCB0byBza2lwIG92ZXIgaW4gZWFjaCBy ZWNvcmQuIFVzZWZ1bCBpZiBhIGZpZWxkIHlvdSB3aXNoIHRvIGV4dHJhY3QgaXMgdXNlZCBp biB0d28gcGxhY2VzIGluIHRoZSBzYW1lIHJlY29yZC4gU2VlIDxhIGhyZWY9IiNlZzIiPmV4 YW1wbGUgMjwvYT4gZm9yIGEgcHJhY3RpY2FsIGFwcGxpY2F0aW9uPC9saT4NCgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5kZWZhdWx0czwvc3Bhbj4gOiBsaXN0IG9mIGRlZmF1bHQgdmFs dWVzIHlvdSB3aXNoIHRvIHNldCBpZiBhbnkgPGNvZGU+ZmllbGRzPC9jb2RlPiBhcmUgbm90 IHNldCBpbiB5b3VyIGRvY3VtZW50LiBTcGVjaWZ5IGRlZmF1bHRzIGluIHBhaXJzIG9mIGVu dHJpZXMgbGlrZSB0aGlzOiA8Y29kZT5kZWZhdWx0cz0mcXVvdDtmaWVsZHxkZWZhdWx0LCBm aWVsZHxkZWZhdWx0LCAuLi4mcXVvdDs8L2NvZGU+LiBUaGUgcGlwZSBjYW4gYmUgYWx0ZXJl ZCBieSA8Y29kZT5wYXJhbV9kZWxpbTwvY29kZT48L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPnNldF9lbXB0eTwvc3Bhbj4gOiBhbnkgZmllbGRzIHRoYXQgYXJlIG5vdCBzZXQg aW4geW91ciBkb2N1bWVudCB3aWxsIG5vcm1hbGx5IG1lYW4gdGhhdCB5b3UmIzgyMTc7bGwg c2VlIHRoZSByYXcgPGNvZGU+e3JlcGxhY2VtZW50IHRhZ308L2NvZGU+IGluIHlvdXIgb3V0 cHV0LiBVc2UgPGNvZGU+c2V0X2VtcHR5PSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIGVuc3Vy ZSB0aGF0IGFsbCBlbXB0eSBub2RlcyBhcmUgc2V0IHRvIGFuIGVtcHR5IHZhbHVlLiBBbnkg PGNvZGU+ZGVmYXVsdHM8L2NvZGU+IHlvdSBzcGVjaWZ5IHdpbGwgdGFrZSBwcmVjZWRlbmNl IG92ZXIgZW1wdGllczwvbGk+DQoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2FjaGVfdGlt ZTwvc3Bhbj4gOiBpZiBzZXQsIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+WE1MPC9zcGFuPiBk b2N1bWVudCBpcyBjYWNoZWQgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IHByZWZzLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHNtZF94bWwgKGUuZy4gcmVmcmVzaGluZyB0 aGUgcGFnZSkgd2lsbCByZWFkIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBo aXR0aW5nIHRoZSA8Y29kZT5kYXRhPC9jb2RlPiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiwgdGh1cyBjdXR0aW5nIGRvd24gb24gbmV0d29yayB0cmFmZmljLiBBZnRlciA8Y29k ZT5jYWNoZV90aW1lPC9jb2RlPiAmIzgyMTI7IHNwZWNpZmllZCBpbiBzZWNvbmRzICYjODIx MjsgaGFzIGVsYXBzZWQsIHRoZSBuZXh0IHBhZ2UgcmVmcmVzaCB3aWxsIGNhdXNlIHRoZSBk b2N1bWVudCB0byBiZSBmZXRjaGVkIGZyb20gdGhlIDxjb2RlPmRhdGE8L2NvZGU+IDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGFnYWluLiBZb3UgbWF5LCBob3dldmVyLCBmb3Jj ZSBhIHJlZnJlc2ggZnJvbSB0aGUgZGF0YSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBhdCBhbnkgdGltZSBieSBhZGRpbmcgPGNvZGU+JmFtcDtmb3JjZV9yZWFkPTE8L2NvZGU+ IHRvIHRoZSBicm93c2VyIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ICh5b3UgY2Fu IHVzZSBzbWRfcHJlZmFsaXplciBhbmQgc2VhcmNoIGZvciAmIzgyMTY7c21kX3htbCYjODIx NzsgdG8gZmluZCB0aGUgY2FjaGVkIGRvY3VtZW50cyAmIzgyMTI7IGVhY2ggaXMgcmVmZXJl bmNlZCBieSBpdHMgdW5pcXVlIElEKTwvbGk+DQoJPC91bD4NCg0KCTxoND5NYW5pcHVsYXRp b248L2g0Pg0KDQoJPHVsPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm1hdDwvc3Bh bj4gOiBhbHRlciB0aGUgZm9ybWF0IG9mIHRoaXMgbGlzdCBvZiBmaWVsZHMuIEZvciBlYWNo IGZpZWxkLCBzcGVjaWZ5IGl0ZW1zIHNlcGFyYXRlZCBieSA8Y29kZT5wYXJhbV9kZWxpbTwv Y29kZT47IHRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUgZmllbGQgeW91IHdhbnQgdG8g YWx0ZXIsIHRoZSAybmQgaXMgdGhlIHR5cGUgb2YgYWx0ZXJhdGlvbiByZXF1aXJlZCwgYW5k IHRoZSAzcmR8NHRofDV0aHwuLiBzcGVjaWZ5IGhvdyB5b3Ugd2FudCB0byBhbHRlciB0aGUg ZGF0YS4gVGhlIGZvbGxvd2luZyBkYXRhIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6DQoJPHVsPg0K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRhdGU8L3NwYW4+IDogdGFrZXMgb25lIGFyZ3Vt ZW50OyB0aGUgZm9ybWF0IHN0cmluZyBhcyBkZXRhaWxlZCBpbiA8YSBocmVmPSJodHRwOi8v cGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZnRpbWUucGhwIj5zdHJmdGltZTwvYT4u IEV4YW1wbGU6IDxjb2RlPmZvcm1hdD0mcXVvdDtwdWJEYXRlfGRhdGV8JWQgJUIgJVkgJUg6 JUk6JVMmcXVvdDs8L2NvZGU+IHdvdWxkIHJlZm9ybWF0IHRoZSBwdWJEYXRlIGZpZWxkLiBD YW4gYWxzbyBiZSB1c2VkIHRvIHJlZm9ybWF0IHRpbWUgc3RyaW5nczwvbGk+DQoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+bGluazwvc3Bhbj4gOiBjb252ZXJ0IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiBpbiB0aGlzIGZpZWxkIHRvIGFuIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiBhbmNob3IgaHlwZXJsaW5rLiBFeGFtcGxlOiA8Y29kZT5mb3Jt YXQ9JnF1b3Q7Y2F0X3VybHxsaW5rJnF1b3Q7PC9jb2RlPi4gUmVwbGFjZXMgdGhlIDxjb2Rl PmxpbmtpZnk8L2NvZGU+IGF0dHJpYnV0ZSBmcm9tIHRoZSB2MC4yeCB2ZXJzaW9uczwvbGk+ DQoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXNjYXBlPC9zcGFuPiA6IGVzY2FwZSB0aGUg ZmllbGQgc28gaXQgY2FuIGJlIHVzZWQgaW4gYW4gPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwv c3Bhbj4gc3RhdGVtZW50PC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zYW5pdGl6 ZTwvc3Bhbj4gOiBjb252ZXJ0IHRoZSBmaWVsZCBpbnRvIG9uZSBvZiB0aHJlZSAmIzgyMTY7 ZHVtZWQgZG93biYjODIxNzsgZm9ybWF0cywgYXMgc3BlY2lmaWVkIGJ5IHRoZSB0aGlyZCBw YXJhbWV0ZXIuIENob29zZSBmcm9tIDxjb2RlPnVybDwvY29kZT4gZm9yIGNyZWF0aW5nIHNp bXBsZSwgdmFsaWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RyaW5nczsgPGNv ZGU+ZmlsZTwvY29kZT4gZm9yIGNyZWF0aW5nIHZhbGlkIGZpbGUgbmFtZXMsIG9yIDxjb2Rl PnVybF90aXRsZTwvY29kZT4gZm9yIG1ha2luZyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPi1zdHlsZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0aXRsZXMgYXMgZ292 ZXJuZWQgYnkgeW91ciBwcmVmcyBzZXR0aW5ncy4gRXhhbXBsZTogPGNvZGU+Zm9ybWF0PSZx dW90O1RpdGxlfHNhbml0aXplfHVybCZxdW90OzwvY29kZT48L2xpPg0KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPmNhc2U8L3NwYW4+IDogYWx0ZXIgdGhlIGNhc2Ugb2YgdGhlIGZpZWxk LiBDaG9vc2UgZnJvbSBvbmUgb2YgZm91ciBvcHRpb25zIGFzIHRoZSB0aGlyZCwgZm91cnRo LCBldGMgcGFyYW1ldGVyczogPGNvZGU+dXBwZXI8L2NvZGU+LCA8Y29kZT5sb3dlcjwvY29k ZT4sIDxjb2RlPnVjZmlyc3Q8L2NvZGU+LCA8Y29kZT51Y3dvcmRzPC9jb2RlPi4gVGhlIGl0 ZW1zIG1heSBiZSBjdW11bGF0aXZlLCBmb3IgZXhhbXBsZSB0byBmaXJzdCBjb252ZXJ0IHRo ZSBmaWVsZCB0byBsb3dlciBjYXNlIHRoZW4gY29udmVydCB0aGUgZmlyc3QgbGV0dGVyIG9m IGVhY2ggd29yZCB0byB1cHBlciBjYXNlLCBzcGVjaWZ5IDxjb2RlPmZvcm1hdHM9JnF1b3Q7 Q291bnRyeXxjYXNlfGxvd2VyfHVjd29yZHMmcXVvdDs8L2NvZGU+PC9saT4NCgk8L3VsPjwv bGk+DQoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dGFyZ2V0X2VuYzwvc3Bhbj4gOiBjaGFy YWN0ZXIgZW5jb2RpbmcgdG8gYXBwbHkgdG8gdGhlIHBhcnNlZCA8c3BhbiBjbGFzcz0iY2Fw cyI+WE1MPC9zcGFuPiBkYXRhLiBDaG9vc2UgZnJvbSA8Y29kZT5JU08tODg1OS0xPC9jb2Rl PiwgPGNvZGU+VVMtQVNDSUk8L2NvZGU+LCBvciA8Y29kZT5VVEYtODwvY29kZT4uIERlZmF1 bHQ6IDxjb2RlPlVURi04PC9jb2RlPjwvbGk+DQoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ dXBwZXJjYXNlPC9zcGFuPiA6IHNldCB0byAxIHRvIGZvcmNlIGFsbCA8c3BhbiBjbGFzcz0i Y2FwcyI+WE1MPC9zcGFuPiB0YWcgbmFtZXMgdG8gYmUgaW4gdXBwZXIgY2FzZSwgdGh1cyB5 b3Ugd291bGQgaGF2ZSB0byBzcGVjaWZ5IDxjb2RlPmZpZWxkcz0mcXVvdDtOQU1FLCBERVBU JnF1b3Q7PC9jb2RlPiBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgZXh0cmFjdCB0aG9zZSBm aWVsZHM8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNvbmNhdDwvc3Bhbj4gOiBh bnkgZHVwbGljYXRlIHRhZ3MgaW4gdGhlIHN0cmVhbSBhcmUgdXN1YWxseSBjb25jYXRlbmF0 ZWQgdG9nZXRoZXIuIElmIHlvdSB3aXNoIHRvIHR1cm4gdGhpcyBmZWF0dXJlIG9mZiBzbyB0 aGF0IG9ubHkgdGhlIGxhc3QgdGFnJiM4MjE3O3MgY29udGVudCByZW1haW5zLCBzZXQgPGNv ZGU+Y29uY2F0PSZxdW90OzAmcXVvdDs8L2NvZGU+LiBEZWZhdWx0OiAxPC9saT4NCgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5jb252ZXJ0PC9zcGFuPiA6IGlmIHlvdXIgZGF0YSBzdHJl YW0gY29udGFpbnMgZGF0YSB5b3UgZG9uJiM4MjE3O3Qgd2FudCBvciBkYXRhIHRoYXQgeW91 IHdpc2ggdG8gdHJhbnNsYXRlIChmb3IgZXhhbXBsZSwgY2hhcmFjdGVyIGVudGl0aWVzKSB5 b3UgY2FuIGxpc3QgdGhlbSBoZXJlLiBJdGVtcyBhcmUgc3BlY2lmaWVkIGluIHBhaXJzIHNl cGFyYXRlZCBieSA8Y29kZT5wYXJhbV9kZWxpbTwvY29kZT47IHRoZSBmaXJzdCBpcyB0aGUg aXRlbSB0byBzZWFyY2ggZm9yIGFuZCB0aGUgc2Vjb25kIGlzIGl0cyByZXBsYWNlbWVudC4g Rm9yIGV4YW1wbGU6IDxjb2RlPmNvbnZlcnQ9JnF1b3Q7JmFtcDthbXA7IzAzOXwmIzM5OyZx dW90OzwvY29kZT4gd291bGQgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+JmFt cDthbXA7IzAzOTwvY29kZT4gd2l0aCBhbiBhcG9zdHJvcGhlIGNoYXJhY3Rlci4gTm90ZSB0 aGF0IHRoZSByZXBsYWNlbWVudHMgYXJlIHBlcmZvcm1lZCBvbiB0aGUgcmF3IHN0cmVhbSA8 ZW0+YmVmb3JlPC9lbT4gaXQgaXMgcGFyc2VkIGFuZCA8ZW0+YWZ0ZXI8L2VtPiBpdCBpcyBj YWNoZWQuIEFsc28gdGFrZSBjYXJlIHdoZW4gZGVjb2RpbmcgZG91YmxlIHF1b3RlczsgdGhp cyBpcyB0aGUgY29ycmVjdCBtZXRob2Q6IDxjb2RlPmNvbnZlcnQ9JnF1b3Q7JmFtcDthbXA7 cXVvdDt8JnF1b3Q7JnF1b3Q7JnF1b3Q7PC9jb2RlPiAobm90ZSB0aGUgZG91YmxlIHF1b3Rl IGlzIGVzY2FwZWQgYnkgcHV0dGluZyA8ZW0+dHdvPC9lbT4gZG91YmxlIHF1b3RlIGNoYXJh Y3RlcnMgaW4pPC9saT4NCgk8L3VsPg0KDQoJPGg0PkZvcm1zIGFuZCBwYWdpbmc8L2g0Pg0K DQoJPHVsPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDogdGhlIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEZvcm0gd2l0aCB3aGljaCB0byBwYXJzZSBl YWNoIHJlY29yZC4gWW91IG1heSB1c2UgdGhlIHBsdWdpbiBhcyBhIGNvbnRhaW5lciBpbnN0 ZWFkIGlmIHlvdSBwcmVmZXI8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhZ2Vm b3JtPC9zcGFuPiA6IG9wdGlvbmFsIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZv cm0gdXNlZCB0byBzcGVjaWZ5IHRoZSBsYXlvdXQgb2YgYW55IHBhZ2luZyBuYXZpZ2F0aW9u IGFuZCBzdGF0aXN0aWNzIHN1Y2ggYXMgcGFnZSBudW1iZXIsIHF1YW50aXR5IG9mIHJlY29y ZHMgcGVyIHBhZ2UsIHRvdGFsIG51bWJlciBvZiByZWNvcmRzLCBldGMuIFNlZSA8YSBocmVm PSIjcGdyZXBzIj5wYWdpbmcgcmVwbGFjZW1lbnQgdGFnczwvYT48L2xpPg0KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnBhZ2Vwb3M8L3NwYW4+IDogdGhlIHBvc2l0aW9uIG9mIHRoZSBw YWdpbmcgaW5mb3JtYXRpb24uIE9wdGlvbnMgYXJlIDxjb2RlPmJlbG93PC9jb2RlPiAodGhl IGRlZmF1bHQpLCA8Y29kZT5hYm92ZTwvY29kZT4sIG9yIGJvdGggb2YgdGhlbSBzZXBhcmF0 ZWQgYnkgPGNvZGU+ZGVsaW08L2NvZGU+PC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5saW1pdDwvc3Bhbj4gOiBzaG93IHRoaXMgbWFueSByZXN1bHRzIHBlciBwYWdlLiBTZXR0 aW5nIGEgPGNvZGU+bGltaXQ8L2NvZGU+IHNtYWxsZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVy IG9mIHJlY29yZHMgc3dpdGNoZXMgcGFnaW5nIG9uIGF1dG9tYXRpY2FsbHkgc28geW91IGNh biB1c2UgdGhlIDxjb2RlPiZsdDt0eHA6b2xkZXIgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4m bHQ7dHhwOm5ld2VyIC8mZ3Q7PC9jb2RlPiB0YWdzIGluc2lkZSB5b3VyIDxjb2RlPnBhZ2Vm b3JtPC9jb2RlPiB0byBzdGVwIHRocm91Z2ggZWFjaCBwYWdlIG9mIHJlc3VsdHMuIFlvdSBt YXkgYWxzbyBjb25zdHJ1Y3QgeW91ciBvd24gcGFnaW5nIChzZWUgPGEgaHJlZj0iI2VnMyI+ ZXhhbXBsZSAzPC9hPik8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm9mZnNldDwv c3Bhbj4gOiBza2lwIHRoaXMgbWFueSByb3dzIGJlZm9yZSBvdXRwdXR0aW5nIHRoZSByZXN1 bHRzLiBJZiB5b3Ugc3BlY2lmeSBhIG5lZ2F0aXZlIDxjb2RlPm9mZnNldDwvY29kZT4geW91 IHN0YXJ0IHRoYXQgbWFueSByZWNvcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQ8 L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhZ2V2YXI8L3NwYW4+IDogaWYgeW91 IGFyZSBwdXR0aW5nIHNtZF94bWwgb24gdGhlIHNhbWUgcGFnZSBhcyBhIHN0YW5kYXJkIGFy dGljbGUgbGlzdCwgdGhlIGJ1aWx0LWluIG5ld2VyIGFuZCBvbGRlciB0YWdzIHdpbGwgY2xh c2ggd2l0aCB0aG9zZSBvZiBzbWRfeG1sOyBjbGlja2luZyBuZXh0L3ByZXYgd2lsbCBzdGVw IHRocm91Z2ggYm90aCB5b3VyIHJlc3VsdCBzZXQgYW5kIHlvdXIgYXJ0aWNsZSBsaXN0LiBT cGVjaWZ5IGEgZGlmZmVyZW50IHZhcmlhYmxlIG5hbWUgaGVyZSBzbyB0aGUgdHdvIGxpc3Rz IGNhbiBiZSBuYXZpZ2F0ZWQgaW5kZXBlbmRlbnRseSwgZS5nLiA8Y29kZT5wYWdldmFyPSZx dW90O3hwYWdlJnF1b3Q7PC9jb2RlPi4gTm90ZSB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhpcywg eW91IHdpbGwgaGF2ZSB0byBnZW5lcmF0ZSB5b3VyIG93biBjdXN0b20gbmV3ZXIvb2xkZXIg bGlua3MgKHNlZSA8YSBocmVmPSIjZWc0Ij5leGFtcGxlIDQ8L2E+KSBhbmQgdGhlIDxhIGhy ZWY9IiNzbWRfeGlmIj5jb25kaXRpb25hbCB0YWdzPC9hPi4gVGhlcmUgaXMgYWxzbyBhIHNw ZWNpYWwgdmFsdWUgPGNvZGU+U01EX1hNTF9VTklRVUVfSUQ8L2NvZGU+IHdoaWNoIGFzc2ln bnMgdGhlIHRhZ3MmIzgyMTc7IHVuaXF1ZSBJRCBhcyB0aGUgcGFnaW5nIHZhcmlhYmxlLiBT ZWUgPGEgaHJlZj0iI2VnNSI+ZXhhbXBsZSA1PC9hPiBmb3IgbW9yZS4gRGVmYXVsdDogPGNv ZGU+cGc8L2NvZGU+PC9saT4NCgk8L3VsPg0KDQoJPGg0PlRhZy9jbGFzcy9mb3JtYXR0aW5n IGF0dHJpYnV0ZXM8L2g0Pg0KDQoJPHVsPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndy YXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGJyYWNrZXRzLCB0byBz dXJyb3VuZCBlYWNoIHJlY29yZCB5b3Ugb3V0cHV0PC9saT4NCgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcsIHdpdGhvdXQgYnJhY2tl dHMsIHRvIHN1cnJvdW5kIGVhY2ggZmllbGQgeW91IG91dHB1dDwvbGk+DQoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIDxjb2RlPndyYXB0YWc8L2Nv ZGU+PC9saT4NCgk8L3VsPg0KDQoJPGg0PlBsdWdpbiBjdXN0b21pc2F0aW9uPC9oND4NCg0K CTx1bD4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kZWxpbTwvc3Bhbj4gOiB0aGUgZGVs aW1pdGVyIHRvIHVzZSBiZXR3ZWVuIGl0ZW1zIGluIHRoZSBwbHVnaW4gYXR0cmlidXRlcy4g RGVmYXVsdDogY29tbWE8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmFtX2Rl bGltPC9zcGFuPiA6IHRoZSBkZWxpbWl0ZXIgdG8gdXNlIGJldHdlZW4gaXRlbXMgaW4gPHNw YW4gY2xhc3M9ImNhcHMiPlhNTDwvc3Bhbj4gYW5kIHBsdWdpbiBkYXRhIGF0dHJpYnV0ZXMu IERlZmF1bHQ6IHBpcGUgKHwpPC9saT4NCgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jb25j YXRfZGVsaW08L3NwYW4+IDogdGhlIGRlbGltaXRlciB0byB1c2UgYmV0d2VlbiBpZGVudGlj YWxseS1uYW1lZCB0YWdzIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+WE1MPC9zcGFuPiBk YXRhIHN0cmVhbS4gRGVmYXVsdDogc3BhY2U8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnRyYW5zcG9ydDwvc3Bhbj4gOiAoc2hvdWxkIG5vdCBiZSBuZWVkZWQpIGlmIHlvdSB3 b3VsZCBsaWtlIHRvIGZvcmNlIHRoZSBwbHVnaW4gdG8gdXNlIGEgcGFydGljdWxhciA8c3Bh biBjbGFzcz0iY2FwcyI+SFRUUDwvc3Bhbj4gdHJhbnNwb3J0IG1lY2hhbmlzbSB0byBmZXRj aCB5b3VyIDxjb2RlPmRhdGE8L2NvZGU+IHlvdSBjYW4gc3BlY2lmeSBpdCBoZXJlLiBDaG9v c2UgZnJvbSA8Y29kZT5mc29jazwvY29kZT4gb3IgPGNvZGU+Y3VybDwvY29kZT4uIERlZmF1 bHQ6IDxjb2RlPmZzb2NrPC9jb2RlPjwvbGk+DQoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ bGluZV9sZW5ndGg8L3NwYW4+IDogaWYgeW91IGFyZSB1c2luZyB0aGUgPGNvZGU+ZnNvY2s8 L2NvZGU+IHRyYW5zcG9ydCBtZWNoYW5pc20sIHRoZSBwbHVnaW4gZ3JhYnMgdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5YTUw8L3NwYW4+IGRvY3VtZW50IGxpbmUgYnkgbGluZSBhbmQgdXNl cyBhIG1heGltdW0gbGluZSBsZW5ndGggb2YgODE5MiBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQu IFRoaXMgaXMgdXN1YWxseSBnb29kIGVub3VnaCBiZWNhdXNlIG1vc3QgZmVlZHMgY29udGFp biBuZXdsaW5lcywgYnV0IHNvbWUgKGUuZy4gR29vZ2xlIFNwcmVhZHNoZWV0KSBkb24mIzgy MTc7dCBoYXZlIGFueSBuZXdsaW5lcyBpbiB0aGVtLiBUbyBzdWNjZXNzZnVsbHkgcGFyc2Ug c3VjaCBkb2N1bWVudHMgeW91IG1heSBuZWVkIHRvIGluY3JlYXNlIHRoZSBsaW5lIGxlbmd0 aC4gSW4gdGhlc2Ugc2l0dWF0aW9ucywgaG93ZXZlciwgaXQgaXMgaGlnaGx5IHJlY29tbWVu ZGVkIHRvIHN3aXRjaCB0byA8Y29kZT50cmFuc3BvcnQ9JnF1b3Q7Y3VybCZxdW90OzwvY29k ZT4gaW5zdGVhZCAoaWYgeW91IGNhbikgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGFueSBs aW5lIGxlbmd0aCByZXN0cmljdGlvbnM8L2xpPg0KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pmhhc2hzaXplPC9zcGFuPiA6IChzaG91bGQgbm90IGJlIG5lZWRlZCkgd2hlbiBzcGVjaWZ5 aW5nIGEgPGNvZGU+Y2FjaGVfdGltZTwvY29kZT4gdGhlIHBsdWdpbiBhc3NpZ25zIGEgMzIt Y2hhcmFjdGVyLCB1bmlxdWUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHNtZF94bWwgYmFz ZWQgb24geW91ciBpbXBvcnQgYXR0cmlidXRlcy4gPGNvZGU+aGFzaHNpemU8L2NvZGU+IGdv dmVybnMgdGhlIG1lY2hhbmlzbSBmb3IgbWFraW5nIHRoaXMgbG9uZyByZWZlcmVuY2Ugc2hv cnRlci4gSXQgY29tcHJpc2VzIHR3byBudW1iZXJzIHNlcGFyYXRlZCBieSBhIGNvbG9uOyB0 aGUgZmlyc3QgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdW5pcWUgSUQsIHRoZSBzZWNvbmQgaXMg aG93IG1hbnkgY2hhcmFjdGVycyB0byBza2lwIHBhc3QgZWFjaCB0aW1lIGEgY2hhcmFjdGVy IGlzIGNob3Nlbi4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1bmlxdWVfcmVmZXJlbmNlIHdhcyA8 Y29kZT4wY2YyODU4NzliZjlkNmI4MTI1MzllYjc0OGZiYzhmNjwvY29kZT4gdGhlbiA8Y29k ZT5oYXNoc2l6ZT0mcXVvdDs2OjUmcXVvdDs8L2NvZGU+IHdvdWxkIG1ha2UgYSA2LWNoYXJh Y3RlciB1bmlxdWUgSUQgdXNpbmcgZXZlcnkgNXRoIGNoYXJhY3RlcjsgaW4gb3RoZXIgd29y ZHMgPGNvZGU+MDVmODk4PC9jb2RlPi4gSWYgYXQgYW55IHRpbWUsIHlvdSAmIzgyMjA7ZmFs bCBvZmYmIzgyMjE7IHRoZSBlbmQgb2YgdGhlIGxvbmcgc3RyaW5nLCB0aGUgcGx1Z2luIHdy YXBzIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIGFuZCBjb250aW51ZXMg Y291bnRpbmcuIERlZmF1bHQ6IDxjb2RlPjY6NTwvY29kZT48L2xpPg0KCTwvdWw+DQoNCgk8 aDMgaWQ9InJlcHMiPlJlcGxhY2VtZW50IHRhZ3M8L2gzPg0KDQoJPHA+RWFjaCA8c3BhbiBj bGFzcz0iY2FwcyI+WE1MPC9zcGFuPiBmaWVsZCB5b3UgZXh0cmFjdCBmcm9tIHlvdXIgZGF0 YSBzdHJlYW0gaGFzIGFuIGVxdWl2YWxlbnRseS1uYW1lZCByZXBsYWNlbWVudCB0YWcgYXZh aWxhYmxlIHNvIHlvdSBtYXkgdXNlIGl0IGFueXdoZXJlIHlvdSBsaWtlIGluIHlvdXIgRm9y bS9jb250YWluZXIuIFNvLCBpZiB5b3UgY2hvc2UgdG8gZXh0cmFjdCA8Y29kZT5maWVsZHM9 JnF1b3Q7bmFtZSwgam9iX3RpdGxlLCBxdWFsaXR5JnF1b3Q7PC9jb2RlPiB5b3Ugd291bGQg aGF2ZSB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IHRhZ3MgYXZhaWxhYmxlIGR1cmluZyB0 aGUgZmlyc3QgcmVjb3JkOjwvcD4NCg0KCTx1bD4NCgkJPGxpPjxjb2RlPntuYW1lfTwvY29k ZT4gOiBXaWxlIEUuIENveW90ZTwvbGk+DQoJCTxsaT48Y29kZT57bmFtZXxpZH08L2NvZGU+ IDogd2lsZV9lX2NveW90ZTwvbGk+DQoJCTxsaT48Y29kZT57am9iX3RpdGxlfTwvY29kZT4g OiBTY2hlbWVyPC9saT4NCgkJPGxpPjxjb2RlPntxdWFsaXR5fTwvY29kZT4gOiBDdW5uaW5n IERldmlvdXNuZXNzIFBlcnNpc3RlbmNlPC9saT4NCgk8L3VsPg0KDQoJPHA+QW5kIGR1cmlu ZyB0aGUgc2Vjb25kIHJlY29yZCwgdGhlIHNhbWUgcmVwbGFjZW1lbnQgdGFnIG5hbWVzIHdv dWxkIHJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgaXRlbXM6PC9wPg0KDQoJPHVsPg0KCQk8bGk+ PGNvZGU+e25hbWV9PC9jb2RlPiA6IFJvYWQgUnVubmVyPC9saT4NCgkJPGxpPjxjb2RlPntu YW1lOmlkfTwvY29kZT4gOiByb2FkX3J1bm5lcjwvbGk+DQoJCTxsaT48Y29kZT57am9iX3Rp dGxlfTwvY29kZT4gOiBTZWVkIGV4cGVydDwvbGk+DQoJCTxsaT48Y29kZT57cXVhbGl0eX08 L2NvZGU+IDogU3BlZWQgTWVlcCBtZWVwPC9saT4NCgk8L3VsPg0KDQoJPHA+Tm90ZSB0aGF0 IHRoZSBhdHRyaWJ1dGUgY2FsbGVkIDxjb2RlPmlkPC9jb2RlPiB0aGF0IGlzIHBhcnQgb2Yg dGhlIDxjb2RlPiZsdDtuYW1lJmd0OzwvY29kZT4gPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwv c3Bhbj4gdGFnIGhhcyBiZWVuIGV4dHJhY3RlZCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgYXV0 b21hdGljYWxseS4gQnkgZGVmYXVsdCwgdGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMgYXJlIGRl ZmluZWQgYXMgPGNvZGU+e3RhZ3xhdHRyaWJ1dGV9PC9jb2RlPi4gVGhlIHBpcGUgY2FuIGJl IGFsdGVyZWQgdXNpbmcgPGNvZGU+cGFyYW1fZGVsaW08L2NvZGU+LjwvcD4NCg0KCTxwPlRo ZSA8Y29kZT57cXVhbGl0eX08L2NvZGU+IHRhZyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGlu IHRoZSBleGFtcGxlIGRvY3VtZW50IGFib3ZlLiBZb3UgY2FuIGluZmx1ZW5jZSBpdHMgb3V0 cHV0IHVzaW5nIHRoZSA8Y29kZT5jb25jYXQ8L2NvZGU+IGFuZCA8Y29kZT5jb25jYXRfZGVs aW08L2NvZGU+IGF0dHJpYnV0ZXMsIGUuZy4gdXNpbmcgPGNvZGU+Y29uY2F0X2RlbGltPSZx dW90O3wmcXVvdDs8L2NvZGU+IHdvdWxkIHJlbmRlciB0aGUgZm9sbG93aW5nIHJlcGxhY2Vt ZW50IHZhcmlhYmxlIG9uIHRoZSBmaXJzdCByZWNvcmQ6PC9wPg0KDQoJPHVsPg0KCQk8bGk+ PGNvZGU+e3F1YWxpdHl9PC9jb2RlPiA6IEN1bm5pbmd8RGV2aW91c25lc3N8UGVyc2lzdGVu Y2U8L2xpPg0KCTwvdWw+DQoNCgk8cD53aGlsZSA8Y29kZT5jb25jYXQ9JnF1b3Q7MCZxdW90 OzwvY29kZT4gd291bGQgcmVuZGVyIHRoaXM6PC9wPg0KDQoJPHVsPg0KCQk8bGk+PGNvZGU+ e3F1YWxpdHl9PC9jb2RlPiA6IFBlcnNpc3RlbmNlPC9saT4NCgk8L3VsPg0KDQoJPHA+VGhl cmUgYXJlIGFsc28gc29tZSBzcGVjaWFsIHN0YXRpc3RpY2FsIHRhZ3MgYXZhaWxhYmxlIGlu IGVhY2ggcmVjb3JkOjwvcD4NCg0KCTx1bD4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3RvdGFs cmVjc308L2NvZGU+IDogdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGZvdW5kIGluIHlv dXIgPHNwYW4gY2xhc3M9ImNhcHMiPlhNTDwvc3Bhbj4gZG9jdW1lbnQ8L2xpPg0KCQk8bGk+ PGNvZGU+e3NtZF94bWxfcGFnZXJlY3N9PC9jb2RlPiA6IHRoZSBudW1iZXIgb2YgcmVjb3Jk cyBvbiB0aGlzIHBhZ2UgKGlmIG5vdCB1c2luZyBwYWdpbmcsIHRoaXMgaXMgdGhlIHNhbWUg YXMgYWJvdmUpPC9saT4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3BhZ2VzfTwvY29kZT4gOiB0 aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBwYWdlczwvbGk+DQoJCTxsaT48Y29kZT57c21kX3ht bF90aGlzcGFnZX08L2NvZGU+IDogdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkg dmlzaWJsZSBwYWdlPC9saT4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3RoaXNyZWN9PC9jb2Rl PiA6IHRoZSByZWNvcmQgbnVtYmVyLCBzdGFydGluZyBhdCAxPC9saT4NCgkJPGxpPjxjb2Rl PntzbWRfeG1sX3RoaXNpbmRleH08L2NvZGU+IDogdGhlIHJlY29yZCBudW1iZXIsIHN0YXJ0 aW5nIGF0IDA8L2xpPg0KCQk8bGk+PGNvZGU+e3NtZF94bWxfcnVucmVjfTwvY29kZT4gOiB0 aGUgcmVjb3JkIG51bWJlciwgc3RhcnRpbmcgYXQgMSBhbmQgaW5jbHVkaW5nIGFueSBvZmZz ZXQ8L2xpPg0KCQk8bGk+PGNvZGU+e3NtZF94bWxfcnVuaW5kZXh9PC9jb2RlPiA6IHRoZSBy ZWNvcmQgbnVtYmVyLCBzdGFydGluZyBhdCAwIGFuZCBpbmNsdWRpbmcgYW55IG9mZnNldDwv bGk+DQoJPC91bD4NCg0KCTxoMyBpZD0icGdyZXBzIj5QYWdpbmcgcmVwbGFjZW1lbnQgdGFn czwvaDM+DQoNCgk8cD5JbiB5b3VyIDxjb2RlPnBhZ2Vmb3JtPC9jb2RlPiB5b3UgY2FuIGVt cGxveSBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXBsYWNlbWVudCB0YWdzIHRvIGJ1aWxkIHVw IGEgbmF2aWdhdGlvbiBzeXN0ZW0gZm9yIHN0ZXBwaW5nIHRocm91Z2ggeW91ciA8c3BhbiBj bGFzcz0iY2FwcyI+WE1MPC9zcGFuPiBkb2N1bWVudDo8L3A+DQoNCgk8dWw+DQoJCTxsaT48 Y29kZT57c21kX3htbF90b3RhbHJlY3N9PC9jb2RlPiA6IHRoZSB0b3RhbCBudW1iZXIgb2Yg cmVjb3JkcyBmb3VuZCBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5YTUw8L3NwYW4+IGRv Y3VtZW50PC9saT4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3BhZ2VyZWNzfTwvY29kZT4gOiB0 aGUgbnVtYmVyIG9mIHJlY29yZHMgb24gdGhpcyBwYWdlPC9saT4NCgkJPGxpPjxjb2RlPntz bWRfeG1sX3BhZ2VzfTwvY29kZT4gOiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBwYWdlczwv bGk+DQoJCTxsaT48Y29kZT57c21kX3htbF9wcmV2cGFnZX08L2NvZGU+IDogdGhlIHBhZ2Ug bnVtYmVyIG9mIHRoZSBwcmV2aW91cyBwYWdlICYjODIxMjsgZW1wdHkgaWYgb24gZmlyc3Qg cGFnZTwvbGk+DQoJCTxsaT48Y29kZT57c21kX3htbF90aGlzcGFnZX08L2NvZGU+IDogdGhl IHBhZ2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHBhZ2U8L2xpPg0KCQk8bGk+PGNvZGU+e3Nt ZF94bWxfbmV4dHBhZ2V9PC9jb2RlPiA6IHRoZSBwYWdlIG51bWJlciBvZiB0aGUgbmV4dCBw YWdlICYjODIxMjsgZW1wdHkgaWYgb24gbGFzdCBwYWdlPC9saT4NCgkJPGxpPjxjb2RlPntz bWRfeG1sX3JlY19zdGFydH08L2NvZGU+IDogdGhlIHJlY29yZCBudW1iZXIgb2YgdGhlIGZp cnN0IHJlY29yZCBvbiB0aGlzIHBhZ2UgKGNvdW50ZWQgZnJvbSB0aGUgc3RhcnQgb2YgdGhl IHJlY29yZCBzZXQpPC9saT4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3JlY19lbmR9PC9jb2Rl PiA6IHRoZSByZWNvcmQgbnVtYmVyIG9mIHRoZSBsYXN0IHJlY29yZCBvbiB0aGlzIHBhZ2Ug KGNvdW50ZWQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJlY29yZCBzZXQpPC9saT4NCgkJPGxp Pjxjb2RlPntzbWRfeG1sX3JlY3NfcHJldn08L2NvZGU+IDogdGhlIG51bWJlciBvZiByZWNv cmRzIG9uIHRoZSBwcmV2aW91cyBwYWdlPC9saT4NCgkJPGxpPjxjb2RlPntzbWRfeG1sX3Jl Y3NfbmV4dH08L2NvZGU+IDogdGhlIG51bWJlciBvZiByZWNvcmRzIG9uIHRoZSBuZXh0IHBh Z2U8L2xpPg0KCQk8bGk+PGNvZGU+e3NtZF94bWxfdW5pcXVlX2lkfTwvY29kZT4gOiB0aGUg dW5pcXVlIHJlZmVyZW5jZSBudW1iZXIgYXNzaWduZWQgdG8gdGhpcyBzbWRfeG1sIHRhZyAo c2VlIDxhIGhyZWY9IiNlZzUiPmV4YW1wbGUgNTwvYT4gZm9yIHVzYWdlIG9mIHRoaXMpPC9s aT4NCgk8L3VsPg0KDQoJPGgyIGlkPSJzbWRfeGlmIj5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpz bWRfeG1sX2lmX3ByZXYmZ3Q7IC8gJmx0O3R4cDpzbWRfeG1sX2lmX25leHQmZ3Q7PC9jb2Rl PjwvaDI+DQoNCgk8cD5Vc2UgdGhlc2UgY29udGFpbmVyIHRhZ3MgdG8gZGV0ZXJtaW5lIGlm IHRoZXJlIGlzIGEgbmV4dCBvciBwcmV2aW91cyBwYWdlIGFuZCB0YWtlIGFjdGlvbiBpZiBz by4gQ2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgPGNvZGU+cGFnZWZvcm08L2NvZGU+LCB0aHVz IGFsbCA8YSBocmVmPSIjcGdyZXBzIj5wYWdpbmcgcmVwbGFjZW1lbnQgdmFyaWFibGVzPC9h PiBhcmUgYXZhaWxhYmxlIGluc2lkZSB0aGVzZSB0YWdzLjwvcD4NCg0KPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfeG1sX2lmX3ByZXYmZ3Q7 UHJldmlvdXMgcGFnZSZsdDsvdHhwOnNtZF94bWxfaWZfcHJldiZndDsNCiZsdDt0eHA6c21k X3htbF9pZl9uZXh0Jmd0O05leHQgcGFnZSZsdDsvdHhwOnNtZF94bWxfaWZfbmV4dCZndDsN CjwvY29kZT48L3ByZT4NCg0KCTxwPlRoZSB0YWdzIHN1cHBydCA8Y29kZT4mbHQ7dHhwOmVs c2UgLyZndDs8L2NvZGU+U2VlIDxhIGhyZWY9IiNlZzUiPmV4YW1wbGUgNTwvYT4gZm9yIG1v cmUuPC9wPg0KDQoJPGgyPkV4YW1wbGVzPC9oMj4NCg0KCTxoMyBpZD0iZWcxIj5FeGFtcGxl IDE6IGRlbGljaW91cyBsaW5rczwvaDM+DQoNCgk8cD5Td2FwIDxjb2RlPnJvYWRydW5uZXI8 L2NvZGU+IGluIHRoaXMgY29kZSB3aXRoIHlvdXIgZGVsaWNpb3VzIHVzZXJuYW1lIHRvIGdl dCB5b3VyIG93biBmZWVkOjwvcD4NCg0KPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Jmx0O3R4cDpzbWRfeG1sIGRhdGE9JnF1b3Q7aHR0cDovL2ZlZWRzLmRlbGlj aW91cy5jb20vdjIvcnNzL3JvYWRydW5uZXImcXVvdDsNCiAgICAgcmVjb3JkPSZxdW90O2l0 ZW0mcXVvdDsgZmllbGRzPSZxdW90O3RpdGxlLCBsaW5rLCBwdWJEYXRlLCBkZXNjcmlwdGlv biZxdW90Ow0KICAgICB3cmFwdGFnPSZxdW90O2RsJnF1b3Q7Jmd0Ow0KICAgJmx0O2R0Jmd0 OyZsdDthIGhyZWY9JnF1b3Q7e2xpbmt9JnF1b3Q7Jmd0O3t0aXRsZX0mbHQ7L2EmZ3Q7Jmx0 Oy9kdCZndDsNCiAgICZsdDtkZCZndDtQb3N0ZWQ6IHtwdWJEYXRlfSZsdDticiAvJmd0O3tk ZXNjcmlwdGlvbn0mbHQ7L2RkJmd0Ow0KJmx0Oy90eHA6c21kX3htbCZndDsNCjwvY29kZT48 L3ByZT4NCg0KCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IHR3aXR0ZXIgZmVlZDwvaDM+DQoN CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3ht bA0KICAgICBkYXRhPSZxdW90O2h0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3Rp bWVsaW5lL3RleHRwYXR0ZXJuLnhtbCZxdW90Ow0KICAgICByZWNvcmQ9JnF1b3Q7c3RhdHVz JnF1b3Q7IGZpZWxkcz0mcXVvdDtpZCwgdGV4dCwgY3JlYXRlZF9hdCZxdW90OyBza2lwPSZx dW90O3VzZXImcXVvdDsNCiAgICAgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyBsaW5raWZ5PSZx dW90O3RleHQmcXVvdDsmZ3Q7DQogICAmbHQ7bGkmZ3Q7DQogICAgICAmbHQ7YSBocmVmPSZx dW90O2h0dHA6Ly90d2l0dGVyLmNvbS90ZXh0cGF0dGVybi9zdGF0dXNlcy97aWR9JnF1b3Q7 Jmd0Ow0KICAgICAgICAge2NyZWF0ZWRfYXR9DQogICAgICAmbHQ7L2EmZ3Q7DQogICAgICAm bHQ7YnIgLyZndDt7dGV4dH0NCiAgICZsdDsvbGkmZ3Q7DQombHQ7L3R4cDpzbWRfeG1sJmd0 Ow0KPC9jb2RlPjwvcHJlPg0KDQoJPHA+Tm90aWNlIHRoYXQgd2UgPGNvZGU+c2tpcDwvY29k ZT4gdGhlIHdob2xlIDxlbT51c2VyPC9lbT4gYmxvY2sgaW4gdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5YTUw8L3NwYW4+IGRhdGEgc3RyZWFtLiBUaGlzIGlzIGZvciB0d28gcmVhc29uczo8 L3A+DQoNCgk8b2w+DQoJCTxsaT5pdCBpcyByZWR1bmRhbnQgaW5mb3JtYXRpb24gdGhhdCBh cHBlYXJzIGluIGV2ZXJ5IHJlY29yZCAmIzgyMTI7IHdlIGFscmVhZHkga25vdyB0byB3aGlj aCB1c2VyIHRoZSBmZWVkIGJlbG9uZ3MgYmVjYXVzZSB0aGV5ciYjODIxNztlIGFsbCBmcm9t IHRoZSBzYW1lIHVzZXI8L2xpPg0KCQk8bGk+PGVtPmNyZWF0ZWRfYXQ8L2VtPiBpcyB1c2Vk IGluc2lkZSB0aGUgdXNlciBibG9jayBhcyB3ZWxsIGFzIGluIHRoZSBvdXRlciBzdGF0dXMg YmxvY2sgc28gd2UgZ2V0IHR3byBkYXRlc3RhbXBzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3 YW50IChpZiB3ZSBzaW1wbHkgdXNlZCA8Y29kZT5jb25jYXQ9JnF1b3Q7MCZxdW90OzwvY29k ZT4gdG8gb25seSBncmFiIG9uZSBvZiB0aGUgY3JlYXRlZF9hdCBlbnRyaWVzLCB0aGUgbGFz dCBvbmUgd291bGQgcHJldmFpbCAmIzgyMTI7IHRoZSBvbmUgZnJvbSB0aGUgdXNlciBibG9j ayk8L2xpPg0KCTwvb2w+DQoNCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzOiBsaW1pdCBhbmQg cGFnaW5nPC9oMz4NCg0KCTxwPlZpZXdpbmcgdGhlIEkgTG92ZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBmZWVkIDMgcmVjb3JkcyBhdCBhIHRpbWUuIE5vdGUgdGhhdCBzaW5j ZSB0aGUgc2l0ZSBpcyBub3QgdXBkYXRlZCBmcmVxdWVudGx5LCB0aGUgY2FjaGVfdGltZSBv ZiA4NjQwMCBzZWNvbmRzICgxIGRheSkgaXMgYW1wbGUgdG8gYXZvaWQgaGFtbWVyaW5nIHRo ZSBuZXR3b3JrOjwvcD4NCg0KPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+Jmx0O3R4cDpzbWRfeG1sDQogICAgIGRhdGE9JnF1b3Q7aHR0cDovL2ZlZWRzLmZlZWRi dXJuZXIuY29tL3dlbG92ZXR4cCZxdW90Ow0KICAgICByZWNvcmQ9JnF1b3Q7aXRlbSZxdW90 OyBmaWVsZHM9JnF1b3Q7dGl0bGUsZGVzY3JpcHRpb24sIGxpbmssIHB1YkRhdGUmcXVvdDsN CiAgICAgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyBsaW1pdD0mcXVvdDszJnF1b3Q7IHBhZ2Vm b3JtPSZxdW90O3BhZ2VyJnF1b3Q7DQogICAgIGNhY2hlX3RpbWU9JnF1b3Q7ODY0MDAmcXVv dDsmZ3Q7DQogICAmbHQ7bGkmZ3Q7DQogICAgICAmbHQ7YSBocmVmPSZxdW90O3tsaW5rfSZx dW90OyZndDsNCiAgICAgICAgIHt0aXRsZX0NCiAgICAgICZsdDsvYSZndDsmbHQ7c3BhbiBj bGFzcz0mcXVvdDtwdWJsaXNoZWQmcXVvdDsmZ3Q7e3B1YkRhdGV9Jmx0Oy9zcGFuJmd0Ow0K ICAgICAgJmx0O2JyIC8mZ3Q7e2Rlc2NyaXB0aW9ufQ0KICAgJmx0Oy9saSZndDsNCiZsdDsv dHhwOnNtZF94bWwmZ3Q7DQo8L2NvZGU+PC9wcmU+DQoNCgk8cD5BbmQgaW4gZm9ybSA8Y29k ZT5wYWdlcjwvY29kZT46PC9wPg0KDQo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9 ImJsb2NrIj5QYWdlIHtzbWRfeG1sX3RoaXNwYWdlfSBvZiB7c21kX3htbF9wYWdlc30NCiZs dDt0eHA6bmV3ZXImZ3Q7UHJldmlvdXMgcGFnZSZsdDsvdHhwOm5ld2VyJmd0Ow0KJmx0O3R4 cDpvbGRlciZndDtOZXh0IHBhZ2UmbHQ7L3R4cDpvbGRlciZndDsNCjwvY29kZT48L3ByZT4N Cg0KCTxwPklmIHlvdSB3YW50ZWQgdG8gdmlldyB0aGUgbGFzdCB0aHJlZSBlbnRyaWVzIGlu IHRoZSBmZWVkIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRocmVlLCB5b3UgY291bGQgc2V0IDxj b2RlPm9mZnNldD0mcXVvdDstMyZxdW90OzwvY29kZT4uPC9wPg0KDQoJPGgzIGlkPSJlZzQi PkV4YW1wbGUgNDogdXNpbmcgPGNvZGU+cGFnZXZhcjwvY29kZT48L2gzPg0KDQoJPHA+QWRk aW5nIDxjb2RlPnBhZ2V2YXI9JnF1b3Q7eG1scGcmcXVvdDs8L2NvZGU+IHRvIGV4YW1wbGUg MyBhbGxvd3MgcGFnaW5nIGluZGVwZW5kZW50bHkgb2YgdHhwOm9sZGVyIGFuZCB0eHA6bmV3 ZXIgdGFncy4gWW91IHRoZW4gbmVlZCB0byBidWlsZCB5b3VyIG93biBsaW5rcyBpbiB5b3Vy IDxjb2RlPnBhZ2VyPC9jb2RlPiBmb3JtLCBsaWtlIHRoaXM6PC9wPg0KDQo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5QYWdlIHtzbWRfeG1sX3RoaXNwYWdlfSBv ZiB7c21kX3htbF9wYWdlc30gfA0KICAgU2hvd2luZyByZWNvcmRzIHtzbWRfeG1sX3JlY19z dGFydH0gdG8ge3NtZF94bWxfcmVjX2VuZH0NCiAgIG9mIHtzbWRfeG1sX3RvdGFscmVjc30g fA0KICAmbHQ7YSBocmVmPSZxdW90Oz94bWxwZz17c21kX3htbF9wcmV2cGFnZX0mcXVvdDsm Z3Q7UHJldmlvdXMge3NtZF94bWxfcmVjc19wcmV2fSZsdDsvYSZndDsNCiAgJmx0O2EgaHJl Zj0mcXVvdDs/eG1scGc9e3NtZF94bWxfbmV4dHBhZ2V9JnF1b3Q7Jmd0O05leHQge3NtZF94 bWxfcmVjc19uZXh0fSZsdDsvYSZndDsNCjwvY29kZT48L3ByZT4NCg0KCTxwPlRoYXQgY3Jl YXRlcyBsaW5rcyB0byBuZXh0IGFuZCBwcmV2aW91cyByZWNvcmQgc2V0cyB1c2luZyB0aGUg YXNzaWduZWQgPGNvZGU+cGFnZXZhcjwvY29kZT4gYXMgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhcmFtZXRlci48L3A+DQoNCgk8aDMgaWQ9ImVnNSI+RXhhbXBsZSA1 OiBjb25kaXRpb25hbCBuYXZpZ2F0aW9uIGFuZCB0aGUgdW5pcXVlIElEPC9oMz4NCg0KCTxw PkFnYWluIHVzaW5nIGV4YW1wbGUgMywgaWYgeW91IHVzZWQgPGNvZGU+cGFnZXZhcj0mcXVv dDtTTURfWE1MX1VOSVFVRV9JRCZxdW90OzwvY29kZT4gdGhlIHBhZ2V2YXIgd291bGQgYmUg YXNzaWduZWQgdGhlIHZhbHVlIDxjb2RlPmYyOTBiODwvY29kZT4uIEluIHRoaXMgY2FzZSB3 ZSBjb3VsZCB1c2UgaXQgbGlrZSB0aGlzOjwvcD4NCg0KPHByZSBjbGFzcz0iYmxvY2siPjxj b2RlIGNsYXNzPSJibG9jayI+UGFnZSB7c21kX3htbF90aGlzcGFnZX0gb2Yge3NtZF94bWxf cGFnZXN9IHwNCiAgIFNob3dpbmcgcmVjb3JkcyB7c21kX3htbF9yZWNfc3RhcnR9IHRvIHtz bWRfeG1sX3JlY19lbmR9DQogICBvZiB7c21kX3htbF90b3RhbHJlY3N9IHwNCiZsdDt0eHA6 c21kX3htbF9pZl9wcmV2Jmd0Ow0KICAmbHQ7YSBocmVmPSZxdW90Oz97c21kX3htbF91bmlx dWVfaWR9PXtzbWRfeG1sX3ByZXZwYWdlfSZxdW90OyZndDtQcmV2aW91cyB7c21kX3htbF9y ZWNzX3ByZXZ9Jmx0Oy9hJmd0Ow0KJmx0Oy90eHA6c21kX3htbF9pZl9wcmV2Jmd0Ow0KJmx0 O3R4cDpzbWRfeG1sX2lmX25leHQmZ3Q7DQogICZsdDthIGhyZWY9JnF1b3Q7P3tzbWRfeG1s X3VuaXF1ZV9pZH09e3NtZF94bWxfbmV4dHBhZ2V9JnF1b3Q7Jmd0O05leHQge3NtZF94bWxf cmVjc19uZXh0fSZsdDsvYSZndDsNCiZsdDsvdHhwOnNtZF94bWxfaWZfbmV4dCZndDsNCjwv Y29kZT48L3ByZT4NCg0KCTxwPk5vdGUgdGhhdCB3ZSBhcmUgdXNpbmcgdGhlIGNvbmRpdGlv bmFsIHRhZ3MgdG8gb25seSBkaXNwbGF5IHRoZSBuZXh0IGFuZCBwcmV2aW91cyBsaW5rcyBp ZiB0aGUgbmV4dC9wcmV2IHBhZ2UgZXhpc3RzIGFuZCBhbHNvIHRoYXQgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmsgaXMgZ2VuZXJhdGVkIHVzaW5nIDxjb2RlPntz bWRfeG1sX3VuaXF1ZV9pZH08L2NvZGU+LiBZb3UgY291bGQgY29uY2VpdmFibHkgdXNlIHRo aXMgc2FtZSBwYWdlZm9ybSBvbiBtb3JlIHRoYW4gb25lIDxzcGFuIGNsYXNzPSJjYXBzIj5Y TUw8L3NwYW4+IGZlZWQgb24gdGhlIHNhbWUgcGFnZSBhbmQgbmF2aWdhdGUgdGhlIHR3byBm ZWVkcyBpbmRwZW5lZGVudGx5LCB0aG91Z2ggeW91IHdvdWxkIGhhdmUgdG8gd29yayBvdXQg YSBjbGV2ZXIgd2F5IG9mIGFtYWxnYW1hdGluZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gdmFycyAocGVyaGFwcyB1c2luZyB0aGUgYWRpX2dwcyBwbHVnaW4pLjwvcD4N Cg0KCTxoMyBpZD0iZWc2Ij5FeGFtcGxlIDY6IGluc2VydGluZyA8c3BhbiBjbGFzcz0iY2Fw cyI+WE1MPC9zcGFuPiBkYXRhIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48 L2gzPg0KDQo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhw OnNtZF94bWwgZGF0YT0mcXVvdDtodHRwOi8vZmVlZHMuZGVsaWNpb3VzLmNvbS92Mi9yc3Mv cm9hZHJ1bm5lciZxdW90Ow0KICAgICByZWNvcmQ9JnF1b3Q7aXRlbSZxdW90OyBmaWVsZHM9 JnF1b3Q7dGl0bGV8dXRpdGxlLCBsaW5rLCBwdWJEYXRlLCBkZXNjcmlwdGlvbiwgY2F0ZWdv cnkmcXVvdDsNCiAgICAgZm9ybWF0PSZxdW90O3B1YkRhdGV8ZGF0ZXwlWS0lbS0lZCAlSDol STolUywNCiAgICAgZGVzY3JpcHRpb258ZXNjYXBlLCB0aXRsZXxlc2NhcGUsIHV0aXRsZXxz YW5pdGl6ZXx1cmxfdGl0bGUmcXVvdDsmZ3Q7DQogICAmbHQ7dHhwOnNtZF9xdWVyeSBxdWVy eT0mcXVvdDtJTlNFUlQgSU5UTyB0ZXh0cGF0dGVybg0KICAgICBTRVQgUG9zdGVkPSYjMzk7 e3B1YkRhdGV9JiMzOTssIExhc3RNb2Q9Tk9XKCkNCiAgICAgdXJsX3RpdGxlPSYjMzk7e3V0 aXRsZX0mIzM5OywNCiAgICAgVGl0bGU9JiMzOTt7dGl0bGV9JiMzOTssIGN1c3RvbV8zPSYj Mzk7e2xpbmt9JiMzOTssDQogICAgIEJvZHk9JiMzOTt7ZGVzY3JpcHRpb259JiMzOTssIEJv ZHlfaHRtbD0mIzM5O3tkZXNjcmlwdGlvbn0mIzM5OywNCiAgICAgU2VjdGlvbj0mIzM5O2xp bmtzJiMzOTssIENhdGVnb3J5MT0mIzM5O2RlbGljaW91cyYjMzk7LA0KICAgICBrZXl3b3Jk cz0mIzM5O3tjYXRlZ29yeX0mIzM5OyZxdW90OyAvJmd0Ow0KJmx0Oy90eHA6c21kX3htbCZn dDsNCjwvY29kZT48L3ByZT4NCg0KCTxwPlRoaXMgZXhhbXBsZSB0YWtlcyBhIGRlbGljaW91 cyBmZWVkLCByZWZvcm1hdHMgdGhlIHZhcmlvdXMgZW50cmllcyBhbmQgaW5zZXJ0cyB0aGVt IGludG8gdGhlIHRleHRwYXR0ZXJuIHRhYmxlIGluIGEgZGVkaWNhdGVkIHNlY3Rpb24uIE5v dGUgdGhhdCB0aGUgZGF0ZSBmb3JtYXQgaXMgYWx0ZXJlZCBhbmQgdGhlIGZlZWQmIzgyMTc7 cyB0aXRsZSBpcyBjb252ZXJ0ZWQgdG8gYSBzYW5pdGl6ZWQgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3VpdGFibGUgZm9y IHRoZSB1cmxfdGl0bGUgZmllbGQuPC9wPg0KDQoJPGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNo YW5nZWxvZzwvaDI+DQoNCgk8dWw+DQoJCTxsaT4wMiBKYW4gMTAgfCAwLjEgfCBJbml0aWFs IHJlbGVhc2U8L2xpPg0KCQk8bGk+MDMgSmFuIDEwIHwgMC4yIHwgQWRkZWQgY2FjaGUgc3Vw cG9ydCAodGhhbmtzIHZhcmlhYXMpIDsgYWRkZWQgPGNvZGU+bGltaXQ8L2NvZGU+LCA8Y29k ZT5vZmZzZXQ8L2NvZGU+IGFuZCBwYWdpbmcgZmVhdHVyZXMgOyBhZGRlZCA8Y29kZT5saW5r aWZ5PC9jb2RlPiAodGhhbmtzIEphcm8pPC9saT4NCgkJPGxpPjA1IEphbiAxMCB8IDAuMjEg fCBTdXBwb3J0cyBodHRwczovLyBmZWVkcyAodGhhbmtzIHBob3Rvbm9tYWQpIDsgYWRkZWQg PGNvZGU+dHJhbnNwb3J0PC9jb2RlPiwgPGNvZGU+ZGVmYXVsdHM8L2NvZGU+IGFuZCA8Y29k ZT5zZXRfZW1wdHk8L2NvZGU+IGF0dHJpYnV0ZXM8L2xpPg0KCQk8bGk+MTMgSmFuIDEwIHwg MC4yMiB8IEFkZGVkIDxjb2RlPmxpbmVfbGVuZ3RoPC9jb2RlPiAodGhhbmtzIG5hcmRvKTwv bGk+DQoJCTxsaT4xNyBKYW4gMTAgfCAwLjMgfCBFbmFibGVkIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhcmFtcyB0byBiZSBwYXNzZWQgaW4gdGhlIDxjb2RlPmRhdGE8L2Nv ZGU+IGF0dHJpYnV0ZSA7IGFkZGVkIDxjb2RlPmZvcm1hdDwvY29kZT4gOyBkZXByZWNhdGVk IDxjb2RlPmxpbmtpZnk8L2NvZGU+IDsgPGNvZGU+cGFyYW1fZGVsaW08L2NvZGU+IGRlZmF1 bHQgaXMgbm93IHBpcGU8L2xpPg0KCTwvdWw+DQoNCjwvZGl2Pgo8IS0tIC0tLSBCRUdJTiBQ TFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiNzbWRfaGVscCB7 IGxpbmUtaGVpZ2h0OjEuNSA7fQ0KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30NCiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9u dC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNv bG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBh ZGRpbmc6MTBweDsgfQ0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7 IGNvbG9yOiAjMDBjOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQ0KI3NtZF9oZWxwIGE6aG92ZXIs ICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5v bmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7 fQ0KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fu cy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCiNzbWRfaGVscCBo MiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsg Y29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQ0KI3NtZF9o ZWxwIGgzIHsgY29sb3I6ICMwNzk7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJp ZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9y bTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCiNzbWRfaGVscCBo NCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6 IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQ0K I3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMzZDsgfQ0KI3Nt ZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5 OyB9DQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBh ZGRpbmctYm90dG9tOjFlbTt9DQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVy OjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9DQojc21kX2hlbHAgdWwgeyBsaXN0 LXN0eWxlLXR5cGU6c3F1YXJlOyB9DQojc21kX2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7 fQ0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9DQojc21kX2hl bHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0NCjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQ TFVHSU4gQ1NTIC0tLSAtLT4iO3M6NDoiY29kZSI7czoyMDU3MDoiZnVuY3Rpb24gc21kX3ht bCgkYXR0cywgJHRoaW5nPU5VTEwpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzcGFnZSwg JHNtZF94bWxfcGdpbmZvOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2RhdGEnID0+ ICcnLA0KCQkncmVjb3JkJyA9PiAnJywNCgkJJ2ZpZWxkcycgPT4gJycsDQoJCSdza2lwJyA9 PiAnJywNCgkJJ3VwcGVyY2FzZScgPT4gJzAnLA0KCQknY29udmVydCcgPT4gJycsIC8vIHNl YXJjaDpyZXBsYWNlLCBzZWFyY2g6cmVwbGFjZSwgLi4uDQoJCSd0YXJnZXRfZW5jJyA9PiAn VVRGLTgnLA0KCQknZGVmYXVsdHMnID0+ICcnLA0KCQknc2V0X2VtcHR5JyA9PiAnMCcsDQoJ CSdmb3JtYXQnID0+ICcnLA0KCQknZm9ybScgPT4gJycsDQoJCSdsaW1pdCcgPT4gMCwNCgkJ J29mZnNldCcgPT4gMCwNCgkJJ2xpbmtpZnknID0+ICcnLCAvLyBEZXByZWNhdGVkOiB1c2Ug Zm9ybWF0PSJmaWVsZHxsaW5rIiBpbnN0ZWFkDQoJCSdwYWdlZm9ybScgPT4gJycsDQoJCSdw YWdldmFyJyA9PiAncGcnLA0KCQkncGFnZXBvcycgPT4gJ2JlbG93JywNCgkJJ3dyYXB0YWcn ID0+ICcnLA0KCQknYnJlYWsnID0+ICcnLA0KCQknY2xhc3MnID0+ICcnLA0KCQknZGVsaW0n ID0+ICcsJywNCgkJJ3BhcmFtX2RlbGltJyA9PiAnfCcsDQoJCSdjb25jYXRfZGVsaW0nID0+ ICcgJywNCgkJJ2NvbmNhdCcgPT4gJzEnLA0KCQknY2FjaGVfdGltZScgPT4gJzAnLCAvLyBp biBzZWNvbmRzDQoJCSdoYXNoc2l6ZScgPT4gJzY6NScsDQoJCSdsaW5lX2xlbmd0aCcgPT4g JzgxOTInLA0KCQkndHJhbnNwb3J0JyA9PiAnJywNCgkJJ2RlYnVnJyA9PiAnMCcsDQoJKSwg JGF0dHMpKTsNCg0KCSRzcmMgPSAnJzsNCgkkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICR0 aGluZyA6IGZldGNoX2Zvcm0oJGZvcm0pOw0KDQoJaWYgKCRsaW5raWZ5KSB7DQoJCXRyaWdn ZXJfZXJyb3IoImxpbmtpZnkgYXR0cmlidXRlIGRlcHJlY2F0ZWQ6IHVzZSBmb3JtYXQ9XCJm aWVsZHxsaW5rXCIgaW5zdGVhZCIsIEVfVVNFUl9OT1RJQ0UpOw0KCX0NCg0KCWlmIChlbXB0 eSgkZGF0YSkpIHsNCgkJdHJpZ2dlcl9lcnJvcigic21kX3htbCByZXF1aXJlcyBhIGRhdGEg c291cmNlIik7DQoJfQ0KCWlmIChlbXB0eSgkcmVjb3JkKSkgew0KCQl0cmlnZ2VyX2Vycm9y KCJzbWRfeG1sIHJlcXVpcmVzIGEgcmVjb3JkIG5hbWUgd2l0aGluIHlvdXIgZGF0YSBzdHJl YW0iKTsNCgl9DQoJaWYgKGVtcHR5KCRmaWVsZHMpKSB7DQoJCXRyaWdnZXJfZXJyb3IoInNt ZF94bWwgcmVxdWlyZXMgYSBsaXN0IG9mIGZpZWxkcyB0byBleHRyYWN0IGZyb20gd2l0aGlu IHlvdXIgcmVjb3JkcyIpOw0KCX0NCg0KCSRwYWdlYml0ID0gJHJvd2luZm8gPSBhcnJheSgp Ow0KCWlmICgkcGFnZWZvcm0pIHsNCgkJJHBhZ2VQb3NBbGxvd2VkID0gYXJyYXkoImJlbG93 IiwgImFib3ZlIik7DQoJCSRwYWdlZm9ybSA9IGZldGNoX2Zvcm0oJHBhZ2Vmb3JtKTsNCgkJ JHBhZ2Vwb3MgPSBzdHJfcmVwbGFjZSgnc21kXycsICcnLCAkcGFnZXBvcyk7IC8vIEZvciBj b252ZW5pZW5jZQ0KCQkkcGFnZXBvcyA9IGRvX2xpc3QoJHBhZ2Vwb3MsICRkZWxpbSk7DQoJ CWZvcmVhY2ggKCRwYWdlcG9zIGFzICRwYWdlaXRlbSkgew0KCQkJJHBhZ2ViaXRbXSA9IChp bl9hcnJheSgkcGFnZWl0ZW0sICRwYWdlUG9zQWxsb3dlZCkpID8gJHBhZ2VpdGVtIDogJHBh Z2VQb3NBbGxvd2VkWzBdOw0KCQl9DQoJfQ0KDQoJJHRhcmdldF9lbmMgPSAoaW5fYXJyYXko JHRhcmdldF9lbmMsIGFycmF5KCdJU08tODg1OS0xJywgJ1VTLUFTQ0lJJywgJ1VURi04Jykp KSA/ICR0YXJnZXRfZW5jIDogJ1VURi04JzsNCg0KCS8vIE1ha2UgYSB1bmlxdWUgaGFzaCB2 YWx1ZSBmb3IgdGhpcyBpbnN0YW5jZSBzbyB0aGUgWE1MIGRvY3VtZW50IGNhbiBiZSBjYWNo ZWQgaW4gdHhwX3ByZWZzDQoJJHVuaXEgPSAnJzsNCgkkbWQ1ID0gbWQ1KCRkYXRhLiRyZWNv cmQuJGZpZWxkcyk7DQoJbGlzdCgkaGFzaExlbiwgJGhhc2hTa2lwKSA9IGV4cGxvZGUoJzon LCAkaGFzaHNpemUpOw0KCWZvciAoJGlkeCA9IDAsICRjbnQgPSAwOyAkY250IDwgJGhhc2hM ZW47ICRjbnQrKywgJGlkeCA9ICgoJGlkeCskaGFzaFNraXApICUgc3RybGVuKCRtZDUpKSkg ew0KCQkkdW5pcSAuPSAkbWQ1WyRpZHhdOw0KCX0NCg0KCSR2YXJfbGFzdG1vZCA9ICdzbWRf eG1sX2xtb2RfJy4kdW5pcTsNCgkkdmFyX2RhdGEgPSAnc21kX3htbF9kYXRhXycuJHVuaXE7 DQoJJGxhc3Rtb2QgPSBnZXRfcHJlZigkdmFyX2xhc3Rtb2QsIDApOw0KCSRyZWFkX2NhY2hl ID0gKCgkY2FjaGVfdGltZSA+IDApICYmICgodGltZSgpIC0gJGxhc3Rtb2QpIDwgJGNhY2hl X3RpbWUpKSA/IHRydWUgOiBmYWxzZTsNCgkkcmVhZF9jYWNoZSA9IGdwcygnZm9yY2VfcmVh ZCcpID8gZmFsc2UgOiAkcmVhZF9jYWNoZTsgLy8gT3ZlcnJpZGUgY2FjaGVfdGltZQ0KCSRj cnVzaCA9IGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0 cygnZ3p1bmNvbXByZXNzJyk7DQoJJHBhZ2V2YXIgPSAoJHBhZ2V2YXIgPT0gJ1NNRF9YTUxf VU5JUVVFX0lEJykgPyAkdW5pcSA6ICRwYWdldmFyOw0KDQoJLy8gQ2FjaGVkIGRvY3VtZW50 IGlzIGd6aXBwZWQgYW5kIHRoZW4gKHl1ayEpIGJhc2U2NCdkIGlmIHpsaWIgaXMgY29tcGls ZWQgaW4uDQoJLy8gV291bGQgcHJlZmVyIHRvIHN0b3JlIGJpbmFyeSBkYXRhIGRpcmVjdGx5 IGJ1dCB0cnlpbmcgdG8gaW5zZXJ0IGl0IGludG8gYSB0eHBfcHJlZnMNCgkvLyB0ZXh0IGZp ZWxkIGFsd2F5cyBnYXZlIHByb2JsZW1zIG9uIGluc2VydGlvbiBhbmQvb3IgcmV0cmlldmFs DQoJaWYgKCRyZWFkX2NhY2hlKSB7DQoJCWlmICgkZGVidWcgPiAxKSB7DQoJCQlkbXAgKCcr KyBSRUFESU5HIENBQ0hFICcuJHZhcl9kYXRhLicgKysnKTsNCgkJfQ0KCQkkc3JjID0gJGNy dXNoID8gZ3p1bmNvbXByZXNzKGJhc2U2NF9kZWNvZGUoZ2V0X3ByZWYoJHZhcl9kYXRhKSkp IDogZ2V0X3ByZWYoJHZhcl9kYXRhKTsNCgl9IGVsc2Ugew0KCQlpZiAoKHN0cnBvcygkZGF0 YSwgJ2h0dHA6JykgPT09IDApIHx8IChzdHJwb3MoJGRhdGEsICdodHRwczonKSA9PT0gMCkp IHsNCgkJCS8vIFRoZSBkYXRhIGlzIHRvIGJlIGZldGNoZWQgZnJvbSBhIFVSTA0KCQkJaWYg KCEkdHJhbnNwb3J0KSB7DQoJCQkJaWYoIGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSApDQoJ CQkJCSR0cmFuc3BvcnQgPSAnZnNvY2snOw0KCQkJCWVsc2VpZiggaXNfY2FsbGFibGUoJ2N1 cmxfaW5pdCcpICkgew0KCQkJCQkkdHJhbnNwb3J0ID0gJ2N1cmwnOw0KCQkJCX0gZWxzZSB7 DQoJCQkJCSR0cmFuc3BvcnQgPSAnJzsNCgkJCQl9DQoJCQl9DQoNCgkJCXN3aXRjaCAoJHRy YW5zcG9ydCkgew0KCQkJCWNhc2UgJ2N1cmwnOg0KCQkJCQkkYyA9IGN1cmxfaW5pdCgpOw0K CQkJCQljdXJsX3NldG9wdCgkYywgQ1VSTE9QVF9VUkwsICRkYXRhKTsNCgkJCQkJY3VybF9z ZXRvcHQoJGMsIENVUkxPUFRfUkVGRVJFUiwgaHUpOw0KCQkJCQljdXJsX3NldG9wdCgkYywg Q1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoJCQkJCWN1cmxfc2V0b3B0KCRjLCBD VVJMT1BUX1ZFUkJPU0UsIGZhbHNlKTsNCgkJCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRf VElNRU9VVCwgMTApOw0KCQkJCQkkc3JjID0gY3VybF9leGVjKCRjKTsNCgkJCQkJYnJlYWs7 DQoJCQkJY2FzZSAnZnNvY2snOg0KCQkJCQkkdXJsID0gcGFyc2VfdXJsKCRkYXRhKTsNCgkJ CQkJc3dpdGNoICgkdXJsWydzY2hlbWUnXSkgew0KCQkJCQkJY2FzZSAnaHR0cHMnOg0KCQkJ CQkJCSR1cmxbJ3NjaGVtZSddID0gJ3NzbDovLyc7DQoJCQkJCQkJJHVybFsncG9ydCddID0g NDQzOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAnaHR0cCc6DQoJCQkJCQlkZWZhdWx0 Og0KCQkJCQkJCSR1cmxbJ3NjaGVtZSddID0gJyc7DQoJCQkJCQkJJHVybFsncG9ydCddID0g ODA7DQoJCQkJCX0NCgkJCQkJJGZwID0gZnNvY2tvcGVuICgkdXJsWydzY2hlbWUnXSAuICR1 cmxbJ2hvc3QnXSwgJHVybFsncG9ydCddLCAkZXJybm8sICRlcnJzdHIsIDEwKTsNCg0KCQkJ CQkkcXJ5ID0gJ0dFVCAnLiR1cmxbJ3BhdGgnXSAuICgoaXNzZXQoJHVybFsncXVlcnknXSkp ID8gJz8nLiR1cmxbJ3F1ZXJ5J106ICcnKTsNCgkJCQkJJHFyeSAuPSAiIEhUVFAvMS4wXHJc biI7DQoJCQkJCSRxcnkgLj0gIkhvc3Q6ICIuJHVybFsnaG9zdCddLiJcclxuIjsNCgkJCQkJ JHFyeSAuPSAiVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3Mg TlQgNS4xOyBlbi1HQjsgcnY6MS45LjEuNikgR2Vja28vMjAwOTEyMDEgRmlyZWZveC8zLjUu NlxyXG5cclxuIjsgLy8gKnNocnVnKg0KDQoJCQkJCWZwdXRzKCRmcCwgJHFyeSk7DQoJCQkJ CXN0cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsNCgkJCQkJJGluZm8gPSBzdHJlYW1fZ2V0 X21ldGFfZGF0YSgkZnApOw0KDQoJCQkJCSRoZHJzID0gdHJ1ZTsNCgkJCQkJd2hpbGUgKCgh ZmVvZigkZnApKSAmJiAoISRpbmZvWyd0aW1lZF9vdXQnXSkpIHsNCgkJCQkJCSRsaW5lID0g ZmdldHMoJGZwLCAkbGluZV9sZW5ndGgpOw0KCQkJCQkJJGxpbmUgPSBwcmVnX3JlcGxhY2Uo IltcclxuXSIsICIiLCAkbGluZSk7DQoJCQkJCQlpZiAoJGhkcnMgPT0gZmFsc2UpIHsNCgkJ CQkJCQkkc3JjIC49ICRsaW5lLiJcbiI7DQoJCQkJCQl9DQoJCQkJCQlpZiAoc3RybGVuKCRs aW5lKSA9PSAwKSAkaGRycyA9IGZhbHNlOw0KCQkJCQl9DQoJCQkJCWlmICgkaW5mb1sndGlt ZWRfb3V0J10pIHsNCgkJCQkJCSRzcmMgPSAnJzsNCgkJCQkJfQ0KCQkJCQlmY2xvc2UoJGZw KTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJHNyYyA9ICcnOw0KCQkJfQ0K CQl9IGVsc2UgIHsNCgkJCS8vIEFzc3VtZSBkYXRhIGlzIHByZXNlbnRlZCBpbiByYXcgWE1M DQoJCQkkc3JjID0gJGRhdGE7DQoJCX0NCgl9DQoNCgkvLyBTdG9yZSB0aGUgY3VycmVudCBk b2N1bWVudCBpbiB0aGUgY2FjaGUgYW5kIGRhdGVzdGFtcCBpdA0KCWlmICgkY2FjaGVfdGlt ZSA+IDAgJiYgISRyZWFkX2NhY2hlKSB7DQoJCWlmICgkZGVidWcgPiAxKSB7DQoJCQlkbXAo JysrIERBVEEgQ0FDSEVEIHRvICcuJHZhcl9kYXRhLicgKysnKTsNCgkJfQ0KCQkkc3JjaW5m byA9ICRjcnVzaCA/IGJhc2U2NF9lbmNvZGUoZ3pjb21wcmVzcygkc3JjKSkgOiBkb1NsYXNo KCRzcmMpOw0KCQlzZXRfcHJlZigkdmFyX2xhc3Rtb2QsIHRpbWUoKSwgJ3NtZF94bWwnLCBQ UkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJc2V0X3ByZWYoJHZhcl9kYXRhLCAkc3Jj aW5mbywgJ3NtZF94bWwnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgl9DQoNCgkv LyBNYWtlIHVwIGEgcmVwbGFjZW1lbnQgYXJyYXkgZm9yIGRlY29kZWQgZW50aXRpZXMuLi4N CgkkY29udmVyc2lvbnMgPSBhcnJheSgpOw0KCSRjb252ZXJ0ID0gZG9fbGlzdCgkY29udmVy dCwgJGRlbGltKTsNCglmb3JlYWNoICgkY29udmVydCBhcyAkcGFpcikgew0KCQlpZiAoZW1w dHkoJHBhaXIpKSBjb250aW51ZTsNCg0KCQkkcGFpciA9IGRvX2xpc3QoJHBhaXIsICRwYXJh bV9kZWxpbSk7DQoJCSRjb252ZXJzaW9uc1skcGFpclswXV0gPSAkcGFpclsxXTsNCgl9DQoN CglpZiAoJGRlYnVnID4gMSkgew0KCQllY2hvICIrKyBDT05WRVJTSU9OUyArKyI7DQoJCWRt cCgkY29udmVyc2lvbnMpOw0KCX0NCg0KCS8vIC4uLiBhbmQgcmVwbGFjZSB0aGVtDQoJJHNy YyA9IHN0cnRyKCRzcmMsICRjb252ZXJzaW9ucyk7DQoNCglpZiAoJGRlYnVnID4gMikgew0K CQllY2hvICIrKyBGSUxURVJFRCBTT1VSQ0UgREFUQSArKyI7DQoJCWRtcCgkc3JjKTsNCgl9 DQoNCgkvLyBTZXQgdXAgYW55IGRlZmF1bHRzDQoJJGRlZmF1bHRzID0gZG9fbGlzdCgkZGVm YXVsdHMsICRkZWxpbSk7DQoJJGRmbHRzID0gYXJyYXkoKTsNCglmb3JlYWNoICgkZGVmYXVs dHMgYXMgJGRmbHQpIHsNCgkJaWYgKCRkZmx0ID09ICcnKSBjb250aW51ZTsNCgkJJHBhcnRz ID0gZXhwbG9kZSgkcGFyYW1fZGVsaW0sICRkZmx0KTsNCgkJJGRmbHRzWyRwYXJ0c1swXV0g PSAkcGFydHNbMV07DQoJfQ0KCSRkZWZhdWx0cyA9ICRkZmx0czsNCg0KCS8vIFNldCB1cCBh bnkgZm9ybWF0dGluZw0KCSRmb3JtYXQgPSBkb19saXN0KCRmb3JtYXQsICRkZWxpbSk7DQoJ JGZvcm1hdHMgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRmb3JtYXQgYXMgJGZybWRlZikgew0K CQlpZiAoJGZybWRlZiA9PSAnJykgY29udGludWU7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJHBh cmFtX2RlbGltLCAkZnJtZGVmKTsNCgkJJGZvcm1hdHNbJ3R5cGUnXVskcGFydHNbMF1dID0g JHBhcnRzWzFdOw0KCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkcGFydHMpLTI7ICRp ZHgrKykgew0KCQkJJGZvcm1hdHNbJ2RhdGEnXVskcGFydHNbMF1dW10gPSAkcGFydHNbJGlk eCsyXTsNCgkJfQ0KCX0NCg0KCWlmICgkZGVidWcgPiAxKSB7DQoJCWlmICgkZGVmYXVsdHMp IHsNCgkJCWVjaG8gIisrIERFRkFVTFRTICsrIjsNCgkJCWRtcCgkZGVmYXVsdHMpOw0KCQl9 DQoJCWlmICgkZm9ybWF0cykgew0KCQkJZWNobyAiKysgRk9STUFUUyArKyI7DQoJCQlkbXAo JGZvcm1hdHMpOw0KCQl9DQoJfQ0KDQoJaWYgKCFlbXB0eSgkc3JjKSkgew0KCQkvLyBQYWdp bmcgaW5mb3JtYXRpb24NCgkJJHJvd2luZm9bJ251bXJlY3MnXSA9IHN1YnN0cl9jb3VudCgk c3JjLCAnPCcuJHJlY29yZC4nPicpOw0KCQkkcm93aW5mb1sncGFnZV9yb3djbnQnXSA9IDA7 DQoJCSRyb3dpbmZvWydsaW1pdCddID0gKCRsaW1pdCA8ICRyb3dpbmZvWydudW1yZWNzJ10p ID8gJGxpbWl0IDogMDsNCgkJaWYgKCRvZmZzZXQgPj0gMCkgew0KCQkJaWYgKCRvZmZzZXQg PCAkcm93aW5mb1snbnVtcmVjcyddKSB7DQoJCQkJJHJvd2luZm9bJ29mZnNldCddID0gJG9m ZnNldDsNCgkJCX0gZWxzZSB7DQoJCQkJJHJvd2luZm9bJ29mZnNldCddID0gJHJvd2luZm9b J251bXJlY3MnXTsNCgkJCQkkcm93aW5mb1snbGltaXQnXSA9IDA7DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQkkbmVnb2ZmID0gJHJvd2luZm9bJ251bXJlY3MnXSArICRvZmZzZXQ7DQoJCQlp ZiAoJG5lZ29mZiA+IDApIHsNCgkJCQkkcm93aW5mb1snb2Zmc2V0J10gPSAkbmVnb2ZmOw0K CQkJfSBlbHNlIHsNCgkJCQkkcm93aW5mb1snb2Zmc2V0J10gPSAwOw0KCQkJCSRyb3dpbmZv WydsaW1pdCddID0gJHJvd2luZm9bJ251bXJlY3MnXTsNCgkJCX0NCgkJfQ0KDQoJCS8vIFJl LWFzc2lnbiB0aGUgYXR0cyBpbiBjYXNlIHRoZXkndmUgYmVlbiBjaGFuZ2VkIGJ5IHJlYWNo aW5nIHRoZSBib3VuZHMgb2YgdGhlIGRvY3VtZW50DQoJCSRvZmZzZXQgPSAkcm93aW5mb1sn b2Zmc2V0J107DQoJCSRsaW1pdCA9ICRyb3dpbmZvWydsaW1pdCddOw0KDQoJCWlmICgkbGlt aXQgPiAwKSB7DQoJCQkka2VlcHNhZmUgPSAkdGhpc3BhZ2U7DQoJCQkkcm93aW5mb1sndG90 YWwnXSA9ICRyb3dpbmZvWydudW1yZWNzJ10gLSAkb2Zmc2V0Ow0KCQkJJHJvd2luZm9bJ251 bVBhZ2VzJ10gPSBjZWlsKCRyb3dpbmZvWyd0b3RhbCddIC8gJGxpbWl0KTsNCgkJCSRyb3dp bmZvWydwZyddID0gKCFncHMoJHBhZ2V2YXIpKSA/IDEgOiBncHMoJHBhZ2V2YXIpOw0KCQkJ JHJvd2luZm9bJ3Bnb2Zmc2V0J10gPSAkb2Zmc2V0ICsgKCgkcm93aW5mb1sncGcnXSAtIDEp ICogJGxpbWl0KTsNCgkJCSRyb3dpbmZvWydwcmV2cGcnXSA9ICgoJHJvd2luZm9bJ3BnJ10t MSkgPiAwKSA/ICRyb3dpbmZvWydwZyddLTEgOiAnJzsNCgkJCSRyb3dpbmZvWyduZXh0cGcn XSA9ICgoJHJvd2luZm9bJ3BnJ10rMSkgPD0gJHJvd2luZm9bJ251bVBhZ2VzJ10pID8gJHJv d2luZm9bJ3BnJ10rMSA6ICcnOw0KCQkJJHJvd2luZm9bJ3BhZ2Vyb3dzJ10gPSAoJHJvd2lu Zm9bJ3BnJ10gPT0gJHJvd2luZm9bJ251bVBhZ2VzJ10pID8gJHJvd2luZm9bJ3RvdGFsJ10t KCRsaW1pdCAqICgkcm93aW5mb1snbnVtUGFnZXMnXS0xKSkgOiAkbGltaXQ7DQoJCQkkcm93 aW5mb1sndW5pcXVlX2lkJ10gPSAkdW5pcTsNCg0KCQkJLy8gc2VuZCBwYWdpbmcgaW5mbyB0 byB0eHA6bmV3ZXIgYW5kIHR4cDpvbGRlcg0KCQkJJHBhZ2VvdXRbJ3BnJ10gPSAkcm93aW5m b1sncGcnXTsNCgkJCSRwYWdlb3V0WydudW1QYWdlcyddID0gJHJvd2luZm9bJ251bVBhZ2Vz J107DQoJCQkkcGFnZW91dFsncyddID0gJHByZXRleHRbJ3MnXTsNCgkJCSRwYWdlb3V0Wydj J10gPSAkcHJldGV4dFsnYyddOw0KCQkJJHBhZ2VvdXRbJ2dyYW5kX3RvdGFsJ10gPSAkcm93 aW5mb1snbnVtcmVjcyddOw0KCQkJJHBhZ2VvdXRbJ3RvdGFsJ10gPSAkcm93aW5mb1sndG90 YWwnXTsNCgkJCSR0aGlzcGFnZSA9ICRwYWdlb3V0Ow0KCQl9IGVsc2Ugew0KCQkJJHJvd2lu Zm9bJ3Bnb2Zmc2V0J10gPSAkb2Zmc2V0Ow0KCQl9DQoNCgkJJHJvd2luZm9bJ3J1bm5pbmdf cm93Y250J10gPSAkcm93aW5mb1sncGdvZmZzZXQnXS0kb2Zmc2V0Ow0KCQkkcm93aW5mb1sn Zmlyc3RfcmVjJ10gPSAkcm93aW5mb1sncnVubmluZ19yb3djbnQnXSArIDE7DQoJCSRyb3dp bmZvWydsYXN0X3JlYyddID0gKCRsaW1pdCA+IDApID8gJHJvd2luZm9bJ2ZpcnN0X3JlYydd ICsgJHJvd2luZm9bJ3BhZ2Vyb3dzJ10gLSAxIDogJHJvd2luZm9bJ251bXJlY3MnXTsNCgkJ aWYgKCRsaW1pdCA+IDApIHsNCgkJCSRyb3dpbmZvWydwcmV2X3Jvd3MnXSA9ICgoJHJvd2lu Zm9bJ3ByZXZwZyddKSA/ICRsaW1pdCA6IDApOw0KCQkJJHJvd2luZm9bJ25leHRfcm93cydd ID0gKCgkcm93aW5mb1snbmV4dHBnJ10pID8gKCgkcm93aW5mb1snbGFzdF9yZWMnXSskbGlt aXQrMSkgPiAkcm93aW5mb1sndG90YWwnXSA/ICRyb3dpbmZvWyd0b3RhbCddLSRyb3dpbmZv WydsYXN0X3JlYyddIDogJGxpbWl0KSA6IDApOw0KCQl9DQoNCgkJaWYgKCRkZWJ1ZyA+IDAp IHsNCgkJCWVjaG8gJysrIFBBR0lORyBJTkZPICsrJzsNCgkJCWRtcCgkcm93aW5mbyk7DQoJ CX0NCg0KCQkvLyBEbyB0aGUgZGlydHkgWE1MIGRlZWQNCgkJJHJlZiA9IG5ldyBzbWRfeG1s X3BhcnNlcigkc3JjLCAkZmllbGRzLCAkcmVjb3JkLCAkc2tpcCwgJHVwcGVyY2FzZSwgJHRh cmdldF9lbmMsICRsaW5raWZ5LCAkZGVmYXVsdHMsICRzZXRfZW1wdHksICRmb3JtYXRzLCAk dGhpbmcsICRkZWxpbSwgJHBhcmFtX2RlbGltLCAkY29uY2F0LCAkY29uY2F0X2RlbGltLCAk cm93aW5mbywgJGRlYnVnKTsNCgkJJHJlc3VsdCA9ICRyZWYtPmdldFJlc3VsdHMoKTsNCg0K CQkvLyBDcmVhdGUgdGhlIHBhZ2UgZm9ybQ0KCQkkcGFnZWJsb2NrID0gJyc7DQoJCSRmaW5h bG91dCA9ICRyZXBhZ2VtZW50cyA9IGFycmF5KCk7DQoNCgkJaWYgKCRyb3dpbmZvWydsaW1p dCddID4gMCkgew0KCQkJJHJlcGFnZW1lbnRzWyd7c21kX3htbF90b3RhbHJlY3N9J10gPSAk cm93aW5mb1sndG90YWwnXTsNCgkJCSRyZXBhZ2VtZW50c1sne3NtZF94bWxfcGFnZXJlY3N9 J10gPSAkcm93aW5mb1sncGFnZXJvd3MnXTsNCgkJCSRyZXBhZ2VtZW50c1sne3NtZF94bWxf cGFnZXN9J10gPSAkcm93aW5mb1snbnVtUGFnZXMnXTsNCgkJCSRyZXBhZ2VtZW50c1sne3Nt ZF94bWxfcHJldnBhZ2V9J10gPSAkcm93aW5mb1sncHJldnBnJ107DQoJCQkkcmVwYWdlbWVu dHNbJ3tzbWRfeG1sX3RoaXNwYWdlfSddID0gJHJvd2luZm9bJ3BnJ107DQoJCQkkcmVwYWdl bWVudHNbJ3tzbWRfeG1sX25leHRwYWdlfSddID0gJHJvd2luZm9bJ25leHRwZyddOw0KCQkJ JHJlcGFnZW1lbnRzWyd7c21kX3htbF9yZWNfc3RhcnR9J10gPSAkcm93aW5mb1snZmlyc3Rf cmVjJ107DQoJCQkkcmVwYWdlbWVudHNbJ3tzbWRfeG1sX3JlY19lbmR9J10gPSAkcm93aW5m b1snbGFzdF9yZWMnXTsNCgkJCSRyZXBhZ2VtZW50c1sne3NtZF94bWxfcmVjc19wcmV2fSdd ID0gJHJvd2luZm9bJ3ByZXZfcm93cyddOw0KCQkJJHJlcGFnZW1lbnRzWyd7c21kX3htbF9y ZWNzX25leHR9J10gPSAkcm93aW5mb1snbmV4dF9yb3dzJ107DQoJCQkkcmVwYWdlbWVudHNb J3tzbWRfeG1sX3VuaXF1ZV9pZH0nXSA9ICRyb3dpbmZvWyd1bmlxdWVfaWQnXTsNCgkJCSRz bWRfeG1sX3BnaW5mbyA9ICRyZXBhZ2VtZW50czsNCgkJCSRwYWdlYmxvY2sgPSBwYXJzZShz dHJ0cigkcGFnZWZvcm0sICRyZXBhZ2VtZW50cykpOw0KCQl9DQoNCgkJLy8gTWFrZSB1cCB0 aGUgZmluYWwgb3V0cHV0DQoJCWlmIChpbl9hcnJheSgiYWJvdmUiLCAkcGFnZWJpdCkpIHsN CgkJCSRmaW5hbG91dFtdID0gJHBhZ2VibG9jazsNCgkJfQ0KCQkkZmluYWxvdXRbXSA9IGRv V3JhcCgkcmVzdWx0LCAkd3JhcHRhZywgJGJyZWFrLCAkY2xhc3MpOw0KCQlpZiAoaW5fYXJy YXkoImJlbG93IiwgJHBhZ2ViaXQpKSB7DQoJCQkkZmluYWxvdXRbXSA9ICRwYWdlYmxvY2s7 DQoJCX0NCg0KCQkvLyBSZXN0b3JlIHRoZSBwYWdpbmcgb3V0c2lkZSB0aGUgcGx1Z2luIGNv bnRhaW5lcg0KCQlpZiAoJGxpbWl0ID4gMCkgew0KCQkJJHRoaXNwYWdlID0gJGtlZXBzYWZl Ow0KCQl9DQoNCgkJcmV0dXJuIGpvaW4oJycsICRmaW5hbG91dCk7DQoJfSBlbHNlIHsNCgkJ cmV0dXJuICcnOw0KCX0NCn0NCg0KY2xhc3Mgc21kX3htbF9wYXJzZXIgew0KCXByaXZhdGUg JGRhdGE7DQoJcHJpdmF0ZSAkZmllbGRzOw0KCXByaXZhdGUgJHJlYzsNCglwcml2YXRlICRz a2lwOw0KCXByaXZhdGUgJGNmOw0KCXByaXZhdGUgJG91dGVuYzsNCglwcml2YXRlICRsaW5r aWZ5Ow0KCXByaXZhdGUgJGRlZmF1bHRzOw0KCXByaXZhdGUgJHNldF9lbXB0eTsNCglwcml2 YXRlICRmb3JtYXRzOw0KDQoJcHJpdmF0ZSAkaW50YWc7DQoJcHJpdmF0ZSAkaW5kYXRhOw0K CXByaXZhdGUgJHNraXB0YWc7DQoJcHJpdmF0ZSAkeG1sdGFnOw0KCXByaXZhdGUgJHhtbGF0 dHM7DQoJcHJpdmF0ZSAkeG1sZGF0YTsNCglwcml2YXRlICR0aGluZzsNCglwcml2YXRlICRv dXQ7DQoJcHJpdmF0ZSAkcGRlbGltOw0KCXByaXZhdGUgJGNkZWxpbTsNCglwcml2YXRlICRj b25jYXQ7DQoJcHJpdmF0ZSAkcm93aW5mbzsNCglwcml2YXRlICRzaG93X3JlY29yZDsNCglw cml2YXRlICRkZWJ1ZzsNCg0KCS8qKg0KCSogY29uc3RydWN0b3INCgkqLw0KCWZ1bmN0aW9u IHNtZF94bWxfcGFyc2VyKCRkYXRhLCAkZmllbGRzLCAkcmVjLCAkc2tpcCwgJGNmLCAkb3V0 ZW5jLCAkbGlua2lmeSwgJGRlZmF1bHRzLCAkc2V0X2VtcHR5LCAkZm9ybWF0cywgJHRoaW5n LCAkZGVsaW0sICRwZGVsaW0sICRjb25jYXQsICRjZGVsaW0sICRyaW5mbywgJGRlYnVnPTAp IHsNCgkJJHRoaXMtPmRhdGEgPSAkZGF0YTsNCgkJJHRoaXMtPmZpZWxkcyA9IGRvX2xpc3Qo JGZpZWxkcywgJGRlbGltKTsNCgkJJHRoaXMtPnN1YmZpZWxkcyA9IGFycmF5KCk7DQoJCSR0 aGlzLT5za2lwID0gZG9fbGlzdCgkc2tpcCwgJGRlbGltKTsNCgkJJHRoaXMtPnJlYyA9ICRy ZWM7DQoJCSR0aGlzLT5jZiA9ICRjZjsgLy8gQ2FzZSBmb2xkaW5nDQoJCSR0aGlzLT5vdXRl bmMgPSAkb3V0ZW5jOyAvLyBUYXJnZXQgZW5jb2RpbmcNCgkJJHRoaXMtPmxpbmtpZnkgPSBk b19saXN0KCRsaW5raWZ5LCAkZGVsaW0pOw0KCQkkdGhpcy0+ZGVmYXVsdHMgPSAkZGVmYXVs dHM7DQoJCSR0aGlzLT5zZXRfZW1wdHkgPSAkc2V0X2VtcHR5Ow0KCQkkdGhpcy0+Zm9ybWF0 cyA9ICRmb3JtYXRzOw0KCQkkdGhpcy0+dGhpbmcgPSAkdGhpbmc7DQoJCSR0aGlzLT5wZGVs aW0gPSAkcGRlbGltOw0KCQkkdGhpcy0+Y2RlbGltID0gJGNkZWxpbTsNCgkJJHRoaXMtPmNv bmNhdCA9ICRjb25jYXQ7DQoJCSR0aGlzLT5yb3dpbmZvID0gJHJpbmZvOw0KCQkkdGhpcy0+ ZGVidWcgPSAkZGVidWc7DQoNCgkJJHRoaXMtPmludGFnID0gZmFsc2U7DQoJCSR0aGlzLT5l eGlzdHMgPSBmYWxzZTsNCgkJJHRoaXMtPnNraXB0YWcgPSAnJzsNCgkJJHRoaXMtPnhtbHRh ZyA9ICcnOw0KCQkkdGhpcy0+eG1sdGF0dHMgPSAnJzsNCgkJJHRoaXMtPnhtbGRhdGEgPSBh cnJheSgpOw0KCQkkdGhpcy0+b3V0ID0gYXJyYXkoKTsNCg0KCQkvLyBDb3B5IGFueSBzdWJm aWVsZHMgb3V0IG9mIHRoZSBsaXN0DQoJCWZvcmVhY2ggKCR0aGlzLT5maWVsZHMgYXMgJGtl eSA9PiAkZmxkKSB7DQoJCQkkc2YgPSBkb19saXN0KCRmbGQsICRwZGVsaW0pOw0KCQkJZm9y KCRpZHggPSAxOyAkaWR4IDwgY291bnQoJHNmKTsgJGlkeCsrKSB7DQoJCQkJJHRoaXMtPnN1 YmZpZWxkc1skc2ZbMF1dW10gPSAkc2ZbJGlkeF07DQoJCQl9DQoJCQkkdGhpcy0+ZmllbGRz WyRrZXldID0gJHNmWzBdOyAvLyBNYWtlIHN1cmUgdGhlIGZpZWxkIG9ubHkgaG9sZHMgdGhl IHplcm90aCBlbnRyeQ0KCQl9DQoJCSR0aGlzLT5wYXJzZSgpOw0KCX0NCg0KCXB1YmxpYyBm dW5jdGlvbiBnZXRSZXN1bHRzKCkgew0KCQlpZiAoJHRoaXMtPm91dCkgew0KCQkJcmV0dXJu ICR0aGlzLT5vdXQ7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0NCgl9DQoNCglw cml2YXRlIGZ1bmN0aW9uIHBhcnNlKCkgew0KCQkkdGhpcy0+ZGF0YSA9IHByZWdfcmVwbGFj ZSgiLz4iLiJbWzpzcGFjZTpdXSsiLiI8L2kiLCAiPjwiLCAkdGhpcy0+ZGF0YSk7IC8vIEtp bGwgd2hpdGVzcGFjZSBpbiBkYXRhDQoJCSR4bWxwYXJzZXIgPSB4bWxfcGFyc2VyX2NyZWF0 ZSgpOw0KCQl4bWxfc2V0X29iamVjdCgkeG1scGFyc2VyLCAkdGhpcyk7DQoJCXhtbF9wYXJz ZXJfc2V0X29wdGlvbigkeG1scGFyc2VyLCBYTUxfT1BUSU9OX0NBU0VfRk9MRElORywgJHRo aXMtPmNmKTsNCgkJeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCR4bWxwYXJzZXIsIFhNTF9PUFRJ T05fVEFSR0VUX0VOQ09ESU5HLCAkdGhpcy0+b3V0ZW5jKTsNCgkJeG1sX3NldF9lbGVtZW50 X2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF94bWxfc3RhcnRfdGFnIiwgInNtZF94bWxfZW5k X3RhZyIpOw0KCQl4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHhtbHBhcnNlciwg InNtZF94bWxfdGFnX2NvbnRlbnRzIik7DQoJCXhtbF9wYXJzZSgkeG1scGFyc2VyLCAkdGhp cy0+ZGF0YSk7DQoJCXhtbF9wYXJzZXJfZnJlZSgkeG1scGFyc2VyKTsNCgl9DQoNCglwcml2 YXRlIGZ1bmN0aW9uIHNtZF94bWxfc3RhcnRfdGFnKCRwYXJzZXIsICRuYW1lLCAkYXR0cmli cykgew0KCQkkcGd2YWwgPSAkdGhpcy0+cm93aW5mb1sncGdvZmZzZXQnXSAtIDE7DQoJCSRs aW0gPSAkdGhpcy0+cm93aW5mb1snbGltaXQnXSA+IDA7DQoJCSR0aGlzLT5zaG93X3JlY29y ZCA9ICRsaW0gPyAoKCR0aGlzLT5yb3dpbmZvWydwYWdlX3Jvd2NudCddID4gJHBndmFsKSAm JiAoJHRoaXMtPnJvd2luZm9bJ3BhZ2Vfcm93Y250J10gPD0gJHBndmFsICsgJHRoaXMtPnJv d2luZm9bJ3BhZ2Vyb3dzJ10pKSA6ICR0aGlzLT5yb3dpbmZvWydwYWdlX3Jvd2NudCddID4g JHBndmFsOw0KDQoJCWlmICgkbmFtZSA9PSAkdGhpcy0+cmVjICYmICR0aGlzLT5zaG93X3Jl Y29yZCkgew0KCQkJJHRoaXMtPmludGFnID0gdHJ1ZTsNCgkJfQ0KCQlpZiAoJHRoaXMtPmlu dGFnKSB7DQoJCQlpZiAoaW5fYXJyYXkoJG5hbWUsICR0aGlzLT5za2lwKSkgew0KCQkJCSR0 aGlzLT54bWx0YWcgPSAnJzsNCgkJCQkkdGhpcy0+eG1sYXR0cyA9IGFycmF5KCk7DQoJCQkJ JHRoaXMtPnNraXB0YWcgPSAkbmFtZTsNCgkJCX0gZWxzZSB7DQoJCQkJJHRoaXMtPnhtbHRh ZyA9ICRuYW1lOw0KCQkJCSR0aGlzLT54bWxhdHRzID0gJGF0dHJpYnM7DQoJCQkJaWYgKCR0 aGlzLT5jb25jYXQgJiYgaXNzZXQoJHRoaXMtPnhtbGRhdGFbJ3snLiR0aGlzLT54bWx0YWcu J30nXSkpIHsNCgkJCQkJJHRoaXMtPmV4aXN0cyA9IHRydWU7DQogICAgICAgIAkgfSBlbHNl IHsNCgkJCQkJJHRoaXMtPmV4aXN0cyA9IGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkk dGhpcy0+aW5kYXRhID0gZmFsc2U7DQoJfQ0KDQoJcHJpdmF0ZSBmdW5jdGlvbiBzbWRfeG1s X2VuZF90YWcoJHBhcnNlciwgJG5hbWUpIHsNCgkJaWYgKCRuYW1lID09ICR0aGlzLT5yZWMg JiYgJG5hbWUgIT0gJHRoaXMtPnNraXB0YWcpIHsNCgkJCSR0aGlzLT5pbnRhZyA9IGZhbHNl Ow0KCQkJJGxpbSA9ICgkdGhpcy0+cm93aW5mb1snbGltaXQnXSA+IDApID8gdHJ1ZSA6IGZh bHNlOw0KDQoJCQkvLyBBcHBlbmQgcm93IGNvdW50ZXIgaW5mb3JtYXRpb24NCgkJCSR0aGlz LT54bWxkYXRhWyd7c21kX3htbF90b3RhbHJlY3N9J10gPSAkbGltID8gJHRoaXMtPnJvd2lu Zm9bJ3RvdGFsJ10gOiAkdGhpcy0+cm93aW5mb1snbnVtcmVjcyddIC0gJHRoaXMtPnJvd2lu Zm9bJ3Bnb2Zmc2V0J107DQoJCQkkdGhpcy0+eG1sZGF0YVsne3NtZF94bWxfcGFnZXJlY3N9 J10gPSAkbGltID8gJHRoaXMtPnJvd2luZm9bJ3BhZ2Vyb3dzJ10gOiAkdGhpcy0+eG1sZGF0 YVsne3NtZF94bWxfdG90YWxyZWNzfSddOw0KCQkJJHRoaXMtPnhtbGRhdGFbJ3tzbWRfeG1s X3BhZ2VzfSddID0gJGxpbSA/ICR0aGlzLT5yb3dpbmZvWydudW1QYWdlcyddIDogMTsNCgkJ CSR0aGlzLT54bWxkYXRhWyd7c21kX3htbF90aGlzcGFnZX0nXSA9ICRsaW0gPyAkdGhpcy0+ cm93aW5mb1sncGcnXSA6IDE7DQoJCQkkdGhpcy0+eG1sZGF0YVsne3NtZF94bWxfdGhpc2lu ZGV4fSddID0gJHRoaXMtPnJvd2luZm9bJ3BhZ2Vfcm93Y250J10gLSAkdGhpcy0+cm93aW5m b1snb2Zmc2V0J107DQoJCQkkdGhpcy0+eG1sZGF0YVsne3NtZF94bWxfdGhpc3JlY30nXSA9 ICR0aGlzLT5yb3dpbmZvWydwYWdlX3Jvd2NudCddIC0gJHRoaXMtPnJvd2luZm9bJ29mZnNl dCddICsgMTsNCgkJCSR0aGlzLT54bWxkYXRhWyd7c21kX3htbF9ydW5pbmRleH0nXSA9ICR0 aGlzLT5yb3dpbmZvWydydW5uaW5nX3Jvd2NudCddOw0KCQkJJHRoaXMtPnhtbGRhdGFbJ3tz bWRfeG1sX3J1bnJlY30nXSA9ICR0aGlzLT5yb3dpbmZvWydydW5uaW5nX3Jvd2NudCddICsg MTsNCg0KCQkJLy8gU2V0IGFueSB0YWcgY29udGVudHMgdG8gYSBkZWZhdWx0IHZhbHVlLCBp ZiBzcGVjaWZpZWQNCgkJCWlmICgkdGhpcy0+ZGVmYXVsdHMpIHsNCgkJCQlmb3JlYWNoICgk dGhpcy0+ZmllbGRzIGFzICRmaWVsZCkgew0KCQkJCQkkZmxpc3QgPSBhcnJheSgkZmllbGQp Ow0KCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkZmllbGQsICR0aGlzLT5zdWJmaWVsZHMp KSB7DQoJCQkJCQkkZmxpc3QgPSBhcnJheV9tZXJnZSgkZmxpc3QsICR0aGlzLT5zdWJmaWVs ZHNbJGZpZWxkXSk7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaCAoJGZsaXN0IGFzICRzZmllbGQp IHsNCgkJCQkJCWlmICghaXNzZXQoJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSkp IHsNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2ZpZWxkLCAkdGhpcy0+ZGVmYXVs dHMpKSB7DQoJCQkJCQkJCSR0aGlzLT54bWxkYXRhWyd7Jy4kc2ZpZWxkLid9J10gPSAkdGhp cy0+ZGVmYXVsdHNbJHNmaWVsZF07DQoJCQkJCQkJfSBlbHNlIGlmICgkdGhpcy0+c2V0X2Vt cHR5KSB7DQoJCQkJCQkJCSR0aGlzLT54bWxkYXRhWyd7Jy4kc2ZpZWxkLid9J10gPSAnJzsN CgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFJlZm9y bWF0IGFueSBmaWVsZHMsIGlmIHNwZWNpZmllZA0KCQkJaWYgKCR0aGlzLT5mb3JtYXRzKSB7 DQoJCQkJZm9yZWFjaCAoJHRoaXMtPmZpZWxkcyBhcyAkZmllbGQpIHsNCgkJCQkJJGZsaXN0 ID0gYXJyYXkoJGZpZWxkKTsNCgkJCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJGZpZWxkLCAk dGhpcy0+c3ViZmllbGRzKSkgew0KCQkJCQkJJGZsaXN0ID0gYXJyYXlfbWVyZ2UoJGZsaXN0 LCAkdGhpcy0+c3ViZmllbGRzWyRmaWVsZF0pOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2ggKCRm bGlzdCBhcyAkc2ZpZWxkKSB7DQoJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPnhtbGRhdGFbJ3sn LiRzZmllbGQuJ30nXSkgJiYgYXJyYXlfa2V5X2V4aXN0cygkc2ZpZWxkLCAkdGhpcy0+Zm9y bWF0c1sndHlwZSddKSkgew0KCQkJCQkJCXN3aXRjaCAoJHRoaXMtPmZvcm1hdHNbJ3R5cGUn XVskc2ZpZWxkXSkgew0KCQkJCQkJCQljYXNlICdkYXRlJzoNCgkJCQkJCQkJCSRuZCA9IHN0 cnRvdGltZSgkdGhpcy0+eG1sZGF0YVsneycuJHNmaWVsZC4nfSddKTsNCgkJCQkJCQkJCWlm ICgkbmQgIT09IGZhbHNlKSB7DQoJCQkJCQkJCQkJJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmll bGQuJ30nXSA9IHN0cmZ0aW1lKCR0aGlzLT5mb3JtYXRzWydkYXRhJ11bJHNmaWVsZF1bMF0s ICRuZCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlicmVhazsNCgkJCQkJCQkJY2FzZSAnbGlu ayc6DQoJCQkJCQkJCQkvLyBGcm9tIGh0dHA6Ly9jb2Rlc25pcHBldHMuam95ZW50LmNvbS9w b3N0cy9zaG93LzIxMDQNCgkJCQkJCQkJCSRwYXQgPSAiQFxiKGh0dHBzPzovLyk/KChbMC05 YS16QS1aXyF+KicoKS4mPSskJS1dKzopP1swLTlhLXpBLVpfIX4qJygpLiY9KyQlLV0rXEAp PygoWzAtOV17MSwzfVwuKXszfVswLTldezEsM318KFswLTlhLXpBLVpfIX4qJygpLV0rXC4p KihbMC05YS16QS1aXVswLTlhLXpBLVotXXswLDYxfSk/WzAtOWEtekEtWl1cLlthLXpBLVpd ezIsNn0pKDpbMC05XXsxLDR9KT8oKC9bMC05YS16QS1aXyF+KicoKS47PzpcQCY9KyQsJSMt XSspKi8/KUAiOw0KCQkJCQkJCQkJJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSA9 IHByZWdfcmVwbGFjZSgkcGF0LCAnPGEgaHJlZj0iXDAiPlwwPC9hPicsICR0aGlzLT54bWxk YXRhWyd7Jy4kc2ZpZWxkLid9J10pOw0KCQkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJCWNhc2Ug J2VzY2FwZSc6DQoJCQkJCQkJCQkkdGhpcy0+eG1sZGF0YVsneycuJHNmaWVsZC4nfSddID0g ZG9TbGFzaCgkdGhpcy0+eG1sZGF0YVsneycuJHNmaWVsZC4nfSddKTsNCgkJCQkJCQkJCWJy ZWFrOw0KCQkJCQkJCQljYXNlICdzYW5pdGl6ZSc6DQoJCQkJCQkJCQlpZiAoJHRoaXMtPmZv cm1hdHNbJ2RhdGEnXVskc2ZpZWxkXVswXSA9PSAidXJsIikgew0KCQkJCQkJCQkJCSR0aGlz LT54bWxkYXRhWyd7Jy4kc2ZpZWxkLid9J10gPSBzYW5pdGl6ZUZvclVybCgkdGhpcy0+eG1s ZGF0YVsneycuJHNmaWVsZC4nfSddKTsNCgkJCQkJCQkJCX0gZWxzZSBpZiAoJHRoaXMtPmZv cm1hdHNbJ2RhdGEnXVskc2ZpZWxkXVswXSA9PSAiZmlsZSIpIHsNCgkJCQkJCQkJCQkkdGhp cy0+eG1sZGF0YVsneycuJHNmaWVsZC4nfSddID0gc2FuaXRpemVGb3JGaWxlKCR0aGlzLT54 bWxkYXRhWyd7Jy4kc2ZpZWxkLid9J10pOw0KCQkJCQkJCQkJfSBlbHNlIGlmICgkdGhpcy0+ Zm9ybWF0c1snZGF0YSddWyRzZmllbGRdWzBdID09ICJ1cmxfdGl0bGUiKSB7DQoJCQkJCQkJ CQkJJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSA9IHN0cmlwU3BhY2UoJHRoaXMt PnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSwgMSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQli cmVhazsNCgkJCQkJCQkJY2FzZSAnY2FzZSc6DQoJCQkJCQkJCQlmb3IgKCRpZHggPSAwOyAk aWR4IDwgY291bnQoJHRoaXMtPmZvcm1hdHNbJ2RhdGEnXVskc2ZpZWxkXSk7ICRpZHgrKykg ew0KCQkJCQkJCQkJCWlmICgkdGhpcy0+Zm9ybWF0c1snZGF0YSddWyRzZmllbGRdWyRpZHhd ID09ICJ1cHBlciIpIHsNCgkJCQkJCQkJCQkJJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQu J30nXSA9IHN0cnRvdXBwZXIoJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSk7DQoJ CQkJCQkJCQkJfSBlbHNlIGlmICgkdGhpcy0+Zm9ybWF0c1snZGF0YSddWyRzZmllbGRdWyRp ZHhdID09ICJsb3dlciIpIHsNCgkJCQkJCQkJCQkJJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmll bGQuJ30nXSA9IHN0cnRvbG93ZXIoJHRoaXMtPnhtbGRhdGFbJ3snLiRzZmllbGQuJ30nXSk7 DQoJCQkJCQkJCQkJfSBlbHNlIGlmICgkdGhpcy0+Zm9ybWF0c1snZGF0YSddWyRzZmllbGRd WyRpZHhdID09ICJ1Y2ZpcnN0Iikgew0KCQkJCQkJCQkJCQkkdGhpcy0+eG1sZGF0YVsneycu JHNmaWVsZC4nfSddID0gdWNmaXJzdCgkdGhpcy0+eG1sZGF0YVsneycuJHNmaWVsZC4nfSdd KTsNCgkJCQkJCQkJCQl9IGVsc2UgaWYgKCR0aGlzLT5mb3JtYXRzWydkYXRhJ11bJHNmaWVs ZF1bJGlkeF0gPT0gInVjd29yZHMiKSB7DQoJCQkJCQkJCQkJCSR0aGlzLT54bWxkYXRhWyd7 Jy4kc2ZpZWxkLid9J10gPSB1Y3dvcmRzKCR0aGlzLT54bWxkYXRhWyd7Jy4kc2ZpZWxkLid9 J10pOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWJyZWFrOw0KCQkJCQkJ CX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKCR0aGlzLT5kZWJ1 ZyA+IDApIHsNCgkJCQllY2hvICIrKyBSRVBMQUNFTUVOVFMgKysiOw0KCQkJCWRtcCgkdGhp cy0+eG1sZGF0YSk7DQoJCQl9DQoNCgkJCWlmICgkdGhpcy0+c2hvd19yZWNvcmQpIHsNCgkJ CQkkdGhpcy0+b3V0W10gPSBwYXJzZShzdHJ0cigkdGhpcy0+dGhpbmcsICR0aGlzLT54bWxk YXRhKSk7DQoJCQl9DQoNCgkJCS8vIFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uDQoJCQkk dGhpcy0+cm93aW5mb1sncnVubmluZ19yb3djbnQnXSA9ICR0aGlzLT5yb3dpbmZvWydydW5u aW5nX3Jvd2NudCddKzE7DQoJCQkkdGhpcy0+cm93aW5mb1sncGFnZV9yb3djbnQnXSA9ICR0 aGlzLT5yb3dpbmZvWydwYWdlX3Jvd2NudCddKzE7DQoJCQkkdGhpcy0+eG1sZGF0YSA9IGFy cmF5KCk7DQoJCQkkdGhpcy0+aW5kYXRhID0gZmFsc2U7DQoJCX0NCgkJaWYgKCRuYW1lID09 ICR0aGlzLT5za2lwdGFnKSB7DQoJCQkkdGhpcy0+c2tpcHRhZyA9ICcnOw0KCQl9DQoJfQ0K DQoJcHJpdmF0ZSBmdW5jdGlvbiBzbWRfeG1sX3RhZ19jb250ZW50cygkcGFyc2VyLCAkZGF0 YSkgew0KCQlpZiAoJHRoaXMtPmludGFnICYmICEkdGhpcy0+c2tpcHRhZykgew0KCQkJaWYg KCR0aGlzLT5kZWJ1ZyA+IDEpIHsNCgkJCQlkbXAoJHRoaXMtPnhtbHRhZyAuICIgOiAiLiAk ZGF0YSk7DQoJCQl9DQoJCQlpZiAoaW5fYXJyYXkoJHRoaXMtPnhtbHRhZywgJHRoaXMtPmZp ZWxkcykpIHsNCgkJCQkvLyBUTyBSRU1PVkUNCgkJCQlpZiAoaW5fYXJyYXkoJHRoaXMtPnht bHRhZywgJHRoaXMtPmxpbmtpZnkpKSB7DQoJCQkJCSRkYXRhID0gcHJlZ19yZXBsYWNlKCdA KGh0dHBzPzovLyhbLVx3XC5dKykrKDpcZCspPygvKFtcdy9fXC5dKihcP1xTKyk/KT8pPylA JywgJzxhIGhyZWY9IiQxIj4kMTwvYT4nLCAkZGF0YSk7DQoJCQkJfQ0KCQkJCS8vIEVORDog VE8gUkVNT1ZFDQoJCQkJaWYgKCR0aGlzLT5pbmRhdGEpIHsNCgkJCQkJaWYgKCR0aGlzLT5l eGlzdHMpIHsNCgkJCQkJCSR0aGlzLT54bWxkYXRhWyd7Jy4kdGhpcy0+eG1sdGFnLid9J10g Lj0gJHRoaXMtPmNkZWxpbS4kZGF0YTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSR0aGlzLT54 bWxkYXRhWyd7Jy4kdGhpcy0+eG1sdGFnLid9J10gLj0gJGRhdGE7DQoJCQkJCX0NCgkJCQl9 IGVsc2Ugew0KCQkJCQlpZiAoJHRoaXMtPmV4aXN0cykgew0KCQkJCQkJJHRoaXMtPnhtbGRh dGFbJ3snLiR0aGlzLT54bWx0YWcuJ30nXSAuPSAkdGhpcy0+Y2RlbGltLiRkYXRhOw0KCQkJ CQl9IGVsc2Ugew0KCQkJCQkJJHRoaXMtPnhtbGRhdGFbJ3snLiR0aGlzLT54bWx0YWcuJ30n XSA9ICRkYXRhOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gQ29weSB0aGUgdGFnIHRvIGFu eSBkdXBsaWNhdGUgbm9kZXMNCgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkdGhpcy0+eG1s dGFnLCAkdGhpcy0+c3ViZmllbGRzKSkgew0KCQkJCQlmb3JlYWNoKCR0aGlzLT5zdWJmaWVs ZHNbJHRoaXMtPnhtbHRhZ10gYXMgJGNvcHlmaWVsZCkgew0KCQkJCQkJJHRoaXMtPnhtbGRh dGFbJ3snLiRjb3B5ZmllbGQuJ30nXSA9ICR0aGlzLT54bWxkYXRhWyd7Jy4kdGhpcy0+eG1s dGFnLid9J107DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkvLyBDcmVhdGUgYW55IGF0dHJpYnV0 ZSBub2Rlcw0KCQkJCWlmICgkdGhpcy0+eG1sYXR0cykgew0KCQkJCQlmb3JlYWNoICgkdGhp cy0+eG1sYXR0cyBhcyAkeGtleSA9PiAkeHZhbCkgew0KCQkJCQkJJHRoaXMtPnhtbGRhdGFb J3snLiR0aGlzLT54bWx0YWcuJHRoaXMtPnBkZWxpbS4keGtleS4nfSddID0gJHh2YWw7DQoJ CQkJCX0NCgkJCQl9DQoJCQkJJHRoaXMtPmluZGF0YSA9IHRydWU7DQoJCQl9DQoJCX0NCgl9 DQp9DQoNCi8vIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBjaGVjayBpZiB0aGVyZSdzIGEg cHJldi9uZXh0IHBhZ2UgZGVmaW5lZC4gQ291bGQgYWxzbyB1c2Ugc21kX2lmDQpmdW5jdGlv biBzbWRfeG1sX2lmX3ByZXYoJGF0dHMsICR0aGluZykgew0KCWdsb2JhbCAkc21kX3htbF9w Z2luZm87DQoNCgkkcmVzID0gJHNtZF94bWxfcGdpbmZvICYmICRzbWRfeG1sX3BnaW5mb1sn e3NtZF94bWxfcHJldnBhZ2V9J10gIT0gJyc7DQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKHN0 cnRyKCR0aGluZywgJHNtZF94bWxfcGdpbmZvKSwgJHJlcykpOw0KfQ0KZnVuY3Rpb24gc21k X3htbF9pZl9uZXh0KCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF94bWxfcGdpbmZv Ow0KDQoJJHJlcyA9ICRzbWRfeG1sX3BnaW5mbyAmJiAkc21kX3htbF9wZ2luZm9bJ3tzbWRf eG1sX25leHRwYWdlfSddICE9ICcnOw0KCXJldHVybiBwYXJzZShFdmFsRWxzZShzdHJ0cigk dGhpbmcsICRzbWRfeG1sX3BnaW5mbyksICRyZXMpKTsNCn0iO3M6NDoidHlwZSI7czoxOiIw IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NToib3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6 MzI6IjM4MzU0NzFhMzE4NWEyM2FjMjcyYTg3MjdjMjRiYmY0Ijt9