Files
odoo-addons/addons/cetmix_tower_server/models/cx_tower_vault_mixin.py

1 line
20 KiB
Python

ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gb2RvbyBpbXBvcnQgYXBpLCBtb2RlbHMKCgpjbGFzcyBDeFRvd2VyVmF1bHRNaXhpbihtb2RlbHMuQWJzdHJhY3RNb2RlbCk6CiAgICAiIiJNaXhpbiBmb3IgdmF1bHQgZnVuY3Rpb25hbGl0eS4KCiAgICBUaGlzIG1peGluIHByb3ZpZGVzIG1ldGhvZHMgdG8gc2VjdXJlbHkgc3RvcmUgYW5kIHJldHJpZXZlIHNlbnNpdGl2ZSBkYXRhCiAgICBpbiB0aGUgdmF1bHQuIEluaGVyaXRpbmcgbW9kZWxzIG11c3QgZGVmaW5lIFNFQ1JFVF9GSUVMRFMgbGlzdCB3aXRoIGZpZWxkCiAgICBuYW1lcyB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZhdWx0LgogICAgIiIiCgogICAgX25hbWUgPSAiY3gudG93ZXIudmF1bHQubWl4aW4iCiAgICBfZGVzY3JpcHRpb24gPSAiQ2V0bWl4IFRvd2VyIFZhdWx0IE1peGluIgoKICAgIFNFQ1JFVF9WQUxVRV9QTEFDRUhPTERFUiA9ICIqKioqKiIKICAgIFNFQ1JFVF9GSUVMRFMgPSBbXQoKICAgIGRlZiBfcmVhZChzZWxmLCBmaWVsZHMpOiAgIyBweWxpbnQ6IGRpc2FibGU9bWlzc2luZy1yZXR1cm4gIyBkb2Vzbid0IHJldHVybiBhbnl0aGluZwogICAgICAgICIiIlN1YnN0aXR1dGUgZmllbGRzIGJhc2VkIG9uIGFwaS4KCiAgICAgICAgVGhpcyBtZXRob2QgcmVwbGFjZXMgdmFsdWVzIG9mIHNlY3JldCBmaWVsZHMgd2l0aCBhIHBsYWNlaG9sZGVyIHZhbHVlCiAgICAgICAgd2hlbiB0aGV5IGFyZSByZWFkIGZyb20gdGhlIGRhdGFiYXNlLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBmaWVsZHMgKGxpc3QpOiBMaXN0IG9mIGZpZWxkcyB0byByZWFkCiAgICAgICAgIiIiCiAgICAgICAgc3VwZXIoKS5fcmVhZChmaWVsZHMpCgogICAgICAgIHNob3dfYWxsID0gbm90IGZpZWxkcwogICAgICAgIHNlY3JldF9maWVsZHMgPSAoCiAgICAgICAgICAgIHNlbGYuU0VDUkVUX0ZJRUxEUwogICAgICAgICAgICBpZiBzaG93X2FsbAogICAgICAgICAgICBlbHNlIFtmIGZvciBmIGluIHNlbGYuU0VDUkVUX0ZJRUxEUyBpZiBmIGluIGZpZWxkc10KICAgICAgICApCgogICAgICAgIGZvciByZWNvcmQgaW4gc2VsZjoKICAgICAgICAgICAgZm9yIHNlY3JldF9maWVsZCBpbiBzZWNyZXRfZmllbGRzOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHJlY29yZC5fY2FjaGVbc2VjcmV0X2ZpZWxkXSA9IHNlbGYuU0VDUkVUX1ZBTFVFX1BMQUNFSE9MREVSCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOiAgIyBweWxpbnQ6IGRpc2FibGU9ZXhjZXB0LXBhc3MKICAgICAgICAgICAgICAgICAgICAjIHNraXAgU3BlY2lhbFZhbHVlCiAgICAgICAgICAgICAgICAgICAgIyAoZS5nLiBmb3IgbWlzc2luZyByZWNvcmQgb3IgYWNjZXNzIHJpZ2h0KQogICAgICAgICAgICAgICAgICAgIHBhc3MKCiAgICBAYXBpLm1vZGVsX2NyZWF0ZV9tdWx0aQogICAgZGVmIGNyZWF0ZShzZWxmLCB2YWxzX2xpc3QpOgogICAgICAgICIiIk92ZXJyaWRlIGNyZWF0ZSB0byBoYW5kbGUgc2VjcmV0IHZhbHVlcyBzZWN1cmVseS4KCiAgICAgICAgRXh0cmFjdHMgc2VjcmV0IGZpZWxkcywgc3RvcmVzIHRoZW0gaW4gdmF1bHQsIGFuZCBwcmV2ZW50cwogICAgICAgIGFjdHVhbCBzZWNyZXQgdmFsdWVzIGZyb20gYmVpbmcgc2F2ZWQgaW4gdGhlIG1haW4gdGFibGUuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIHZhbHNfbGlzdCAobGlzdCk6IExpc3Qgb2YgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgZmllbGQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJlY29yZCBjcmVhdGlvbgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICByZWNvcmRzZXQ6IENyZWF0ZWQgcmVjb3JkcyB3aXRoIHNlY3JldCB2YWx1ZXMgc3RvcmVkIGluIHZhdWx0CgogICAgICAgIE5vdGU6CiAgICAgICAgICAgIFNlY3JldCBmaWVsZHMgYXJlIGF1dG9tYXRpY2FsbHkgcHJvY2Vzc2VkIGFuZCBzdG9yZWQgc2VjdXJlbHkuCiAgICAgICAgICAgIFRoZSBtYWluIGRhdGFiYXNlIHRhYmxlIG5ldmVyIGNvbnRhaW5zIGFjdHVhbCBzZWNyZXQgdmFsdWVzLgogICAgICAgICIiIgoKICAgICAgICAjIFN0ZXAgMTogRXh0cmFjdCBzZWNyZXQgZmllbGRzIGFuZCBnZW5lcmF0ZSB0ZW1wb3JhcnkgSURzCiAgICAgICAgc2VjcmV0X3ZhbHMgPSBzZWxmLl9leHRyYWN0X2FuZF9yZXBsYWNlX3NlY3JldF9maWVsZHModmFsc19saXN0KQoKICAgICAgICAjIFN0ZXAgMjogQ3JlYXRlIHJlY29yZHMgd2l0aCBiYXRjaCBvcGVyYXRpb24KICAgICAgICByZWNvcmRzID0gc3VwZXIoKS5jcmVhdGUodmFsc19saXN0KQoKICAgICAgICAjIFN0ZXAgMzogVXBkYXRlIHZhdWx0IHJlY29yZHMgd2l0aCByZWFsIElEcwogICAgICAgIGlmIHNlY3JldF92YWxzOgogICAgICAgICAgICBzZWxmLl9wcm9jZXNzX3NlY3JldF92YWx1ZXNfYWZ0ZXJfY3JlYXRpb24ocmVjb3Jkcywgc2VjcmV0X3ZhbHMpCgogICAgICAgIHJldHVybiByZWNvcmRzCgogICAgZGVmIHdyaXRlKHNlbGYsIHZhbHMpOgogICAgICAgICIiIk92ZXJyaWRlIHdyaXRlIHRvIGhhbmRsZSBzZWNyZXQgZmllbGRzLgoKICAgICAgICBFeHRyYWN0cyBzZWNyZXQgZmllbGQgdmFsdWVzIGZyb20gdmFscyBkaWN0aW9uYXJ5IGFuZCBzdG9yZXMgdGhlbSBzZWN1cmVseQogICAgICAgIGluIHRoZSB2YXVsdCBpbnN0ZWFkIG9mIHRoZSBtYWluIGRhdGFiYXNlIHRhYmxlLiBUaGUgcmVtYWluaW5nIG5vbi1zZWNyZXQKICAgICAgICBmaWVsZHMgYXJlIHByb2Nlc3NlZCBieSB0aGUgc3RhbmRhcmQgd3JpdGUgbWV0aG9kLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICB2YWxzIChkaWN0KTogRGljdGlvbmFyeSBvZiBmaWVsZCB2YWx1ZXMgdG8gd3JpdGUgdG8gcmVjb3JkcwoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBib29sOiBSZXN1bHQgb2YgdGhlIHBhcmVudCB3cml0ZSBvcGVyYXRpb24KCiAgICAgICAgTm90ZToKICAgICAgICAgICAgU2VjcmV0IGZpZWxkcyBkZWZpbmVkIGluIFNFQ1JFVF9GSUVMRFMgYXJlIGF1dG9tYXRpY2FsbHkgaW50ZXJjZXB0ZWQKICAgICAgICAgICAgYW5kIHN0b3JlZCBpbiB2YXVsdC4gQ2FjaGUgaXMgaW52YWxpZGF0ZWQgZm9yIGFsbCBzZWNyZXQgZmllbGRzIHdoZW4KICAgICAgICAgICAgYW55IHNlY3JldCBmaWVsZCBpcyBtb2RpZmllZC4KICAgICAgICAiIiIKICAgICAgICAjIEV4dHJhY3Qgc2VjcmV0IGZpZWxkcwogICAgICAgIHNlY3JldF92YWx1ZXMgPSB7fQogICAgICAgIGZvciBzZWNyZXRfZmllbGQgaW4gc2VsZi5TRUNSRVRfRklFTERTOgogICAgICAgICAgICBpZiBzZWNyZXRfZmllbGQgaW4gdmFsczoKICAgICAgICAgICAgICAgIHNlY3JldF92YWx1ZXNbc2VjcmV0X2ZpZWxkXSA9IHZhbHMucG9wKHNlY3JldF9maWVsZCkKCiAgICAgICAgcmVzID0gc3VwZXIoKS53cml0ZSh2YWxzKQoKICAgICAgICBpZiBzZWNyZXRfdmFsdWVzOgogICAgICAgICAgICBzZWxmLl9zZXRfc2VjcmV0X3ZhbHVlcyhzZWNyZXRfdmFsdWVzKQogICAgICAgICAgICAjIEludmFsaWRhdGUgY2FjaGUgZm9yIGFsbCBzZWNyZXQgZmllbGRzCiAgICAgICAgICAgIHNlbGYuaW52YWxpZGF0ZV9yZWNvcmRzZXQoc2VsZi5TRUNSRVRfRklFTERTKQoKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIHVubGluayhzZWxmKToKICAgICAgICAiIiJPdmVycmlkZSB1bmxpbmsgdG8gZGVsZXRlIHZhdWx0IHJlY29yZHMuCgogICAgICAgIEF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhbGwgYXNzb2NpYXRlZCB2YXVsdCByZWNvcmRzIGFmdGVyIGRlbGV0aW5nCiAgICAgICAgdGhlIG1haW4gcmVjb3JkcyB0byBwcmV2ZW50IG9ycGhhbmVkIHNlY3JldCBkYXRhIGluIHRoZSB2YXVsdC4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgYm9vbDogUmVzdWx0IG9mIHRoZSBwYXJlbnQgdW5saW5rIG9wZXJhdGlvbgoKICAgICAgICBOb3RlOgogICAgICAgICAgICBWYXVsdCBjbGVhbnVwIGlzIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5IGFuZCBjYW5ub3QgYmUgYnlwYXNzZWQuCiAgICAgICAgIiIiCiAgICAgICAgaWRzID0gc2VsZi5pZHMKCiAgICAgICAgcmVzID0gc3VwZXIoKS51bmxpbmsoKQoKICAgICAgICAjIEZpbmQgYWxsIHZhdWx0IHJlY29yZHMgZm9yIHRoZXNlIHJlY29yZHMKICAgICAgICB2YXVsdF9yZWNvcmRzID0gKAogICAgICAgICAgICBzZWxmLmVudlsiY3gudG93ZXIudmF1bHQiXQogICAgICAgICAgICAuc3VkbygpCiAgICAgICAgICAgIC5zZWFyY2goWygicmVzX21vZGVsIiwgIj0iLCBzZWxmLl9uYW1lKSwgKCJyZXNfaWQiLCAiaW4iLCBpZHMpXSkKICAgICAgICApCgogICAgICAgICMgRGVsZXRlIHZhdWx0IHJlY29yZHMKICAgICAgICBpZiB2YXVsdF9yZWNvcmRzOgogICAgICAgICAgICB2YXVsdF9yZWNvcmRzLnN1ZG8oKS51bmxpbmsoKQoKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIF9nZXRfc2VjcmV0X3ZhbHVlKHNlbGYsIGZpZWxkX25hbWUpOgogICAgICAgICIiIlJldHJpZXZlcyB0aGUgYWN0dWFsIHNlY3JldCB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBmaWVsZCBmb3IgYSBzaW5nbGUgcmVjb3JkLgoKICAgICAgICBUaGlzIG1ldGhvZCBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSByZWFsIHNlY3JldCBmaWVsZCB2YWx1ZSBiZWNhdXNlOgogICAgICAgIC0gRGlyZWN0IGZpZWxkIGFjY2VzcyAoZS5nLiwgc2VsZi5zZWNyZXRfZmllbGQpCiAgICAgICAgICByZXR1cm5zIHBsYWNlaG9sZGVyIGR1ZSB0byBfcmVhZCgpIG92ZXJyaWRlCiAgICAgICAgLSBUaGUgYWN0dWFsIGZpZWxkIGluIHRoZSBtYWluIHRhYmxlIGlzIGVtcHR5L05VTEwKICAgICAgICAgIGFzIHZhbHVlcyBhcmUgc3RvcmVkIGluIHZhdWx0CgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGZpZWxkX25hbWUgKHN0cik6IE5hbWUgb2YgdGhlIHNlY3JldCBmaWVsZCB0byByZXRyaWV2ZQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBzdHIgb3IgTm9uZTogVGhlIGFjdHVhbCBzZWNyZXQgdmFsdWUsIG9yIE5vbmUgaWYgbm90IGZvdW5kIG9yIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBpbiBTRUNSRVRfRklFTERTCgogICAgICAgIE5vdGU6CiAgICAgICAgICAgIFRoaXMgbWV0aG9kIGJ5cGFzc2VzIE9kb28ncyBPUk0gZmllbGQgYWNjZXNzIHRvIGF2b2lkIGdldHRpbmcKICAgICAgICAgICAgcGxhY2Vob2xkZXIgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIF9yZWFkKCkgbWV0aG9kLgogICAgICAgICIiIgoKICAgICAgICBzZWxmLmVuc3VyZV9vbmUoKQoKICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NlY3JldF92YWx1ZXMoW2ZpZWxkX25hbWVdKS5nZXQoc2VsZi5pZCwge30pLmdldChmaWVsZF9uYW1lKQoKICAgIGRlZiBfZ2V0X3NlY3JldF92YWx1ZXMoc2VsZiwgZmllbGRzX2xpc3Q9Tm9uZSk6CiAgICAgICAgIiIiUmV0cmlldmUgc2VjcmV0IHZhbHVlcyBmcm9tIHRoZSB2YXVsdCBmb3Igc3BlY2lmaWVkIGZpZWxkcy4KCiAgICAgICAgVGhpcyBtZXRob2QgZmV0Y2hlcyBzZWNyZXQgdmFsdWVzIHN0b3JlZCBpbiB0aGUgdmF1bHQgZm9yIGFsbCByZWNvcmRzCiAgICAgICAgaW4gdGhlIGN1cnJlbnQgcmVjb3Jkc2V0IGFuZCBzcGVjaWZpZWQgZmllbGRzIChvciBhbGwgU0VDUkVUX0ZJRUxEUykuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGZpZWxkc19saXN0IChsaXN0LCBvcHRpb25hbCk6IExpc3Qgb2YgZmllbGQgbmFtZXMgdG8gcmV0cmlldmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBhbGwgU0VDUkVUX0ZJRUxEUy4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgZGljdDogRGljdGlvbmFyeSBtYXBwaW5nIHJlY29yZCBJRHMgdG8gdGhlaXIgc2VjcmV0IGZpZWxkIHZhbHVlcy4KICAgICAgICAgICAgICAgICAgU3RydWN0dXJlOiB7cmVzX2lkOiB7ZmllbGRfbmFtZTogc2VjcmV0X3ZhbHVlfX0KCiAgICAgICAgICAgICAgICAgIEV4YW1wbGU6CiAgICAgICAgICAgICAgICAgIHsxOiB7J3NzaF9wYXNzd29yZCc6ICdzZWNyZXQxMjMnLCAnaG9zdF9rZXknOiAna2V5NDU2J30sCiAgICAgICAgICAgICAgICAgICAyOiB7J3NzaF9wYXNzd29yZCc6ICdzZWNyZXQ3ODknfX0KCiAgICAgICAgTm90ZToKICAgICAgICAgICAgVGhpcyBtZXRob2Qgc2VhcmNoZXMgdmF1bHQgcmVjb3JkcyB1c2luZyBzdGFuZGFyZCBkb21haW4gZmlsdGVyaW5nCiAgICAgICAgICAgIGJ5IHJlc19pZCwgYW5kIGZpZWxkX25hbWUgZm9yIHJlbGlhYmxlIHJlY29yZCBtYXRjaGluZy4KICAgICAgICAgICAgSWYgYSByZWNvcmQgaGFzIG5vIHNlY3JldCB2YWx1ZXMgdGhpcyByZWNvcmQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHQuCiAgICAgICAgIiIiCiAgICAgICAgIyBJZiBubyByZWNvcmRzLCByZXR1cm4gZW1wdHkgZGljdAogICAgICAgIGlmIG5vdCBzZWxmOgogICAgICAgICAgICByZXR1cm4ge30KCiAgICAgICAgIyBQcmVwYXJlIGZpZWxkcyB0byBmZXRjaAogICAgICAgIGZpZWxkc190b19mZXRjaCA9ICgKICAgICAgICAgICAgW2YgZm9yIGYgaW4gZmllbGRzX2xpc3QgaWYgZiBpbiBzZWxmLlNFQ1JFVF9GSUVMRFNdCiAgICAgICAgICAgIGlmIGZpZWxkc19saXN0CiAgICAgICAgICAgIGVsc2Ugc2VsZi5TRUNSRVRfRklFTERTCiAgICAgICAgKQogICAgICAgICMgSWYgbm8gZmllbGRzIHRvIGZldGNoLCByZXR1cm4gZW1wdHkgZGljdAogICAgICAgIGlmIG5vdCBmaWVsZHNfdG9fZmV0Y2g6CiAgICAgICAgICAgIHJldHVybiB7fQoKICAgICAgICAjIFNlYXJjaCB2YXVsdCByZWNvcmRzIGZvciBhbGwgcmVjb3JkcyBhbmQgYWxsIHNlY3JldCBmaWVsZHMKICAgICAgICBkb21haW4gPSBbCiAgICAgICAgICAgICgicmVzX21vZGVsIiwgIj0iLCBzZWxmLl9uYW1lKSwKICAgICAgICAgICAgKCJyZXNfaWQiLCAiaW4iLCBzZWxmLmlkcyksCiAgICAgICAgICAgICgiZmllbGRfbmFtZSIsICJpbiIsIGZpZWxkc190b19mZXRjaCksCiAgICAgICAgXQogICAgICAgIHZhdWx0X3JlY29yZHMgPSAoCiAgICAgICAgICAgIHNlbGYuZW52WyJjeC50b3dlci52YXVsdCJdCiAgICAgICAgICAgIC5zdWRvKCkKICAgICAgICAgICAgLnNlYXJjaF9yZWFkKAogICAgICAgICAgICAgICAgZG9tYWluLAogICAgICAgICAgICAgICAgWyJyZXNfaWQiLCAiZmllbGRfbmFtZSIsICJkYXRhIl0sCiAgICAgICAgICAgICkKICAgICAgICApCiAgICAgICAgcmVzID0gZGVmYXVsdGRpY3QoZGljdCkKICAgICAgICBmb3IgcmVjb3JkIGluIHZhdWx0X3JlY29yZHM6CiAgICAgICAgICAgIHJlc1tyZWNvcmRbInJlc19pZCJdXVtyZWNvcmRbImZpZWxkX25hbWUiXV0gPSByZWNvcmRbImRhdGEiXQoKICAgICAgICByZXR1cm4gZGljdChyZXMpCgogICAgZGVmIF9zZXRfc2VjcmV0X3ZhbHVlcyhzZWxmLCB2YWxzKToKICAgICAgICAiIiJTdG9yZSBzZWNyZXQgdmFsdWVzIGluIHRoZSB2YXVsdC4KCiAgICAgICAgVGhpcyBtZXRob2Qgc3RvcmVzIHNlbnNpdGl2ZSBkYXRhIGluIHRoZSB2YXVsdCBmb3IgYWxsIHJlY29yZHMgaW4gdGhlIHJlY29yZHNldC4KICAgICAgICBJdCBlaXRoZXIgdXBkYXRlcyBleGlzdGluZyB2YXVsdCByZWNvcmRzIG9yIGNyZWF0ZXMgbmV3IG9uZXMgZm9yIGVhY2gKICAgICAgICByZWNvcmQtZmllbGQgcGFpciBpbiB0aGUgdmFscyBkaWN0aW9uYXJ5LgoKICAgICAgICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBpbXBsZW1lbnQgY3VzdG9tIHN0b3JhZ2UgbWVjaGFuaXNtcwogICAgICAgIGZvciBzZWNyZXQgdmFsdWVzLCBzdWNoIGFzIGV4dGVybmFsIGtleSBtYW5hZ2VtZW50IHN5c3RlbXMgb3IKICAgICAgICBlbmNyeXB0aW9uIHNlcnZpY2VzLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICB2YWxzIChkaWN0KTogRGljdGlvbmFyeSBtYXBwaW5nIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHNlY3JldCB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHN0b3JlZCBpbiB0aGUgdmF1bHQgZm9yIGFsbCByZWNvcmRzCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIE5vbmUKICAgICAgICAiIiIKICAgICAgICBpZiBub3QgdmFscyBvciBub3Qgc2VsZjoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICMgR2V0IGFsbCBleGlzdGluZyB2YXVsdCByZWNvcmRzIGluIE9ORSBTUUwgcXVlcnkKICAgICAgICBkb21haW4gPSBbCiAgICAgICAgICAgICgicmVzX21vZGVsIiwgIj0iLCBzZWxmLl9uYW1lKSwKICAgICAgICAgICAgKCJyZXNfaWQiLCAiaW4iLCBzZWxmLmlkcyksCiAgICAgICAgICAgICgiZmllbGRfbmFtZSIsICJpbiIsIGxpc3QodmFscy5rZXlzKCkpKSwKICAgICAgICBdCiAgICAgICAgZXhpc3RpbmdfdmF1bHRfcmVjb3JkcyA9IHNlbGYuZW52WyJjeC50b3dlci52YXVsdCJdLnN1ZG8oKS5zZWFyY2goZG9tYWluKQoKICAgICAgICAjIFByZXBhcmUgZGF0YSBmb3IgYmF0Y2ggb3BlcmF0aW9ucwogICAgICAgIHZhbHNfdG9fdXBkYXRlX3JlY29yZHMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IHNlbGYuZW52WyJjeC50b3dlci52YXVsdCJdKQogICAgICAgIHJlY29yZHNfdG9fdW5saW5rID0gc2VsZi5lbnZbImN4LnRvd2VyLnZhdWx0Il0KICAgICAgICByZWNvcmRzX3RvX2NyZWF0ZSA9IFtdCgogICAgICAgICMgSW5kZXggZXhpc3RpbmcgcmVjb3JkcyBieSAocmVzX2lkLCBmaWVsZF9uYW1lKSBmb3IgTygxKSBsb29rdXBzCiAgICAgICAgZXhpc3RpbmdfbWFwID0geyh2LnJlc19pZCwgdi5maWVsZF9uYW1lKTogdiBmb3IgdiBpbiBleGlzdGluZ192YXVsdF9yZWNvcmRzfQoKICAgICAgICAjIE9ubHkgYWxsb3cga25vd24gc2VjcmV0IGZpZWxkcyB0byBiZSBzZXQKICAgICAgICBhbGxvd2VkX2ZpZWxkcyA9IHNldChzZWxmLlNFQ1JFVF9GSUVMRFMpCgogICAgICAgICMgUHJvY2VzcyBlYWNoIHJlY29yZCBhbmQgZmllbGQgY29tYmluYXRpb24KICAgICAgICBmb3IgcmVjb3JkIGluIHNlbGY6CiAgICAgICAgICAgIGZvciBmaWVsZCwgdmFsdWUgaW4gdmFscy5pdGVtcygpOgogICAgICAgICAgICAgICAgaWYgZmllbGQgbm90IGluIGFsbG93ZWRfZmllbGRzOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAjIEZhc3QgbG9va3VwIGZvciBleGlzdGluZyByZWNvcmQKICAgICAgICAgICAgICAgIGV4aXN0aW5nX3JlY29yZCA9IGV4aXN0aW5nX21hcC5nZXQoKHJlY29yZC5pZCwgZmllbGQpKQogICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfcmVjb3JkOgogICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIEZhbHNlIG9yIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNfdG9fdW5saW5rIHw9IGV4aXN0aW5nX3JlY29yZAogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNfdG9fdXBkYXRlX3JlY29yZHNbdmFsdWVdIHw9IGV4aXN0aW5nX3JlY29yZAoKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgRmFsc2Ugb3IgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc190b19jcmVhdGUuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzX21vZGVsIjogc2VsZi5fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNfaWQiOiByZWNvcmQuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRfbmFtZSI6IGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiOiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgIyBCYXRjaCBvcGVyYXRpb25zCiAgICAgICAgZm9yIHZhbHVlLCByZWNvcmRzIGluIHZhbHNfdG9fdXBkYXRlX3JlY29yZHMuaXRlbXMoKToKICAgICAgICAgICAgcmVjb3Jkcy5zdWRvKCkud3JpdGUoeyJkYXRhIjogdmFsdWV9KQoKICAgICAgICBpZiByZWNvcmRzX3RvX2NyZWF0ZToKICAgICAgICAgICAgc2VsZi5lbnZbImN4LnRvd2VyLnZhdWx0Il0uc3VkbygpLmNyZWF0ZShyZWNvcmRzX3RvX2NyZWF0ZSkKICAgICAgICBpZiByZWNvcmRzX3RvX3VubGluazoKICAgICAgICAgICAgcmVjb3Jkc190b191bmxpbmsuc3VkbygpLnVubGluaygpCgogICAgZGVmIF9leHRyYWN0X2FuZF9yZXBsYWNlX3NlY3JldF9maWVsZHMoc2VsZiwgdmFsc19saXN0KToKICAgICAgICAiIiJFeHRyYWN0IHNlY3JldCBmaWVsZHMgYW5kIHJlcGxhY2Ugd2l0aCB0ZW1wb3JhcnkgaWRlbnRpZmllcnMuCgogICAgICAgIFByb2Nlc3NlcyB2YWx1ZSBkaWN0aW9uYXJpZXMgZm9yIHJlY29yZCBjcmVhdGlvbiwgcmVwbGFjaW5nIHNlY3JldCBmaWVsZCB2YWx1ZXMKICAgICAgICB3aXRoIHVuaXF1ZSB0ZW1wb3JhcnkgaWRlbnRpZmllcnMuIFRoZSBhY3R1YWwgc2VjcmV0IHZhbHVlcyBhcmUgbWFwcGVkIHRvIHRoZXNlCiAgICAgICAgdGVtcG9yYXJ5IGlkZW50aWZpZXJzIGZvciBsYXRlciBzZWN1cmUgc3RvcmFnZSBpbiB0aGUgdmF1bHQgc3lzdGVtLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICB2YWxzX2xpc3QgKGxpc3QpOiBMaXN0IG9mIHZhbHVlIGRpY3Rpb25hcmllcyBmb3IgcmVjb3JkIGNyZWF0aW9uLgoKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICBkaWN0OiBNYXBwaW5nIG9mIHRlbXBvcmFyeSBpZGVudGlmaWVycyB0byBzZWNyZXQgdmFsdWVzLgogICAgICAgICAgICBOb3RlOiB2YWxzX2xpc3QgaXMgbW9kaWZpZWQgaW4tcGxhY2UgdG8gY29udGFpbiB0ZW1wIGlkZW50aWZpZXJzLgoKICAgICAgICBOb3RlOgogICAgICAgICAgICBVc2VkIGR1cmluZyByZWNvcmQgY3JlYXRpb24gYXMgcGFydCBvZiB0aGUgc2VjdXJlIHNlY3JldCBzdG9yYWdlIHdvcmtmbG93LgogICAgICAgICIiIgogICAgICAgIHRlbXBfaWRfY291bnRlciA9IDAKICAgICAgICBzZWNyZXRfdmFscyA9IHt9CgogICAgICAgIGZvciB2YWxzIGluIHZhbHNfbGlzdDoKICAgICAgICAgICAgZm9yIHNlY3JldF9maWVsZCBpbiBzZWxmLlNFQ1JFVF9GSUVMRFM6CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2ZpZWxkIGluIHZhbHMKICAgICAgICAgICAgICAgICAgICBhbmQgdmFsc1tzZWNyZXRfZmllbGRdIGlzIG5vdCBGYWxzZQogICAgICAgICAgICAgICAgICAgIGFuZCB2YWxzW3NlY3JldF9maWVsZF0gaXMgbm90IE5vbmUKICAgICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAgICAgICAgdGVtcF9pZF9jb3VudGVyICs9IDEKICAgICAgICAgICAgICAgICAgICB0ZW1wX2lkZW50aWZpZXIgPSBzdHIodGVtcF9pZF9jb3VudGVyKQogICAgICAgICAgICAgICAgICAgIHNlY3JldF92YWxzW3RlbXBfaWRlbnRpZmllcl0gPSB2YWxzW3NlY3JldF9maWVsZF0KICAgICAgICAgICAgICAgICAgICB2YWxzW3NlY3JldF9maWVsZF0gPSB0ZW1wX2lkZW50aWZpZXIKCiAgICAgICAgcmV0dXJuIHNlY3JldF92YWxzCgogICAgZGVmIF9wcm9jZXNzX3NlY3JldF92YWx1ZXNfYWZ0ZXJfY3JlYXRpb24oc2VsZiwgcmVjb3Jkcywgc2VjcmV0X3ZhbHMpOgogICAgICAgICIiIlByb2Nlc3Mgc2VjcmV0IHZhbHVlcyBhZnRlciByZWNvcmRzIGNyZWF0aW9uLgoKICAgICAgICBSZXBsYWNlcyB0ZW1wb3JhcnkgaWRlbnRpZmllcnMgd2l0aCBhY3R1YWwgc2VjcmV0IHZhbHVlcyBpbiB0aGUgdmF1bHQKICAgICAgICBhbmQgaW52YWxpZGF0ZXMgY2FjaGUgZm9yIGFmZmVjdGVkIGZpZWxkcy4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgcmVjb3JkcyAocmVjb3Jkc2V0KTogTmV3bHkgY3JlYXRlZCByZWNvcmRzIHdpdGggdGVtcG9yYXJ5IGlkZW50aWZpZXJzCiAgICAgICAgICAgIHNlY3JldF92YWxzIChkaWN0KTogTWFwcGluZyBvZiB0ZW1wb3JhcnkgaWRlbnRpZmllcnMgdG8gc2VjcmV0IHZhbHVlcwoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBOb25lCgogICAgICAgIE5vdGU6CiAgICAgICAgICAgIENhbGxlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBjcmVhdGUoKSBwcm9jZXNzLiBTaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuCiAgICAgICAgIiIiCiAgICAgICAgZmllbGRzX3N0ciA9ICIsICIuam9pbihzZWxmLlNFQ1JFVF9GSUVMRFMpCiAgICAgICAgcXVlcnkgPSBmIlNFTEVDVCBpZCwge2ZpZWxkc19zdHJ9IEZST00ge3NlbGYuX3RhYmxlfSBXSEVSRSBpZCBpbiAlcyIKICAgICAgICBzZWxmLmVudi5jci5leGVjdXRlKHF1ZXJ5LCAodHVwbGUocmVjb3Jkcy5pZHMpLCkpCiAgICAgICAgcmVjb3Jkc19kaWN0ID0gc2VsZi5lbnYuY3IuZGljdGZldGNoYWxsKCkKCiAgICAgICAgZm9yIHJlY29yZF9kaWN0IGluIHJlY29yZHNfZGljdDoKICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19zaW5nbGVfcmVjb3JkX3NlY3JldHMocmVjb3JkX2RpY3QsIHNlY3JldF92YWxzKQoKICAgICAgICByZWNvcmRzLl9jbGVhcl90ZW1wX3ZhbHVlcygpCiAgICAgICAgcmVjb3Jkcy5pbnZhbGlkYXRlX3JlY29yZHNldChzZWxmLlNFQ1JFVF9GSUVMRFMpCgogICAgZGVmIF9wcm9jZXNzX3NpbmdsZV9yZWNvcmRfc2VjcmV0cyhzZWxmLCByZWNvcmRfZGljdCwgc2VjcmV0X3ZhbHMpOgogICAgICAgICIiIlByb2Nlc3Mgc2VjcmV0cyBmb3IgYSBzaW5nbGUgcmVjb3JkLgoKICAgICAgICBSZXBsYWNlcyB0ZW1wb3JhcnkgaWRlbnRpZmllcnMgd2l0aCBhY3R1YWwgc2VjcmV0IHZhbHVlcyBmb3Igb25lIHJlY29yZCwKICAgICAgICBjbGVhcnMgdGVtcG9yYXJ5IHZhbHVlcyBmcm9tIG1haW4gdGFibGUgYW5kIHN0b3JlcyBzZWNyZXRzIGluIHZhdWx0LgoKICAgICAgICBBcmdzOgogICAgICAgICAgICByZWNvcmRfZGljdCAoZGljdCk6IERpY3Rpb25hcnkgd2l0aCByZWNvcmQgZGF0YQogICAgICAgICAgICBpbmNsdWRpbmcgdGVtcG9yYXJ5IGlkZW50aWZpZXJzCiAgICAgICAgICAgIHNlY3JldF92YWxzIChkaWN0KTogTWFwcGluZyBvZiB0ZW1wb3JhcnkgaWRlbnRpZmllcnMgdG8gYWN0dWFsIHNlY3JldCB2YWx1ZXMKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgTm9uZQoKICAgICAgICBOb3RlOgogICAgICAgICAgICBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBfcHJvY2Vzc19zZWNyZXRfdmFsdWVzX2FmdGVyX2NyZWF0aW9uLgogICAgICAgICIiIgogICAgICAgIHJlY29yZF9pZCA9IHJlY29yZF9kaWN0LmdldCgiaWQiKQogICAgICAgIHZhdWx0X3ZhbHMgPSB7fQogICAgICAgIGZpZWxkX3RlbXBfaWRfcGFpcnMgPSAoCiAgICAgICAgICAgIChmaWVsZF9uYW1lLCByZWNvcmRfZGljdFtmaWVsZF9uYW1lXSkgZm9yIGZpZWxkX25hbWUgaW4gc2VsZi5TRUNSRVRfRklFTERTCiAgICAgICAgKQoKICAgICAgICAjIENvbGxlY3Qgc2VjcmV0IHZhbHVlcyBhbmQgZmllbGRzIHRvIGNsZWFyCiAgICAgICAgZm9yIGZpZWxkX25hbWUsIHRlbXBfaWRlbnRpZmllciBpbiBmaWVsZF90ZW1wX2lkX3BhaXJzOgogICAgICAgICAgICBzZWNyZXRfdmFsdWUgPSBzZWNyZXRfdmFscy5nZXQodGVtcF9pZGVudGlmaWVyKQogICAgICAgICAgICBpZiBzZWNyZXRfdmFsdWU6CiAgICAgICAgICAgICAgICB2YXVsdF92YWxzW2ZpZWxkX25hbWVdID0gc2VjcmV0X3ZhbHVlCgogICAgICAgICMgVXBkYXRlIGRhdGFiYXNlIGFuZCB2YXVsdCBpZiBuZWVkZWQKICAgICAgICBpZiB2YXVsdF92YWxzOgogICAgICAgICAgICByZWNvcmQgPSBzZWxmLmJyb3dzZShyZWNvcmRfaWQpCiAgICAgICAgICAgIHJlY29yZC5fc2V0X3NlY3JldF92YWx1ZXModmF1bHRfdmFscykKCiAgICBkZWYgX2NsZWFyX3RlbXBfdmFsdWVzKHNlbGYpOgogICAgICAgICIiIkNsZWFyIHRlbXBvcmFyeSB2YWx1ZXMgZnJvbSBtYWluIHRhYmxlLgoKICAgICAgICBTZXRzIGFsbCBTRUNSRVRfRklFTERTIHRvIE5VTEwgaW4gdGhlIGRhdGFiYXNlIHRvIHJlbW92ZSB0ZW1wb3JhcnkKICAgICAgICBpZGVudGlmaWVycyBhZnRlciBzZWNyZXQgdmFsdWVzIGhhdmUgYmVlbiBzdG9yZWQgaW4gdmF1bHQuCiAgICAgICAgV29ya3Mgd2l0aCBtdWx0aXBsZSByZWNvcmRzIGluIHRoZSByZWNvcmRzZXQuCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIE5vbmUKCiAgICAgICAgTm90ZToKICAgICAgICAgICAgSW50ZXJuYWwgbWV0aG9kIHVzZWQgZHVyaW5nIHNlY3JldCBwcm9jZXNzaW5nIHdvcmtmbG93LgogICAgICAgICAgICBDbGVhcnMgYWxsIFNFQ1JFVF9GSUVMRFMgZm9yIGFsbCByZWNvcmRzIGluIHRoZSBjdXJyZW50IHJlY29yZHNldC4KICAgICAgICAiIiIKICAgICAgICBzZXRfY2xhdXNlID0gIiwgIi5qb2luKGYie2ZpZWxkfSA9IE5VTEwiIGZvciBmaWVsZCBpbiBzZWxmLlNFQ1JFVF9GSUVMRFMpCiAgICAgICAgcXVlcnkgPSBmIlVQREFURSB7c2VsZi5fdGFibGV9IFNFVCB7c2V0X2NsYXVzZX0gV0hFUkUgaWQgaW4gJXMiCiAgICAgICAgc2VsZi5lbnYuY3IuZXhlY3V0ZShxdWVyeSwgKHR1cGxlKHNlbGYuaWRzKSwpKQoKICAgIGRlZiBfaXNfc2VjcmV0X3ZhbHVlX3NldChzZWxmLCBmaWVsZF9uYW1lKToKICAgICAgICAiIiIKICAgICAgICBDaGVjayBpZiBhIHNlY3JldCB2YWx1ZSBpcyBzZXQgZm9yIGEgc3BlY2lmaWMgZmllbGQgZm9yIGEgc2luZ2xlIHJlY29yZC4KICAgICAgICBUaGlzIG1ldGhvZCBpcyBwcmVmZXJhYmxlIHRvIF9nZXRfc2VjcmV0X3ZhbHVlIGJlY2F1c2UgaXQgZG9lc24ndCByZXF1aXJlCiAgICAgICAgYmVjYXVzZSBpdCBkb2Vzbid0IGV4cG9zZSB0aGUgc2VjcmV0IHZhbHVlIHRvIHRoZSBjYWxsZXIuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIGZpZWxkX25hbWUgKHN0cik6IE5hbWUgb2YgdGhlIHNlY3JldCBmaWVsZCB0byBjaGVjawoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBib29sOiBUcnVlIGlmIHRoZSBzZWNyZXQgdmFsdWUgaXMgc2V0LCBGYWxzZSBvdGhlcndpc2UKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NlY3JldF92YWx1ZShmaWVsZF9uYW1lKSBpcyBub3QgTm9uZQo=