Catálogo Perfiles de Aluminio
Selecciona un perfil del panel izquierdo
Mi Lista de Accesorios
Catálogo Perfiles de Aluminio
Selecciona un perfil del panel izquierdo
Mi Lista de Accesorios
Ly8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIENBVEFMT0cgREFUQQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKY29uc3QgQ0FUQUxPRyA9IFsKICAvLyDilIDilIAgUkFOVVJBIDYg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgewogICAgaWQ6ICdwMjAyMCcsIGdyb3VwOiAnUmFudXJhIDYnLCBuYW1lOiAnUGVyZmlsIDIwXHUwMEQ3MjAnLCBkZXNjOiAnUGVyZmlsIGVzdHJ1Y3R1cmFsIDIwXHUwMEQ3MjAgbW0gXHUyMDEzIFJhbnVyYSA2JywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC0yMCcsIG5hbWU6J1RhcGEgZmluYWwgMjBcdTAwRDcyMCcgfSx7IGNvZGU6J0NVQi1SNicsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgNicgfSx7IGNvZGU6J0VTUS0yMCcsIG5hbWU6J0VzY3VhZHJhIGRlY29yYXRpdmEgMjBcdTAwRDcyMCcgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi0yMCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgMjBcdTAwRDcyMCcgfSx7IGNvZGU6J0VTQy0yMCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gMjBcdTAwRDcyMCcgfSx7IGNvZGU6J0VTQy1JMjAnLCBuYW1lOidFc2N1YWRyYSBpbnRlcmlvciAyMFx1MDBENzIwJyB9LHsgY29kZTonUExBLTIwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiAyMFx1MDBENzIwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU00JywgbmFtZTonVG9ybmlsbG8gTTRcdTAwRDc4IGNhYmV6YSByZWRvbmRhJyB9LHsgY29kZTonVFVOLU00JywgbmFtZTonVHVlcmNhIG1hcnRpbGxvIE00IHJhbnVyYSA2JyB9LHsgY29kZTonVFVOLVQ0JywgbmFtZTonVHVlcmNhIFQgTTQgcmFudXJhIDYnIH1dLAogICAgICAnT3Ryb3MgQWNjZXNvcmlvcyc6ICAgICAgICAgW3sgY29kZTonUElFLVI2JywgbmFtZTonUGllIG5pdmVsYWRvciBNNiAocmFudXJhIDYpJyB9LHsgY29kZTonUlVFLTIwJywgbmFtZTonUnVlZGEgZ2lyYXRvcmlhIDQwIG1tJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwMjUyNScsIGdyb3VwOiAnUmFudXJhIDYnLCBuYW1lOiAnUGVyZmlsIDI1XHUwMEQ3MjUnLCBkZXNjOiAnUGVyZmlsIGVzdHJ1Y3R1cmFsIDI1XHUwMEQ3MjUgbW0gXHUyMDEzIFJhbnVyYSA2JywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC0yNScsIG5hbWU6J1RhcGEgZmluYWwgMjVcdTAwRDcyNScgfSx7IGNvZGU6J0NVQi1SNicsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgNicgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi0yNScsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgMjVcdTAwRDcyNScgfSx7IGNvZGU6J0VTQy0yNScsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gMjVcdTAwRDcyNScgfSx7IGNvZGU6J1BMQS0yNScsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gMjVcdTAwRDcyNScgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NNCcsIG5hbWU6J1Rvcm5pbGxvIE00XHUwMEQ3OCBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NNCcsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNNCByYW51cmEgNicgfSx7IGNvZGU6J1RVTi1UNCcsIG5hbWU6J1R1ZXJjYSBUIE00IHJhbnVyYSA2JyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1BJRS1SNicsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTYgKHJhbnVyYSA2KScgfV0KICAgIH0KICB9LAogIC8vIOKUgOKUgCBSQU5VUkEgOCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICB7CiAgICBpZDogJ3AzMDMwJywgZ3JvdXA6ICdSYW51cmEgOCcsIG5hbWU6ICdQZXJmaWwgMzBcdTAwRDczMCcsIGRlc2M6ICdQZXJmaWwgZXN0cnVjdHVyYWwgMzBcdTAwRDczMCBtbSBcdTIwMTMgUmFudXJhIDgnLAogICAgYWNjZXNzb3JpZXM6IHsKICAgICAgJ0FjY2Vzb3Jpb3MgRXN0XHUwMEU5dGljb3MnOiAgICAgW3sgY29kZTonVEFQLTMwJywgbmFtZTonVGFwYSBmaW5hbCAzMFx1MDBENzMwJyB9LHsgY29kZTonQ1VCLVI4JywgbmFtZTonQ3VicmV0YXBhIHJhbnVyYSA4JyB9LHsgY29kZTonRVNRLTMwJywgbmFtZTonRXNjdWFkcmEgZGVjb3JhdGl2YSAzMFx1MDBENzMwJyB9XSwKICAgICAgJ0Jpc2FncmFzIC8gQ2VycmFkdXJhcyAvIE1hbmlqYXMnOiBbeyBjb2RlOidCSVMtMzAnLCBuYW1lOidCaXNhZ3JhIGRlIHBsXHUwMEUxc3RpY28gMzAnIH0seyBjb2RlOidCSVMtQUwzMCcsIG5hbWU6J0Jpc2FncmEgZGUgYWx1bWluaW8gMzAnIH1dLAogICAgICAnU2lzdGVtYXMgZGUgVW5pXHUwMEYzbic6ICAgICAgICBbeyBjb2RlOidDT04tMzAnLCBuYW1lOidDb25lY3RvciBhbmd1bGFyIDMwXHUwMEQ3MzAnIH0seyBjb2RlOidFU0MtMzAnLCBuYW1lOidFc2N1YWRyYSBkZSB1bmlcdTAwRjNuIDMwXHUwMEQ3MzAnIH0seyBjb2RlOidFU0MtSTMwJywgbmFtZTonRXNjdWFkcmEgaW50ZXJpb3IgMzBcdTAwRDczMCcgfSx7IGNvZGU6J1BMQS0zMCcsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gMzBcdTAwRDczMCcgfSx7IGNvZGU6J0NPTi1DUjMwJywgbmFtZTonQ29uZWN0b3IgY3J1emFkbyAzMFx1MDBENzMwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU01JywgbmFtZTonVG9ybmlsbG8gTTVcdTAwRDcxMCBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NNScsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNNSByYW51cmEgOCcgfSx7IGNvZGU6J1RVTi1UNScsIG5hbWU6J1R1ZXJjYSBUIE01IHJhbnVyYSA4JyB9XSwKICAgICAgJ0VsZW1lbnRvcyBkZSBQaXNvJzogICAgICAgIFt7IGNvZGU6J1BJRS1SOCcsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTggKHJhbnVyYSA4KScgfSx7IGNvZGU6J1JVRS01MCcsIG5hbWU6J1J1ZWRhIGdpcmF0b3JpYSA1MCBtbScgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidQRVItMzAnLCBuYW1lOidQZXJmaWwganVudGEgMzAnIH0seyBjb2RlOidWSUQtNicsIG5hbWU6J0p1bnRhIHZpZHJpbyA2IG1tJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwMzAzMEwnLCBncm91cDogJ1JhbnVyYSA4JywgbmFtZTogJ1BlcmZpbCAzMFx1MDBENzMwIEwnLCBkZXNjOiAnUGVyZmlsIGxpZ2VybyAzMFx1MDBENzMwIG1tIHRpcG8gTCBcdTIwMTMgUmFudXJhIDgnLAogICAgYWNjZXNzb3JpZXM6IHsKICAgICAgJ0FjY2Vzb3Jpb3MgRXN0XHUwMEU5dGljb3MnOiAgICAgW3sgY29kZTonVEFQLTMwTCcsIG5hbWU6J1RhcGEgZmluYWwgMzBcdTAwRDczMCBMJyB9LHsgY29kZTonQ1VCLVI4JywgbmFtZTonQ3VicmV0YXBhIHJhbnVyYSA4JyB9XSwKICAgICAgJ1Npc3RlbWFzIGRlIFVuaVx1MDBGM24nOiAgICAgICAgW3sgY29kZTonQ09OLTMwJywgbmFtZTonQ29uZWN0b3IgYW5ndWxhciAzMFx1MDBENzMwJyB9LHsgY29kZTonRVNDLTMwJywgbmFtZTonRXNjdWFkcmEgZGUgdW5pXHUwMEYzbiAzMFx1MDBENzMwJyB9LHsgY29kZTonUExBLTMwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiAzMFx1MDBENzMwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU01JywgbmFtZTonVG9ybmlsbG8gTTVcdTAwRDcxMCBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NNScsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNNSByYW51cmEgOCcgfSx7IGNvZGU6J1RVTi1UNScsIG5hbWU6J1R1ZXJjYSBUIE01IHJhbnVyYSA4JyB9LHsgY29kZTonUEVSLUQnLCBuYW1lOidQZXJubyBkZSB1bmlcdTAwRjNuIEQ2JyB9XSwKICAgICAgJ0VsZW1lbnRvcyBkZSBQaXNvJzogICAgICAgIFt7IGNvZGU6J1BJRS1NMTAnLCBuYW1lOidQaWUgbml2ZWxhZG9yIE0xMCcgfSx7IGNvZGU6J1JVRS03NScsIG5hbWU6J1J1ZWRhIGdpcmF0b3JpYSA3NSBtbScgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidWSUQtNicsIG5hbWU6J0p1bnRhIHZpZHJpbyA2IG1tJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwNDA0MCcsIGdyb3VwOiAnUmFudXJhIDgnLCBuYW1lOiAnUGVyZmlsIDQwXHUwMEQ3NDAnLCBkZXNjOiAnUGVyZmlsIGVzdHJ1Y3R1cmFsIDQwXHUwMEQ3NDAgbW0gXHUyMDEzIFJhbnVyYSA4JywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC00MCcsIG5hbWU6J1RhcGEgZmluYWwgNDBcdTAwRDc0MCcgfSx7IGNvZGU6J0NVQi1SOCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgOCcgfSx7IGNvZGU6J0VTUS00MCcsIG5hbWU6J0VzY3VhZHJhIGRlY29yYXRpdmEgNDBcdTAwRDc0MCcgfV0sCiAgICAgICdCaXNhZ3JhcyAvIENlcnJhZHVyYXMgLyBNYW5pamFzJzogW3sgY29kZTonQklTLTQwJywgbmFtZTonQmlzYWdyYSBkZSBwbFx1MDBFMXN0aWNvIDQwJyB9LHsgY29kZTonQklTLUFMNDAnLCBuYW1lOidCaXNhZ3JhIGRlIGFsdW1pbmlvIDQwJyB9LHsgY29kZTonTUFOLTQwJywgbmFtZTonTWFuaWphIGRlIHBlcmZpbCA0MCcgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi00MCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgNDBcdTAwRDc0MCcgfSx7IGNvZGU6J0VTQy00MCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gNDBcdTAwRDc0MCcgfSx7IGNvZGU6J0VTQy1JNDAnLCBuYW1lOidFc2N1YWRyYSBpbnRlcmlvciA0MFx1MDBENzQwJyB9LHsgY29kZTonUExBLTQwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiA0MFx1MDBENzQwJyB9LHsgY29kZTonQ09OLUNSNDAnLCBuYW1lOidDb25lY3RvciBjcnV6YWRvIDQwXHUwMEQ3NDAnIH1dLAogICAgICAnVG9ybmlsbGVyXHUwMEVEYSc6ICAgICAgICAgICAgICBbeyBjb2RlOidUT1ItTTUnLCBuYW1lOidUb3JuaWxsbyBNNVx1MDBENzEyIGNhYmV6YSByZWRvbmRhJyB9LHsgY29kZTonVFVOLU01JywgbmFtZTonVHVlcmNhIG1hcnRpbGxvIE01IHJhbnVyYSA4JyB9LHsgY29kZTonVFVOLVQ1JywgbmFtZTonVHVlcmNhIFQgTTUgcmFudXJhIDgnIH0seyBjb2RlOidQRVItRCcsIG5hbWU6J1Blcm5vIGRlIHVuaVx1MDBGM24gRDYnIH1dLAogICAgICAnRWxlbWVudG9zIGRlIFBpc28nOiAgICAgICAgW3sgY29kZTonUElFLU0xMCcsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTEwJyB9LHsgY29kZTonUlVFLTc1JywgbmFtZTonUnVlZGEgZ2lyYXRvcmlhIDc1IG1tIGNvbiBmcmVubycgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidWSUQtNicsIG5hbWU6J0p1bnRhIHZpZHJpbyA2IG1tJyB9LHsgY29kZTonUEVSLTQwJywgbmFtZTonUGVyZmlsIGp1bnRhIDQwJyB9LHsgY29kZTonVEFQQS1DJywgbmFtZTonVGFwYSBjYW5hbCcgfV0KICAgIH0KICB9LAogIHsKICAgIGlkOiAncDMwNjAnLCBncm91cDogJ1JhbnVyYSA4JywgbmFtZTogJ1BlcmZpbCAzMFx1MDBENzYwJywgZGVzYzogJ1BlcmZpbCBlc3RydWN0dXJhbCAzMFx1MDBENzYwIG1tIFx1MjAxMyBSYW51cmEgOCcsCiAgICBhY2Nlc3NvcmllczogewogICAgICAnQWNjZXNvcmlvcyBFc3RcdTAwRTl0aWNvcyc6ICAgICBbeyBjb2RlOidUQVAtMzA2MCcsIG5hbWU6J1RhcGEgZmluYWwgMzBcdTAwRDc2MCcgfSx7IGNvZGU6J0NVQi1SOCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgOCcgfV0sCiAgICAgICdCaXNhZ3JhcyAvIENlcnJhZHVyYXMgLyBNYW5pamFzJzogW3sgY29kZTonQklTLTMwJywgbmFtZTonQmlzYWdyYSBkZSBwbFx1MDBFMXN0aWNvIDMwJyB9LHsgY29kZTonQklTLUFMMzAnLCBuYW1lOidCaXNhZ3JhIGRlIGFsdW1pbmlvIDMwJyB9XSwKICAgICAgJ1Npc3RlbWFzIGRlIFVuaVx1MDBGM24nOiAgICAgICAgW3sgY29kZTonQ09OLTMwNjAnLCBuYW1lOidDb25lY3RvciBhbmd1bGFyIDMwXHUwMEQ3NjAnIH0seyBjb2RlOidFU0MtMzA2MCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gMzBcdTAwRDc2MCcgfSx7IGNvZGU6J1BMQS0zMDYwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiAzMFx1MDBENzYwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU01JywgbmFtZTonVG9ybmlsbG8gTTVcdTAwRDcxMCBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NNScsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNNSByYW51cmEgOCcgfSx7IGNvZGU6J1RVTi1UNScsIG5hbWU6J1R1ZXJjYSBUIE01IHJhbnVyYSA4JyB9XSwKICAgICAgJ0VsZW1lbnRvcyBkZSBQaXNvJzogICAgICAgIFt7IGNvZGU6J1BJRS1SOCcsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTggKHJhbnVyYSA4KScgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidWSUQtNicsIG5hbWU6J0p1bnRhIHZpZHJpbyA2IG1tJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwNDA4MHI4JywgZ3JvdXA6ICdSYW51cmEgOCcsIG5hbWU6ICdQZXJmaWwgNDBcdTAwRDc4MCcsIGRlc2M6ICdQZXJmaWwgZXN0cnVjdHVyYWwgNDBcdTAwRDc4MCBtbSBcdTIwMTMgUmFudXJhIDgnLAogICAgYWNjZXNzb3JpZXM6IHsKICAgICAgJ0FjY2Vzb3Jpb3MgRXN0XHUwMEU5dGljb3MnOiAgICAgW3sgY29kZTonVEFQLTQwODAnLCBuYW1lOidUYXBhIGZpbmFsIDQwXHUwMEQ3ODAnIH0seyBjb2RlOidDVUItUjgnLCBuYW1lOidDdWJyZXRhcGEgcmFudXJhIDgnIH0seyBjb2RlOidFU1EtNDAnLCBuYW1lOidFc2N1YWRyYSBkZWNvcmF0aXZhIDQwJyB9XSwKICAgICAgJ0Jpc2FncmFzIC8gQ2VycmFkdXJhcyAvIE1hbmlqYXMnOiBbeyBjb2RlOidCSVMtQUw0MCcsIG5hbWU6J0Jpc2FncmEgZGUgYWx1bWluaW8gNDAnIH0seyBjb2RlOidNQU4tNDAnLCBuYW1lOidNYW5pamEgZGUgcGVyZmlsIDQwJyB9XSwKICAgICAgJ1Npc3RlbWFzIGRlIFVuaVx1MDBGM24nOiAgICAgICAgW3sgY29kZTonQ09OLTQwODAnLCBuYW1lOidDb25lY3RvciBhbmd1bGFyIDQwXHUwMEQ3ODAnIH0seyBjb2RlOidFU0MtNDA4MCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gNDBcdTAwRDc4MCcgfSx7IGNvZGU6J1BMQS00MDgwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiA0MFx1MDBENzgwJyB9LHsgY29kZTonQ09OLUNSNDAnLCBuYW1lOidDb25lY3RvciBjcnV6YWRvIDQwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU01JywgbmFtZTonVG9ybmlsbG8gTTVcdTAwRDcxMiBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NNScsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNNSByYW51cmEgOCcgfSx7IGNvZGU6J1BFUi1EJywgbmFtZTonUGVybm8gZGUgdW5pXHUwMEYzbiBENicgfV0sCiAgICAgICdFbGVtZW50b3MgZGUgUGlzbyc6ICAgICAgICBbeyBjb2RlOidQSUUtTTEwJywgbmFtZTonUGllIG5pdmVsYWRvciBNMTAnIH0seyBjb2RlOidSVUUtNzUnLCBuYW1lOidSdWVkYSBnaXJhdG9yaWEgNzUgbW0nIH0seyBjb2RlOidQSUUtTTgnLCBuYW1lOidQaWUgbml2ZWxhZG9yIE04JyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1ZJRC02JywgbmFtZTonSnVudGEgdmlkcmlvIDYgbW0nIH0seyBjb2RlOidUQVBBLUMnLCBuYW1lOidUYXBhIGNhbmFsJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwODA4MCcsIGdyb3VwOiAnUmFudXJhIDgnLCBuYW1lOiAnUGVyZmlsIDgwXHUwMEQ3ODAnLCBkZXNjOiAnUGVyZmlsIGVzdHJ1Y3R1cmFsIDgwXHUwMEQ3ODAgbW0gXHUyMDEzIFJhbnVyYSA4JywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC04MCcsIG5hbWU6J1RhcGEgZmluYWwgODBcdTAwRDc4MCcgfSx7IGNvZGU6J0NVQi1SOCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgOCcgfV0sCiAgICAgICdCaXNhZ3JhcyAvIENlcnJhZHVyYXMgLyBNYW5pamFzJzogW3sgY29kZTonQklTLUFMODAnLCBuYW1lOidCaXNhZ3JhIGRlIGFsdW1pbmlvIDgwJyB9LHsgY29kZTonTUFOLTgwJywgbmFtZTonTWFuaWphIGRlIHBlcmZpbCA4MCcgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi04MCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgODBcdTAwRDc4MCcgfSx7IGNvZGU6J0VTQy04MCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gODBcdTAwRDc4MCcgfSx7IGNvZGU6J1BMQS04MCcsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gODBcdTAwRDc4MCcgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NOCcsIG5hbWU6J1Rvcm5pbGxvIE04XHUwMEQ3MTYgY2FiZXphIHJlZG9uZGEnIH0seyBjb2RlOidUVU4tTTgnLCBuYW1lOidUdWVyY2EgbWFydGlsbG8gTTggcmFudXJhIDgnIH0seyBjb2RlOidQRVItRCcsIG5hbWU6J1Blcm5vIGRlIHVuaVx1MDBGM24gRDEwJyB9XSwKICAgICAgJ0VsZW1lbnRvcyBkZSBQaXNvJzogICAgICAgIFt7IGNvZGU6J1BJRS1NMTInLCBuYW1lOidQaWUgbml2ZWxhZG9yIE0xMicgfSx7IGNvZGU6J1JVRS0xMDAnLCBuYW1lOidSdWVkYSBnaXJhdG9yaWEgMTAwIG1tIGNvbiBmcmVubycgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidWSUQtOCcsIG5hbWU6J0p1bnRhIHZpZHJpbyA4IG1tJyB9XQogICAgfQogIH0sCiAgLy8g4pSA4pSAIEVTUEVDSUFMRVMgUjEwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogIHsKICAgIGlkOiAncDQwNDByMTAnLCBncm91cDogJ1BlcmZpbGVzIEVzcGVjaWFsZXMgUjEwJywgbmFtZTogJ1BlcmZpbCA0MFx1MDBENzQwIFIxMCcsIGRlc2M6ICdQZXJmaWwgZXN0cnVjdHVyYWwgNDBcdTAwRDc0MCBtbSBcdTIwMTMgUmFudXJhIDEwJywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC00MFIxMCcsIG5hbWU6J1RhcGEgZmluYWwgNDBcdTAwRDc0MCBSMTAnIH0seyBjb2RlOidDVUItUjEwJywgbmFtZTonQ3VicmV0YXBhIHJhbnVyYSAxMCcgfV0sCiAgICAgICdCaXNhZ3JhcyAvIENlcnJhZHVyYXMgLyBNYW5pamFzJzogW3sgY29kZTonQklTLTQwUicsIG5hbWU6J0Jpc2FncmEgYWx1bWluaW8gNDAgUjEwJyB9LHsgY29kZTonTUFOLTQwJywgbmFtZTonTWFuaWphIGRlIHBlcmZpbCA0MCcgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi00MFIxMCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgNDBcdTAwRDc0MCBSMTAnIH0seyBjb2RlOidFU0MtNDBSMTAnLCBuYW1lOidFc2N1YWRyYSBkZSB1bmlcdTAwRjNuIDQwXHUwMEQ3NDAgUjEwJyB9LHsgY29kZTonUExBLTQwUjEwJywgbmFtZTonUGxhY2EgZGUgdW5pXHUwMEYzbiA0MFx1MDBENzQwIFIxMCcgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NNicsIG5hbWU6J1Rvcm5pbGxvIE02XHUwMEQ3MTIgY2FiZXphIHJlZG9uZGEnIH0seyBjb2RlOidUVU4tTTYnLCBuYW1lOidUdWVyY2EgbWFydGlsbG8gTTYgcmFudXJhIDEwJyB9LHsgY29kZTonVFVOLVQ2JywgbmFtZTonVHVlcmNhIFQgTTYgcmFudXJhIDEwJyB9XSwKICAgICAgJ0VsZW1lbnRvcyBkZSBQaXNvJzogICAgICAgIFt7IGNvZGU6J1BJRS1NMTAnLCBuYW1lOidQaWUgbml2ZWxhZG9yIE0xMCcgfSx7IGNvZGU6J1JVRS03NScsIG5hbWU6J1J1ZWRhIGdpcmF0b3JpYSA3NSBtbScgfV0sCiAgICAgICdPdHJvcyBBY2Nlc29yaW9zJzogICAgICAgICBbeyBjb2RlOidWSUQtOCcsIG5hbWU6J0p1bnRhIHZpZHJpbyA4IG1tJyB9LHsgY29kZTonVEFQQS1DMTAnLCBuYW1lOidUYXBhIGNhbmFsIFIxMCcgfV0KICAgIH0KICB9LAogIHsKICAgIGlkOiAncDQ1NDUnLCBncm91cDogJ1BlcmZpbGVzIEVzcGVjaWFsZXMgUjEwJywgbmFtZTogJ1BlcmZpbCA0NVx1MDBENzQ1JywgZGVzYzogJ1BlcmZpbCBlc3RydWN0dXJhbCA0NVx1MDBENzQ1IG1tIFx1MjAxMyBSYW51cmEgMTAnLAogICAgYWNjZXNzb3JpZXM6IHsKICAgICAgJ0FjY2Vzb3Jpb3MgRXN0XHUwMEU5dGljb3MnOiAgICAgW3sgY29kZTonVEFQLTQ1JywgbmFtZTonVGFwYSBmaW5hbCA0NVx1MDBENzQ1JyB9LHsgY29kZTonQ1VCLVIxMCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgMTAnIH0seyBjb2RlOidFU1EtNDUnLCBuYW1lOidFc2N1YWRyYSBkZWNvcmF0aXZhIDQ1XHUwMEQ3NDUnIH1dLAogICAgICAnQmlzYWdyYXMgLyBDZXJyYWR1cmFzIC8gTWFuaWphcyc6IFt7IGNvZGU6J0JJUy00NScsIG5hbWU6J0Jpc2FncmEgZGUgcGxcdTAwRTFzdGljbyA0NScgfSx7IGNvZGU6J0JJUy1BTDQ1JywgbmFtZTonQmlzYWdyYSBkZSBhbHVtaW5pbyA0NScgfSx7IGNvZGU6J0NFUi00NScsIG5hbWU6J0NlcnJhZHVyYSBwZXJmaWwgNDUnIH0seyBjb2RlOidNQU4tNDUnLCBuYW1lOidNYW5pamEgZGUgcGVyZmlsIDQ1JyB9XSwKICAgICAgJ1Npc3RlbWFzIGRlIFVuaVx1MDBGM24nOiAgICAgICAgW3sgY29kZTonQ09OLTQ1JywgbmFtZTonQ29uZWN0b3IgYW5ndWxhciA0NVx1MDBENzQ1JyB9LHsgY29kZTonRVNDLTQ1JywgbmFtZTonRXNjdWFkcmEgZGUgdW5pXHUwMEYzbiA0NVx1MDBENzQ1JyB9LHsgY29kZTonRVNDLUk0NScsIG5hbWU6J0VzY3VhZHJhIGludGVyaW9yIDQ1XHUwMEQ3NDUnIH0seyBjb2RlOidQTEEtNDUnLCBuYW1lOidQbGFjYSBkZSB1bmlcdTAwRjNuIDQ1XHUwMEQ3NDUnIH0seyBjb2RlOidDT04tQ1I0NScsIG5hbWU6J0NvbmVjdG9yIGNydXphZG8gNDVcdTAwRDc0NScgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NNicsIG5hbWU6J1Rvcm5pbGxvIE02XHUwMEQ3MTIgY2FiZXphIHJlZG9uZGEnIH0seyBjb2RlOidUVU4tTTYnLCBuYW1lOidUdWVyY2EgbWFydGlsbG8gTTYgcmFudXJhIDEwJyB9LHsgY29kZTonVFVOLVQ2JywgbmFtZTonVHVlcmNhIFQgTTYgcmFudXJhIDEwJyB9LHsgY29kZTonUEVSLUQ2JywgbmFtZTonUGVybm8gZGUgdW5pXHUwMEYzbiBEOCcgfV0sCiAgICAgICdFbGVtZW50b3MgZGUgUGlzbyc6ICAgICAgICBbeyBjb2RlOidQSUUtTTEwJywgbmFtZTonUGllIG5pdmVsYWRvciBNMTAnIH0seyBjb2RlOidSVUUtNzUnLCBuYW1lOidSdWVkYSBnaXJhdG9yaWEgNzUgbW0gY29uIGZyZW5vJyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1ZJRC04JywgbmFtZTonSnVudGEgdmlkcmlvIDggbW0nIH0seyBjb2RlOidQRVItNDUnLCBuYW1lOidQZXJmaWwganVudGEgNDUnIH0seyBjb2RlOidUQVBBLUMxMCcsIG5hbWU6J1RhcGEgY2FuYWwgUjEwJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwNDU0NVInLCBncm91cDogJ1BlcmZpbGVzIEVzcGVjaWFsZXMgUjEwJywgbmFtZTogJ1BlcmZpbCA0NVx1MDBENzQ1IFInLCBkZXNjOiAnUGVyZmlsIDQ1XHUwMEQ3NDUgbW0gY29uIGVzcXVpbmFzIHJlZG9uZGVhZGFzIFx1MjAxMyBSYW51cmEgMTAnLAogICAgYWNjZXNzb3JpZXM6IHsKICAgICAgJ0FjY2Vzb3Jpb3MgRXN0XHUwMEU5dGljb3MnOiAgICAgW3sgY29kZTonVEFQLTQ1UicsIG5hbWU6J1RhcGEgZmluYWwgNDVcdTAwRDc0NSBSJyB9LHsgY29kZTonQ1VCLVIxMCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgMTAnIH1dLAogICAgICAnQmlzYWdyYXMgLyBDZXJyYWR1cmFzIC8gTWFuaWphcyc6IFt7IGNvZGU6J0JJUy1BTDQ1JywgbmFtZTonQmlzYWdyYSBkZSBhbHVtaW5pbyA0NScgfSx7IGNvZGU6J01BTi00NScsIG5hbWU6J01hbmlqYSBkZSBwZXJmaWwgNDUnIH1dLAogICAgICAnU2lzdGVtYXMgZGUgVW5pXHUwMEYzbic6ICAgICAgICBbeyBjb2RlOidDT04tNDUnLCBuYW1lOidDb25lY3RvciBhbmd1bGFyIDQ1XHUwMEQ3NDUnIH0seyBjb2RlOidFU0MtNDUnLCBuYW1lOidFc2N1YWRyYSBkZSB1bmlcdTAwRjNuIDQ1XHUwMEQ3NDUnIH0seyBjb2RlOidQTEEtNDUnLCBuYW1lOidQbGFjYSBkZSB1bmlcdTAwRjNuIDQ1XHUwMEQ3NDUnIH1dLAogICAgICAnVG9ybmlsbGVyXHUwMEVEYSc6ICAgICAgICAgICAgICBbeyBjb2RlOidUT1ItTTYnLCBuYW1lOidUb3JuaWxsbyBNNlx1MDBENzEyJyB9LHsgY29kZTonVFVOLU02JywgbmFtZTonVHVlcmNhIG1hcnRpbGxvIE02IHJhbnVyYSAxMCcgfV0sCiAgICAgICdFbGVtZW50b3MgZGUgUGlzbyc6ICAgICAgICBbeyBjb2RlOidQSUUtTTEwJywgbmFtZTonUGllIG5pdmVsYWRvciBNMTAnIH1dLAogICAgICAnT3Ryb3MgQWNjZXNvcmlvcyc6ICAgICAgICAgW3sgY29kZTonVklELTgnLCBuYW1lOidKdW50YSB2aWRyaW8gOCBtbScgfV0KICAgIH0KICB9LAogIHsKICAgIGlkOiAncEQyOCcsIGdyb3VwOiAnUGVyZmlsZXMgRXNwZWNpYWxlcyBSMTAnLCBuYW1lOiAnUGVyZmlsIEQyOCcsIGRlc2M6ICdQZXJmaWwgcmVkb25kbyBEMjggbW0gXHUyMDEzIFJhbnVyYSAxMCcsCiAgICBhY2Nlc3NvcmllczogewogICAgICAnQWNjZXNvcmlvcyBFc3RcdTAwRTl0aWNvcyc6ICAgICBbeyBjb2RlOidUQVAtRDI4JywgbmFtZTonVGFwYSBmaW5hbCBEMjgnIH1dLAogICAgICAnU2lzdGVtYXMgZGUgVW5pXHUwMEYzbic6ICAgICAgICBbeyBjb2RlOidTT1AtRDI4JywgbmFtZTonU29wb3J0ZSBwZXJmaWwgRDI4JyB9LHsgY29kZTonQ09OLUQyOCcsIG5hbWU6J0NvbmVjdG9yIFx1MDBFMW5ndWxvIEQyOCcgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NNScsIG5hbWU6J1Rvcm5pbGxvIE01XHUwMEQ3MTAnIH0seyBjb2RlOidUVU4tTTUnLCBuYW1lOidUdWVyY2EgTTUgcmFudXJhIDEwJyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J0FCUi1EMjgnLCBuYW1lOidBYnJhemFkZXJhIEQyOCcgfV0KICAgIH0KICB9LAogIHsKICAgIGlkOiAncDQ1OTBMJywgZ3JvdXA6ICdQZXJmaWxlcyBFc3BlY2lhbGVzIFIxMCcsIG5hbWU6ICdQZXJmaWwgNDVcdTAwRDc5MCBMJywgZGVzYzogJ1BlcmZpbCA0NVx1MDBENzkwIG1tIGxpZ2VybyBcdTIwMTMgUmFudXJhIDEwJywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC00NTkwJywgbmFtZTonVGFwYSBmaW5hbCA0NVx1MDBENzkwJyB9LHsgY29kZTonQ1VCLVIxMCcsIG5hbWU6J0N1YnJldGFwYSByYW51cmEgMTAnIH1dLAogICAgICAnQmlzYWdyYXMgLyBDZXJyYWR1cmFzIC8gTWFuaWphcyc6IFt7IGNvZGU6J0JJUy1BTDQ1JywgbmFtZTonQmlzYWdyYSBkZSBhbHVtaW5pbyA0NScgfSx7IGNvZGU6J01BTi00NScsIG5hbWU6J01hbmlqYSBkZSBwZXJmaWwgNDUnIH1dLAogICAgICAnU2lzdGVtYXMgZGUgVW5pXHUwMEYzbic6ICAgICAgICBbeyBjb2RlOidDT04tNDU5MCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgNDVcdTAwRDc5MCcgfSx7IGNvZGU6J0VTQy00NTkwJywgbmFtZTonRXNjdWFkcmEgZGUgdW5pXHUwMEYzbiA0NVx1MDBENzkwJyB9LHsgY29kZTonUExBLTQ1OTAnLCBuYW1lOidQbGFjYSBkZSB1bmlcdTAwRjNuIDQ1XHUwMEQ3OTAnIH1dLAogICAgICAnVG9ybmlsbGVyXHUwMEVEYSc6ICAgICAgICAgICAgICBbeyBjb2RlOidUT1ItTTYnLCBuYW1lOidUb3JuaWxsbyBNNlx1MDBENzEyJyB9LHsgY29kZTonVFVOLU02JywgbmFtZTonVHVlcmNhIG1hcnRpbGxvIE02IHJhbnVyYSAxMCcgfSx7IGNvZGU6J1BFUi1ENicsIG5hbWU6J1Blcm5vIGRlIHVuaVx1MDBGM24gRDgnIH1dLAogICAgICAnRWxlbWVudG9zIGRlIFBpc28nOiAgICAgICAgW3sgY29kZTonUElFLU0xMCcsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTEwJyB9LHsgY29kZTonUlVFLTc1JywgbmFtZTonUnVlZGEgZ2lyYXRvcmlhIDc1IG1tJyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1ZJRC04JywgbmFtZTonSnVudGEgdmlkcmlvIDggbW0nIH1dCiAgICB9CiAgfSwKICB7CiAgICBpZDogJ3A0NTkwUCcsIGdyb3VwOiAnUGVyZmlsZXMgRXNwZWNpYWxlcyBSMTAnLCBuYW1lOiAnUGVyZmlsIDQ1XHUwMEQ3OTAgUCcsIGRlc2M6ICdQZXJmaWwgNDVcdTAwRDc5MCBtbSBwZXNhZG8gXHUyMDEzIFJhbnVyYSAxMCcsCiAgICBhY2Nlc3NvcmllczogewogICAgICAnQWNjZXNvcmlvcyBFc3RcdTAwRTl0aWNvcyc6ICAgICBbeyBjb2RlOidUQVAtNDU5MCcsIG5hbWU6J1RhcGEgZmluYWwgNDVcdTAwRDc5MCcgfSx7IGNvZGU6J0NVQi1SMTAnLCBuYW1lOidDdWJyZXRhcGEgcmFudXJhIDEwJyB9XSwKICAgICAgJ0Jpc2FncmFzIC8gQ2VycmFkdXJhcyAvIE1hbmlqYXMnOiBbeyBjb2RlOidCSVMtQUw0NScsIG5hbWU6J0Jpc2FncmEgZGUgYWx1bWluaW8gNDUnIH0seyBjb2RlOidNQU4tNDUnLCBuYW1lOidNYW5pamEgZGUgcGVyZmlsIDQ1JyB9LHsgY29kZTonQ0VSLTQ1JywgbmFtZTonQ2VycmFkdXJhIHBlcmZpbCA0NScgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi00NTkwJywgbmFtZTonQ29uZWN0b3IgYW5ndWxhciA0NVx1MDBENzkwJyB9LHsgY29kZTonRVNDLTQ1OTAnLCBuYW1lOidFc2N1YWRyYSBkZSB1bmlcdTAwRjNuIDQ1XHUwMEQ3OTAnIH0seyBjb2RlOidQTEEtNDU5MCcsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gNDVcdTAwRDc5MCcgfSx7IGNvZGU6J0NPTi1DUjQ1JywgbmFtZTonQ29uZWN0b3IgY3J1emFkbyA0NScgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NOCcsIG5hbWU6J1Rvcm5pbGxvIE04XHUwMEQ3MTQnIH0seyBjb2RlOidUVU4tTTgnLCBuYW1lOidUdWVyY2EgbWFydGlsbG8gTTggcmFudXJhIDEwJyB9LHsgY29kZTonUEVSLUQ4JywgbmFtZTonUGVybm8gZGUgdW5pXHUwMEYzbiBEMTAnIH1dLAogICAgICAnRWxlbWVudG9zIGRlIFBpc28nOiAgICAgICAgW3sgY29kZTonUElFLU0xMicsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTEyJyB9LHsgY29kZTonUlVFLTEwMCcsIG5hbWU6J1J1ZWRhIGdpcmF0b3JpYSAxMDAgbW0gY29uIGZyZW5vJyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1ZJRC04JywgbmFtZTonSnVudGEgdmlkcmlvIDggbW0nIH0seyBjb2RlOidUQVBBLUMxMCcsIG5hbWU6J1RhcGEgY2FuYWwgUjEwJyB9XQogICAgfQogIH0sCiAgewogICAgaWQ6ICdwNjA2MCcsIGdyb3VwOiAnUGVyZmlsZXMgRXNwZWNpYWxlcyBSMTAnLCBuYW1lOiAnUGVyZmlsIDYwXHUwMEQ3NjAnLCBkZXNjOiAnUGVyZmlsIGVzdHJ1Y3R1cmFsIDYwXHUwMEQ3NjAgbW0gXHUyMDEzIFJhbnVyYSAxMCcsCiAgICBhY2Nlc3NvcmllczogewogICAgICAnQWNjZXNvcmlvcyBFc3RcdTAwRTl0aWNvcyc6ICAgICBbeyBjb2RlOidUQVAtNjAnLCBuYW1lOidUYXBhIGZpbmFsIDYwXHUwMEQ3NjAnIH0seyBjb2RlOidDVUItUjEwJywgbmFtZTonQ3VicmV0YXBhIHJhbnVyYSAxMCcgfSx7IGNvZGU6J0VTUS02MCcsIG5hbWU6J0VzY3VhZHJhIGRlY29yYXRpdmEgNjBcdTAwRDc2MCcgfV0sCiAgICAgICdCaXNhZ3JhcyAvIENlcnJhZHVyYXMgLyBNYW5pamFzJzogW3sgY29kZTonQklTLUFMNjAnLCBuYW1lOidCaXNhZ3JhIGRlIGFsdW1pbmlvIDYwJyB9LHsgY29kZTonTUFOLTYwJywgbmFtZTonTWFuaWphIGRlIHBlcmZpbCA2MCcgfSx7IGNvZGU6J0NFUi02MCcsIG5hbWU6J0NlcnJhZHVyYSBwZXJmaWwgNjAnIH1dLAogICAgICAnU2lzdGVtYXMgZGUgVW5pXHUwMEYzbic6ICAgICAgICBbeyBjb2RlOidDT04tNjAnLCBuYW1lOidDb25lY3RvciBhbmd1bGFyIDYwXHUwMEQ3NjAnIH0seyBjb2RlOidFU0MtNjAnLCBuYW1lOidFc2N1YWRyYSBkZSB1bmlcdTAwRjNuIDYwXHUwMEQ3NjAnIH0seyBjb2RlOidFU0MtSTYwJywgbmFtZTonRXNjdWFkcmEgaW50ZXJpb3IgNjBcdTAwRDc2MCcgfSx7IGNvZGU6J1BMQS02MCcsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gNjBcdTAwRDc2MCcgfSx7IGNvZGU6J0NPTi1DUjYwJywgbmFtZTonQ29uZWN0b3IgY3J1emFkbyA2MFx1MDBENzYwJyB9XSwKICAgICAgJ1Rvcm5pbGxlclx1MDBFRGEnOiAgICAgICAgICAgICAgW3sgY29kZTonVE9SLU04JywgbmFtZTonVG9ybmlsbG8gTThcdTAwRDcxNiBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NOCcsIG5hbWU6J1R1ZXJjYSBtYXJ0aWxsbyBNOCByYW51cmEgMTAnIH0seyBjb2RlOidUVU4tVDgnLCBuYW1lOidUdWVyY2EgVCBNOCByYW51cmEgMTAnIH0seyBjb2RlOidQRVItRDEwJywgbmFtZTonUGVybm8gZGUgdW5pXHUwMEYzbiBEMTAnIH1dLAogICAgICAnRWxlbWVudG9zIGRlIFBpc28nOiAgICAgICAgW3sgY29kZTonUElFLU0xMicsIG5hbWU6J1BpZSBuaXZlbGFkb3IgTTEyJyB9LHsgY29kZTonUlVFLTEwMCcsIG5hbWU6J1J1ZWRhIGdpcmF0b3JpYSAxMDAgbW0gY29uIGZyZW5vJyB9XSwKICAgICAgJ090cm9zIEFjY2Vzb3Jpb3MnOiAgICAgICAgIFt7IGNvZGU6J1ZJRC0xMCcsIG5hbWU6J0p1bnRhIHZpZHJpbyAxMCBtbScgfSx7IGNvZGU6J1BFUi02MCcsIG5hbWU6J1BlcmZpbCBqdW50YSA2MCcgfSx7IGNvZGU6J1RBUEEtQzEwJywgbmFtZTonVGFwYSBjYW5hbCBSMTAnIH1dCiAgICB9CiAgfSwKICB7CiAgICBpZDogJ3A5MDkwJywgZ3JvdXA6ICdQZXJmaWxlcyBFc3BlY2lhbGVzIFIxMCcsIG5hbWU6ICdQZXJmaWwgOTBcdTAwRDc5MCcsIGRlc2M6ICdQZXJmaWwgZXN0cnVjdHVyYWwgOTBcdTAwRDc5MCBtbSBcdTIwMTMgUmFudXJhIDEwJywKICAgIGFjY2Vzc29yaWVzOiB7CiAgICAgICdBY2Nlc29yaW9zIEVzdFx1MDBFOXRpY29zJzogICAgIFt7IGNvZGU6J1RBUC05MCcsIG5hbWU6J1RhcGEgZmluYWwgOTBcdTAwRDc5MCcgfSx7IGNvZGU6J0NVQi1SMTAnLCBuYW1lOidDdWJyZXRhcGEgcmFudXJhIDEwJyB9XSwKICAgICAgJ0Jpc2FncmFzIC8gQ2VycmFkdXJhcyAvIE1hbmlqYXMnOiBbeyBjb2RlOidCSVMtQUw5MCcsIG5hbWU6J0Jpc2FncmEgZGUgYWx1bWluaW8gOTAnIH0seyBjb2RlOidNQU4tOTAnLCBuYW1lOidNYW5pamEgZGUgcGVyZmlsIDkwJyB9LHsgY29kZTonQ0VSLTkwJywgbmFtZTonQ2VycmFkdXJhIHBlcmZpbCA5MCcgfV0sCiAgICAgICdTaXN0ZW1hcyBkZSBVbmlcdTAwRjNuJzogICAgICAgIFt7IGNvZGU6J0NPTi05MCcsIG5hbWU6J0NvbmVjdG9yIGFuZ3VsYXIgOTBcdTAwRDc5MCcgfSx7IGNvZGU6J0VTQy05MCcsIG5hbWU6J0VzY3VhZHJhIGRlIHVuaVx1MDBGM24gOTBcdTAwRDc5MCcgfSx7IGNvZGU6J1BMQS05MCcsIG5hbWU6J1BsYWNhIGRlIHVuaVx1MDBGM24gOTBcdTAwRDc5MCcgfV0sCiAgICAgICdUb3JuaWxsZXJcdTAwRURhJzogICAgICAgICAgICAgIFt7IGNvZGU6J1RPUi1NMTAnLCBuYW1lOidUb3JuaWxsbyBNMTBcdTAwRDcyMCBjYWJlemEgcmVkb25kYScgfSx7IGNvZGU6J1RVTi1NMTAnLCBuYW1lOidUdWVyY2EgbWFydGlsbG8gTTEwIHJhbnVyYSAxMCcgfSx7IGNvZGU6J1BFUi1EMTInLCBuYW1lOidQZXJubyBkZSB1bmlcdTAwRjNuIEQxMicgfV0sCiAgICAgICdFbGVtZW50b3MgZGUgUGlzbyc6ICAgICAgICBbeyBjb2RlOidQSUUtTTE2JywgbmFtZTonUGllIG5pdmVsYWRvciBNMTYnIH0seyBjb2RlOidSVUUtMTUwJywgbmFtZTonUnVlZGEgZ2lyYXRvcmlhIDE1MCBtbSBjb24gZnJlbm8nIH1dLAogICAgICAnT3Ryb3MgQWNjZXNvcmlvcyc6ICAgICAgICAgW3sgY29kZTonVklELTEwJywgbmFtZTonSnVudGEgdmlkcmlvIDEwIG1tJyB9LHsgY29kZTonVEFQQS1DMTAnLCBuYW1lOidUYXBhIGNhbmFsIFIxMCcgfV0KICAgIH0KICB9Cl07CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gU1RBVEUKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmxldCBjdXJyZW50UHJvZmlsZSA9IG51bGw7Ci8vIGxpc3RJdGVtczogeyBbcHJvZmlsZUlkXTogeyBbYWNjQ29kZV06IHsgbmFtZSwgcXR5LCBjYXROYW1lIH0gfSB9CmNvbnN0IGxpc3RJdGVtcyA9IHt9OwoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFNJREVCQVIKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlclNpZGViYXIoKSB7CiAgY29uc3QgZ3JvdXBzID0gWy4uLm5ldyBTZXQoQ0FUQUxPRy5tYXAocCA9PiBwLmdyb3VwKSldOwogIGNvbnN0IHNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdC1zaWRlYmFyJyk7CiAgc2IuaW5uZXJIVE1MID0gZ3JvdXBzLm1hcChnID0+IHsKICAgIGNvbnN0IHByb2ZpbGVzID0gQ0FUQUxPRy5maWx0ZXIocCA9PiBwLmdyb3VwID09PSBnKTsKICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2lkZWJhci1ncm91cCI+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItZ3JvdXAtdGl0bGUiPiR7Z308L2Rpdj4KICAgICAgJHtwcm9maWxlcy5tYXAocCA9PiBgPGRpdiBjbGFzcz0ic2lkZWJhci1pdGVtJHtjdXJyZW50UHJvZmlsZT09PXAuaWQ/JyBhY3RpdmUnOicnfSIgb25jbGljaz0ic2VsZWN0UCgnJHtwLmlkfScpIj4ke3AubmFtZX08L2Rpdj5gKS5qb2luKCcnKX0KICAgIDwvZGl2PmA7CiAgfSkuam9pbignJyk7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBTRUxFQ1QgUFJPRklMRQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gc2VsZWN0UChpZCkgewogIGN1cnJlbnRQcm9maWxlID0gaWQ7CiAgcmVuZGVyU2lkZWJhcigpOwogIHJlbmRlckRldGFpbCgpOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gREVUQUlMIFZJRVcKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHJlbmRlckRldGFpbCgpIHsKICBjb25zdCBwID0gQ0FUQUxPRy5maW5kKHggPT4geC5pZCA9PT0gY3VycmVudFByb2ZpbGUpOwogIGlmICghcCkgcmV0dXJuOwogIGNvbnN0IHBsID0gbGlzdEl0ZW1zW3AuaWRdIHx8IHt9OwogIGNvbnN0IGNhdHMgPSBPYmplY3QuZW50cmllcyhwLmFjY2Vzc29yaWVzKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0LW1haW4nKS5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJwcm9maWxlLXRpdGxlIj4ke3AubmFtZX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByb2ZpbGUtc3VidGl0bGUiPiR7cC5kZXNjfTwvZGl2PgogICAgJHtjYXRzLm1hcCgoW2NhdCwgYWNjc10pID0+IGAKICAgICAgPGRpdiBjbGFzcz0iY2F0LXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImNhdC10aXRsZSI+JHtjYXR9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjLWdyaWQiPgogICAgICAgICAgJHthY2NzLm1hcChhID0+IHsKICAgICAgICAgICAgY29uc3Qgc2VsID0gISFwbFthLmNvZGVdOwogICAgICAgICAgICBjb25zdCBxdHkgPSBzZWwgPyBwbFthLmNvZGVdLnF0eSA6IDE7CiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYWNjLWNhcmQke3NlbD8nIHNlbGVjdGVkJzonJ30iIGlkPSJjYXJkLSR7YS5jb2RlfSIgb25jbGljaz0iYWRkSSgnJHtwLmlkfScsJyR7YS5jb2RlfScsJyR7ZXNjSihhLm5hbWUpfScsJyR7ZXNjSihjYXQpfScpIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2MtbmFtZSI+JHthLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjLWNvZGUiPiR7YS5jb2RlfTwvZGl2PgogICAgICAgICAgICAgICR7c2VsID8gYDxkaXYgY2xhc3M9ImFjYy1xdHkiIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY2hnUSgnJHtwLmlkfScsJyR7YS5jb2RlfScsLTEpIj5cdTIyMTI8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMSIgdmFsdWU9IiR7cXR5fSIgb25jaGFuZ2U9ImNoZ1EoJyR7cC5pZH0nLCcke2EuY29kZX0nLDAsdGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDo0NHB4Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY2hnUSgnJHtwLmlkfScsJyR7YS5jb2RlfScsMSkiPis8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0icm1JKCcke3AuaWR9JywnJHthLmNvZGV9JykiIHN0eWxlPSJjb2xvcjojY2MzMzMzO2JvcmRlci1jb2xvcjojY2MzMzMzO2ZvbnQtc2l6ZTouNzVyZW07d2lkdGg6YXV0bztwYWRkaW5nOjAgNnB4O2JvcmRlci1yYWRpdXM6NHB4OyI+XHUyNzE1PC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICcnfQogICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgICAgfSkuam9pbignJyl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbignJyl9CiAgYDsKfQoKZnVuY3Rpb24gZXNjSihzKXsgcmV0dXJuIHMucmVwbGFjZSgvJy9nLCImIzM5OyIpLnJlcGxhY2UoLyIvZywnJnF1b3Q7Jyk7IH0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBBREQgLyBSRU1PVkUgLyBDSEFOR0UgUVRZCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiBhZGRJKHBpZCwgY29kZSwgbmFtZSwgY2F0KSB7CiAgaWYgKCFsaXN0SXRlbXNbcGlkXSkgbGlzdEl0ZW1zW3BpZF0gPSB7fTsKICBpZiAobGlzdEl0ZW1zW3BpZF1bY29kZV0pIHJldHVybjsgLy8gYWxyZWFkeSBzZWxlY3RlZAogIGxpc3RJdGVtc1twaWRdW2NvZGVdID0geyBuYW1lLCBxdHk6IDEsIGNhdE5hbWU6IGNhdCB9OwogIHN5bmMoKTsKICByZW5kZXJEZXRhaWwoKTsKICB0b2FzdCgnQWdyZWdhZG8gYSBsYSBsaXN0YSBcdTI3MTMnLCBmYWxzZSk7Cn0KCmZ1bmN0aW9uIHJtSShwaWQsIGNvZGUpIHsKICBpZiAobGlzdEl0ZW1zW3BpZF0pIHsKICAgIGRlbGV0ZSBsaXN0SXRlbXNbcGlkXVtjb2RlXTsKICAgIGlmICghT2JqZWN0LmtleXMobGlzdEl0ZW1zW3BpZF0pLmxlbmd0aCkgZGVsZXRlIGxpc3RJdGVtc1twaWRdOwogIH0KICBzeW5jKCk7CiAgcmVuZGVyRGV0YWlsKCk7CiAgcmVuZGVyTFAoKTsKfQoKZnVuY3Rpb24gY2hnUShwaWQsIGNvZGUsIGRlbHRhLCB2YWwpIHsKICBpZiAoIWxpc3RJdGVtc1twaWRdIHx8ICFsaXN0SXRlbXNbcGlkXVtjb2RlXSkgcmV0dXJuOwogIGlmICh2YWwgIT09IHVuZGVmaW5lZCkgewogICAgbGlzdEl0ZW1zW3BpZF1bY29kZV0ucXR5ID0gTWF0aC5tYXgoMSwgcGFyc2VJbnQodmFsKXx8MSk7CiAgfSBlbHNlIHsKICAgIGxpc3RJdGVtc1twaWRdW2NvZGVdLnF0eSA9IE1hdGgubWF4KDEsIGxpc3RJdGVtc1twaWRdW2NvZGVdLnF0eSArIGRlbHRhKTsKICB9CiAgc3luYygpOwogIHJlbmRlckRldGFpbCgpOwogIHJlbmRlckxQKCk7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBCQURHRSBTWU5DCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiBzeW5jKCkgewogIGxldCBuID0gMDsKICBPYmplY3QudmFsdWVzKGxpc3RJdGVtcykuZm9yRWFjaChwID0+IG4gKz0gT2JqZWN0LmtleXMocCkubGVuZ3RoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0LWJhZGdlQ250JykudGV4dENvbnRlbnQgPSBuOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gTElTVCBQQU5FTAovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gcmVuZGVyTFAoKSB7CiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXQtbGlzdEJvZHknKTsKICBjb25zdCBwaWRzID0gT2JqZWN0LmtleXMobGlzdEl0ZW1zKTsKICBpZiAoIXBpZHMubGVuZ3RoKSB7CiAgICBib2R5LmlubmVySFRNTCA9ICc8cCBjbGFzcz0ibGlzdC1lbXB0eSI+VHUgbGlzdGEgZXN0XHUwMEUxIHZhY1x1MDBFRGEuPGJyPlNlbGVjY2lvbmEgYWNjZXNvcmlvcyBkZWwgY2F0XHUwMEUxbG9nby48L3A+JzsKICAgIHJldHVybjsKICB9CiAgYm9keS5pbm5lckhUTUwgPSBwaWRzLm1hcChwaWQgPT4gewogICAgY29uc3QgcCA9IENBVEFMT0cuZmluZCh4ID0+IHguaWQgPT09IHBpZCk7CiAgICBjb25zdCBpdGVtcyA9IE9iamVjdC5lbnRyaWVzKGxpc3RJdGVtc1twaWRdKTsKICAgIHJldHVybiBgPGRpdiBjbGFzcz0ibGlzdC1wcm9maWxlLWdyb3VwIj4KICAgICAgPGRpdiBjbGFzcz0ibGlzdC1wcm9maWxlLW5hbWUiPiR7cCA/IHAubmFtZSA6IHBpZH08L2Rpdj4KICAgICAgJHtpdGVtcy5tYXAoKFtjb2RlLCBpdF0pID0+IGAKICAgICAgICA8ZGl2IGNsYXNzPSJsaXN0LWl0ZW0iPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpLW5hbWUiPiR7aXQubmFtZX08YnI+PHNtYWxsIHN0eWxlPSJjb2xvcjojYWFhIj4ke2NvZGV9PC9zbWFsbD48L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGktcXR5Ij5cdTAwRDcke2l0LnF0eX08L3NwYW4+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaS1ybSIgb25jbGljaz0icm1JKCcke3BpZH0nLCcke2NvZGV9JykiPlx1MjcxNTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICBgKS5qb2luKCcnKX0KICAgIDwvZGl2PmA7CiAgfSkuam9pbignJyk7Cn0KCmZ1bmN0aW9uIG9wZW5MaXN0KCkgeyByZW5kZXJMUCgpOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0LWxpc3RQYW5lbCcpLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdC1vdmVybGF5JykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOyB9CmZ1bmN0aW9uIGNsb3NlTGlzdCgpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdC1saXN0UGFuZWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXQtb3ZlcmxheScpLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsgfQpmdW5jdGlvbiBjbGVhckFsbCgpIHsKICBPYmplY3Qua2V5cyhsaXN0SXRlbXMpLmZvckVhY2goayA9PiBkZWxldGUgbGlzdEl0ZW1zW2tdKTsKICBzeW5jKCk7CiAgcmVuZGVyTFAoKTsKICBpZiAoY3VycmVudFByb2ZpbGUpIHJlbmRlckRldGFpbCgpOwogIHRvYXN0KCdMaXN0YSBsaW1waWFkYScsIGZhbHNlKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBERiBHRU5FUkFUSU9OCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiBnZW5QREYoKSB7CiAgY29uc3QgcGlkcyA9IE9iamVjdC5rZXlzKGxpc3RJdGVtcyk7CiAgaWYgKCFwaWRzLmxlbmd0aCkgeyB0b2FzdCgnTGEgbGlzdGEgZXN0XHUwMEUxIHZhY1x1MDBFRGEnLCB0cnVlKTsgcmV0dXJuOyB9CiAgY29uc3QgeyBqc1BERiB9ID0gd2luZG93LmpzcGRmOwogIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IHVuaXQ6ICdtbScsIGZvcm1hdDogJ2E0JyB9KTsKICBjb25zdCBXID0gMjEwLCBNID0gMTgsIENXID0gVyAtIE0qMjsKICBjb25zdCBHUkFZID0gWzg1LDg1LDg1XSwgWUVMTE9XID0gWzI0NSwxOTYsMF0sIExHUkFZID0gWzI0MCwyNDIsMjQ4XSwgREdSQVkgPSBbODAsODAsOTBdOwoKICBsZXQgeSA9IDAsIHBhZ2UgPSAxOwoKICBmdW5jdGlvbiBhZGRQYWdlKCkgewogICAgaWYgKHBhZ2UgPiAxKSBkb2MuYWRkUGFnZSgpOwogICAgLy8gSGVhZGVyCiAgICBkb2Muc2V0RmlsbENvbG9yKC4uLkdSQVkpOyBkb2MucmVjdCgwLDAsVywyMCwnRicpOwogICAgZG9jLnNldEZvbnRTaXplKDEzKTsgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsJ2JvbGQnKTsgZG9jLnNldFRleHRDb2xvcigyNDUsMTk2LDApOwogICAgZG9jLnRleHQoJ0xpc3RhIGRlIEFjY2Vzb3Jpb3MgXHUyMDE0IFBlcmZpbGVzIGRlIEFsdW1pbmlvJywgTSwgMTMpOwogICAgLy8gRGF0ZQogICAgY29uc3QgZCA9IG5ldyBEYXRlKCk7IGNvbnN0IGRzID0gYCR7ZC5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCcwJyl9LyR7KGQuZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsJzAnKX0vJHtkLmdldEZ1bGxZZWFyKCl9YDsKICAgIGRvYy5zZXRGb250U2l6ZSg4KTsgZG9jLnNldFRleHRDb2xvcigyMDAsMjAwLDIwMCk7IGRvYy50ZXh0KGRzLCBXLU0sIDEzLCB7YWxpZ246J3JpZ2h0J30pOwogICAgLy8gRm9vdGVyCiAgICBkb2Muc2V0RmlsbENvbG9yKC4uLkdSQVkpOyBkb2MucmVjdCgwLDI4NSxXLDEyLCdGJyk7CiAgICBkb2Muc2V0Rm9udFNpemUoOCk7IGRvYy5zZXRUZXh0Q29sb3IoMjAwLDIwMCwyMDApOwogICAgZG9jLnRleHQoJ0NhdFx1MDBFMWxvZ28gSW50ZXJhY3Rpdm8gZGUgUGVyZmlsZXMgZGUgQWx1bWluaW8nLCBNLCAyOTEpOwogICAgZG9jLnRleHQoYFBcdTAwRTFnLiAke3BhZ2V9YCwgVy1NLCAyOTEsIHthbGlnbjoncmlnaHQnfSk7CiAgICB5ID0gMjY7IHBhZ2UrKzsKICB9CgogIGZ1bmN0aW9uIGNoZWNrWShuZWVkZWQpIHsgaWYgKHkgKyBuZWVkZWQgPiAyNzgpIGFkZFBhZ2UoKTsgfQoKICBhZGRQYWdlKCk7CgogIHBpZHMuZm9yRWFjaChwaWQgPT4gewogICAgY29uc3QgcCA9IENBVEFMT0cuZmluZCh4ID0+IHguaWQgPT09IHBpZCk7CiAgICBjb25zdCBpdGVtcyA9IE9iamVjdC5lbnRyaWVzKGxpc3RJdGVtc1twaWRdKTsKICAgIGNoZWNrWSgxNCk7CgogICAgLy8gUHJvZmlsZSBoZWFkZXIgYmFyCiAgICBkb2Muc2V0RmlsbENvbG9yKC4uLkdSQVkpOyBkb2Mucm91bmRlZFJlY3QoTSwgeSwgQ1csIDksIDIsIDIsICdGJyk7CiAgICBkb2Muc2V0Rm9udFNpemUoMTApOyBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywnYm9sZCcpOyBkb2Muc2V0VGV4dENvbG9yKDI0NSwxOTYsMCk7CiAgICBkb2MudGV4dChwID8gcC5uYW1lLnRvVXBwZXJDYXNlKCkgOiBwaWQsIE0rNCwgeSs2LjIpOwogICAgeSArPSAxMjsKCiAgICAvLyBUYWJsZSBoZWFkZXIKICAgIGRvYy5zZXRGaWxsQ29sb3IoLi4uTEdSQVkpOyBkb2MucmVjdChNLCB5LCBDVywgNywgJ0YnKTsKICAgIGRvYy5zZXRGb250U2l6ZSg4KTsgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsJ2JvbGQnKTsgZG9jLnNldFRleHRDb2xvciguLi5ER1JBWSk7CiAgICBkb2MudGV4dCgnQ1x1MDBEM0RJR08nLCBNKzIsIHkrNSk7CiAgICBkb2MudGV4dCgnREVTQ1JJUENJXHUwMEQzTicsIE0rMjgsIHkrNSk7CiAgICBkb2MudGV4dCgnQ0FURUdPUlx1MDBDREEnLCBNKzExNSwgeSs1KTsKICAgIGRvYy50ZXh0KCdDQU5ULicsIFctTS0yLCB5KzUsIHthbGlnbjoncmlnaHQnfSk7CiAgICB5ICs9IDg7CgogICAgaXRlbXMuZm9yRWFjaCgoW2NvZGUsIGl0XSwgaWR4KSA9PiB7CiAgICAgIGNoZWNrWSg4KTsKICAgICAgaWYgKGlkeCAlIDIgPT09IDApIHsgZG9jLnNldEZpbGxDb2xvcigyNTAsMjUxLDI1NSk7IGRvYy5yZWN0KE0seSxDVyw3LCdGJyk7IH0KICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsJ25vcm1hbCcpOyBkb2Muc2V0Rm9udFNpemUoOCk7IGRvYy5zZXRUZXh0Q29sb3IoNDAsNDAsNTApOwogICAgICBkb2MudGV4dChjb2RlLCBNKzIsIHkrNSk7CiAgICAgIGNvbnN0IG5hbWVXID0gODU7CiAgICAgIGNvbnN0IHdyYXBwZWROYW1lID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShpdC5uYW1lLCBuYW1lVyk7CiAgICAgIGRvYy50ZXh0KHdyYXBwZWROYW1lWzBdLCBNKzI4LCB5KzUpOwogICAgICBkb2MudGV4dChpdC5jYXROYW1lIHx8ICcnLCBNKzExNSwgeSs1LCB7bWF4V2lkdGg6NTV9KTsKICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsJ2JvbGQnKTsgZG9jLnNldFRleHRDb2xvciguLi5HUkFZKTsKICAgICAgZG9jLnRleHQoU3RyaW5nKGl0LnF0eSksIFctTS0yLCB5KzUsIHthbGlnbjoncmlnaHQnfSk7CiAgICAgIC8vIGJvdHRvbSBib3JkZXIKICAgICAgZG9jLnNldERyYXdDb2xvcigyMjAsMjIyLDIzMCk7IGRvYy5saW5lKE0sIHkrNywgVy1NLCB5KzcpOwogICAgICB5ICs9IDc7CiAgICB9KTsKCiAgICB5ICs9IDY7CiAgfSk7CgogIGNvbnN0IGRhdGVTdHIgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7CiAgZG9jLnNhdmUoYGFjY2Vzb3Jpb3MtYWx1bWluaW8tJHtkYXRlU3RyfS5wZGZgKTsKICB0b2FzdCgnUERGIGRlc2NhcmdhZG8gXHUyNzEzJywgdHJ1ZSk7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBUT0FTVAovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKbGV0IF90b2FzdFQ7CmZ1bmN0aW9uIHRvYXN0KG1zZywgeWVsbG93KSB7CiAgY29uc3QgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXQtdG9hc3QnKTsKICB0LnRleHRDb250ZW50ID0gbXNnOwogIHQuY2xhc3NOYW1lID0gJ3RvYXN0IHNob3cnICsgKHllbGxvdyA/ICcgeWVsbG93JyA6ICcnKTsKICBjbGVhclRpbWVvdXQoX3RvYXN0VCk7CiAgX3RvYXN0VCA9IHNldFRpbWVvdXQoKCkgPT4gdC5jbGFzc05hbWUgPSAndG9hc3QnLCAyNDAwKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIElOSVQKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACnJlbmRlclNpZGViYXIoKTsK
