PK 2DQZ fileversion ��1979:COMSOL 6.3.0.335PK�'I� PK 2DQZ usedlicenses.txt ��COMSOL PK}�� PK 2DQZ dmodel.xml ��
COMSOL
COMSOL
-1
automatic
COMSOL Multiphysics 6.3 (Build: 335)
Model Manager Database Migration
This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the default branch in the default repository of the target database. In addition, the following caveats apply: • The saved-timestamp and the user that saved a version will not be preserved when a version is migrated from the source database to the target database. Instead the current timestamp and current user will be set for the migrated version. The code appends the original timestamp and user to the migrated version's commit comment. • The code preserves the origin relationship for models that were created from other models via, for example, Save as New or Save Draft. This requires, however, a workaround in which an intermediate copy of the origin model version is saved as a first version of the new model or draft. • If a model version has a reference to a file version in the source database, that reference will continue to point to the source database for the migrated model version. The reference can be set to the corresponding file version in the target database from the Auxiliary Data window the next time the migrated model version is opened in the COMSOL Desktop.
SI
1016561
1979
COMSOL
COMSOL
NOREMOVE|NORETAG|NODEACTIVATE
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
NOREMOVE|NORETAG
COMSOL
4,'p:quantity','p:showOnlyNeeded','p:minpVisibility','p:modified'
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
/batch
COMSOL
OBJECTIVE
/optsequence
COMSOL
COMSOL
COMSOL
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
t(s("/applicationNodeList/appMainWindow")) m(s("set")) a() s("title") s("")
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started to run method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) st(s("DatabaseMigration();")) mm()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished running method DatabaseMigration")) mc()
t(s("/")) m(s("title")) s("Model Manager Database Migration")
t(s("/")) m(s("description")) s("This example application contains a model method that demonstrates how versions of models and data files can be migrated from a source database to a target database.")
t(s("/")) m(s("description")) s("This example application contains method code that demonstrates how versions of models and data files can be migrated from a source database to a target database.")
t(s("/")) m(s("description")) s("This example application contains code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace.")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace.")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the corresponding branch in the target database.")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the default branch in the default repository of the target database. In addition, the following caveats apply: • The saved-timestamp and the user that saved a version will not be preserved when a version is migrated from the source database to the target database. Instead the current timestamp and current user will be set for the migrated version. The original timestamp and user is appended to the saved version's commit comment. • The code preserves the origin relationship for models that were created from other models via, for example, Save as New or Save Draft. This requires, however, a workaround in which an intermediate copy of the origin model version is saved as a first version of the new model or draft.")
t(s("/")) m(s("label")) s("model_manager_database_migration.mph")
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started to run method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) st(s("DatabaseMigration();")) mm()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished running method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started to run method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) st(s("DatabaseMigration();")) mm()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished running method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started to run method DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) st(s("DatabaseMigration();")) mm()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished running method DatabaseMigration")) mc()
t(s("/")) m(s("label")) s("model_manager_database_migration.mph")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the default branch in the default repository of the target database. In addition, the following caveats apply: • The saved-timestamp and the user that saved a version will not be preserved when a version is migrated from the source database to the target database. Instead the current timestamp and current user will be set for the migrated version. The original timestamp and user is appended to the saved version's commit comment. • The code preserves the origin relationship for models that were created from other models via, for example, Save as New or Save Draft. This requires, however, a workaround in which an intermediate copy of the origin model version is saved as a first version of the new model or draft. • If a model version has a reference to a file version in the source database, that reference will continue to point to the source database for the migrated model version. The reference can be set to the corresponding version in the target database from the Auxiliary Data window the next time the model version is opened in the COMSOL Desktop.")
t(s("/")) m(s("label")) s("model_manager_database_migration.mph")
t(s("/methodCall")) m(s("create")) mm() s("methodcall1") s("DatabaseMigration")
t(s("/methodCall/methodcall1")) m(s("label")) mm() s("DatabaseMigration")
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started method call DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished method call DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started method call DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished method call DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Started method call DatabaseMigration")) mc()
t(s("/applicationNodeList/DatabaseMigration")) m(s(null)) c() st(s("Finished method call DatabaseMigration")) mc()
t(s("/")) m(s("label")) s("model_manager_database_migration.mph")
t(s("/")) m(s("label")) s("model_manager_database_migration.mph")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the default branch in the default repository of the target database. In addition, the following caveats apply: • The saved-timestamp and the user that saved a version will not be preserved when a version is migrated from the source database to the target database. Instead the current timestamp and current user will be set for the migrated version. The code appends the original timestamp and user to the migrated version's commit comment. • The code preserves the origin relationship for models that were created from other models via, for example, Save as New or Save Draft. This requires, however, a workaround in which an intermediate copy of the origin model version is saved as a first version of the new model or draft. • If a model version has a reference to a file version in the source database, that reference will continue to point to the source database for the migrated model version. The reference can be set to the corresponding version in the target database from the Auxiliary Data window the next time the model version is opened in the COMSOL Desktop.")
t(s("/")) m(s("description")) s("This application contains example code that demonstrates how versions of models and data files can be migrated from a source database to a target database. See the method DatabaseMigration in the Application Builder workspace. To run the code as-is, the aliases 'source' and 'target' must first be set for the source database and the target database via the Settings window in the Model Manager workspace. The code also assumes that all versions should be migrated from the default branch in the default repository of the source database to the default branch in the default repository of the target database. In addition, the following caveats apply: • The saved-timestamp and the user that saved a version will not be preserved when a version is migrated from the source database to the target database. Instead the current timestamp and current user will be set for the migrated version. The code appends the original timestamp and user to the migrated version's commit comment. • The code preserves the origin relationship for models that were created from other models via, for example, Save as New or Save Draft. This requires, however, a workaround in which an intermediate copy of the origin model version is saved as a first version of the new model or draft. • If a model version has a reference to a file version in the source database, that reference will continue to point to the source database for the migrated model version. The reference can be set to the corresponding file version in the target database from the Auxiliary Data window the next time the migrated model version is opened in the COMSOL Desktop.")
COMSOL
COMSOL
Expected_computation_time
COMSOL
Last_computation_time
COMSOL
Last_computation_date
COMSOL
Computed_in_version
COMSOL
COMSOL
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
null
null
100
32,'p:showfilename','p:icon','p:menutype','p:apptype','p:statusbar','p:innerscrollbars','p:theme','p:imagetheme','p:foreground','p:customforeground','p:background','p:custombackground','p:font','p:fontbold','p:fontitalic','p:fontunderline','p:columnWidths','p:rowHeights','p:allowdrag','p:showheader','p:rowSpanMatrix','p:columnSpanMatrix','p:desktopSize','p:width','p:height','p:centered','p:eventTouch','p:aboutapplicationplacement','p:aboutshowcomsolinformation','p:aboutcustomtext','p:localize','p:language'
COMSOL
NODEACTIVATE
COMSOL
COMSOL
NODEACTIVATE
COMSOL
COMSOL
NODEACTIVATE
COMSOL
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
11,'p:forms','p:formicon','p:initopen','p:closeable','p:vertscr ��oll','p:defaultform','p:row','p:column','p:rowSpan','p:colSpan','p:selectedForm'
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
2,'p:sortedcolumn','p:image_preview'
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
1,'p:sortedcolumn'
COMSOL
NOREMOVE|NODEACTIVATE
COMSOL
7,'p:sortedcolumn','p:file','p:fileres','p:description','p:attribute','p:name','p:help'
COMSOL
NODEACTIVATE
COMSOL
COMSOL
BUILT
{yv66vgAAADcDDgcAAgEAGWJ1aWxkZXIvRGF0YWJhc2VNaWdyYXRpb24HAAQBACBjb20vY29tc29sL2FwaS9BcHBsaWNhdGlvbk1ldGhvZAEAMiRTV0lUQ0hfVEFCTEUkY29tJGNvbXNvbCRhcGkkZGF0YWJhc2UkSXRlbVNhdmVUeXBlAQACW0kBAC4kU1dJVENIX1RBQkxFJGNvbSRjb21zb2wkYXBpJGRhdGFiYXNlJEl0ZW1UeXBlAQAGPGluaXQ+AQADKClWAQAEQ29kZQoAAwAMDAAIAAkBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAbTGJ1aWxkZXIvRGF0YWJhc2VNaWdyYXRpb247AQAHZXhlY3V0ZQoAEwAVBwAUAQAhY29tL2NvbXNvbC9hcGkvQXBwSW50ZXJuYWxNZXRob2RzDAAWABcBAA9jaGFuZ2VDYWxsTGV2ZWwBAAQoSSlWCAAZAQAoL0FwcEJ1aWxkZXJGZWF0dXJlTGlzdC9EYXRhYmFzZU1pZ3JhdGlvbgoAEwAbDAAcAB0BAAlkZWJ1Z0hvb2sBABYoSUxqYXZhL2xhbmcvU3RyaW5nOylWCgAfACEHACABACdjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUFwaVV0aWwMACIAIwEAA2FwaQEAJygpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0RhdGFiYXNlQXBpOwoAHwAlDAAmACcBAAVwYXJhbQEAPCgpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL0RhdGFiYXNlQXBpUGFyYW1HZW5lcmF0b3JzOwgAKQEABnNvdXJjZQsAKwAtBwAsAQAjY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VBcGkMAC4ALwEAD2RhdGFiYXNlQnlBbGlhcwEANihMamF2YS9sYW5nL1N0cmluZzspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0RhdGFiYXNlOwgAMQEABnRhcmdldAsAMwA1BwA0AQAgY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2UMADYANwEAC2RhdGFiYXNlS2V5AQAnKClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VLZXk7CwA5ADsHADoBADhjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9EYXRhYmFzZUFwaVBhcmFtR2VuZXJhdG9ycwwAPAA9AQAeZm9yUXVlcnlEYXRhYmFzZUNvbmZpZ3VyYXRpb25zAQBLKClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vUXVlcnlEYXRhYmFzZUNvbmZpZ3VyYXRpb25zUGFyYW1HZW5lcmF0b3I7CwA/AEEHAEABAEdjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9RdWVyeURhdGFiYXNlQ29uZmlndXJhdGlvbnNQYXJhbUdlbmVyYXRvcgwAQgBDAQAPd2l0aERhdGFiYXNlS2V5AQBwKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUtleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1F1ZXJ5RGF0YWJhc2VDb25maWd1cmF0aW9uc1BhcmFtR2VuZXJhdG9yOwsAKwBFDABGAEcBABtxdWVyeURhdGFiYXNlQ29uZmlndXJhdGlvbnMBAIkoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1F1ZXJ5RGF0YWJhc2VDb25maWd1cmF0aW9uc1BhcmFtOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5RGF0YWJhc2VDb25maWd1cmF0aW9uUmVzdWx0U3RyZWFtOwsASQBLBwBKAQBFY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5RGF0YWJhc2VDb25maWd1cmF0aW9uUmVzdWx0U3RyZWFtDABMAE0BAAtmaXJzdE9yTnVsbAEALCgpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0RhdGFiYXNlQXBpVmFsdWU7BwBPAQA/Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5RGF0YWJhc2VDb25maWd1cmF0aW9uUmVzdWx0CwAzAFEMAFIAUwEAEWRlZmF1bHRSZXBvc2l0b3J5AQAmKClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvUmVwb3NpdG9yeTsLAFUAVwcAVgEAImNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL1JlcG9zaXRvcnkMAFgAWQEADWRlZmF1bHRCcmFuY2gBACIoKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2g7CABbAQAKJXMgKCVzLyVzKQcAXQEAEGphdmEvbGFuZy9PYmplY3QLAE4AXwwAYABhAQAFbGFiZWwBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwsAVQBjDABkAGEBAARuYW1lCwBmAGMHAGcBAB5jb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2gKAGkAawcAagEAEGphdmEvbGFuZy9TdHJpbmcMAGwAbQEABmZvcm1hdAEAOShMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOwgAbwEAJVN0YXJ0aW5nIG1pZ3JhdGlvbiBmcm9tICclcycgdG8gJyVzJy4KAAEAcQwAcgBzAQAIZGVidWdMb2cBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYIAHUBADdCdWlsZGluZyB0aGUgdGFnIHRyZWUgZnJvbSB0aGUgc291cmNlIGJyYW5jaCBpbi1tZW1vcnkuBwB3AQARamF2YS91dGlsL0hhc2hNYXAKAHYADAsAOQB6DAB7AHwBABdmb3JTZWFyY2hJdGVtc0ZvckJyYW5jaAEARCgpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NlYXJjaEl0ZW1zRm9yQnJhbmNoUGFyYW1HZW5lcmF0b3I7BwB+AQAgY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVR5cGUJAH0AgAwAgQCCAQADVEFHAQAiTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1UeXBlOwsAhACGBwCFAQBAY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2VhcmNoSXRlbXNGb3JCcmFuY2hQYXJhbUdlbmVyYXRvcgwAhwCIAQANd2l0aEl0ZW1UeXBlcwEAZyhbTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1UeXBlOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2VhcmNoSXRlbXNGb3JCcmFuY2hQYXJhbUdlbmVyYXRvcjsLAGYAigwAiwCMAQALc2VhcmNoSXRlbXMBAHgoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NlYXJjaEl0ZW1zRm9yQnJhbmNoUGFyYW07KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvU2VhcmNoQnJhbmNoSXRlbVJlc3VsdFN0cmVhbTsLAI4AkAcAjwEAO2NvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3Jlc3VsdC9TZWFyY2hCcmFuY2hJdGVtUmVzdWx0U3RyZWFtDACRAJIBAAhpdGVyYXRvcgEAFigpTGphdmEvdXRpbC9JdGVyYXRvcjsLAJQAlgcAlQEAEmphdmEvdXRpbC9JdGVyYXRvcgwAlwCYAQAEbmV4dAEAFCgpTGphdmEvbGFuZy9PYmplY3Q7BwCaAQA1Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1NlYXJjaEJyYW5jaEl0ZW1SZXN1bHQLAJkAnAwAnQCeAQAHaXRlbUtleQEAIygpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1LZXk7CwBmAKAMAKEAogEACHRhZ0J5S2V5AQBKKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5OylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoVGFnSXRlbTsLAKQApgcApQEAJWNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0JyYW5jaFRhZ0l0ZW0MAKcAqAEAD2Fzc2lnbmVkVGFnS2V5cwEAGCgpTGphdmEvdXRpbC9Db2xsZWN0aW9uOwsAqgCQBwCrAQAUamF2YS91dGlsL0NvbGxlY3Rpb24HAK0BAB9jb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5EgAAAK8MALAAsQEABWFwcGx5AQAfKClMamF2YS91dGlsL2Z1bmN0aW9uL0Z1bmN0aW9uOwsAswC1BwC0AQANamF2YS91dGlsL01hcAwAtgC3AQAPY29tcHV0ZUlmQWJzZW50AQBDKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL3V0aWwvZnVuY3Rpb24vRnVuY3Rpb247KUxqYXZhL2xhbmcvT2JqZWN0OwcAuQEADWphdmEvdXRpbC9TZXQLALgAuwwAvAC9AQADYWRkAQAVKExqYXZhL2xhbmcvT2JqZWN0OylaCwCUAL8MAMAAwQEAB2hhc05leHQBAAMoKVoIAMMBABNNaWdyYXRpbmcgYWxsIHRhZ3MuBwDFAQARamF2YS91dGlsL0hhc2hTZXQKAMQADAcAyAEAFGphdmEvdXRpbC9BcnJheURlcXVlCgDHAAwLADMAywwAzADNAQAHcm9vdFRhZwEAIygpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL1RhZ0l0ZW07CwDPAJwHANABAB9jb20vY29tc29sL2FwaS9kYXRhYmFzZS9UYWdJdGVtCwDSALsHANMBAA9qYXZhL3V0aWwvUXVldWULANIA1QwA1gCYAQAEcG9sbAoA2ADaBwDZAQAVamF2YS91dGlsL0NvbGxlY3Rpb25zDADbANwBAAhlbXB0eVNldAEAESgpTGphdmEvdXRpbC9TZXQ7CwCzAN4MAN8A4AEADGdldE9yRGVmYXVsdAEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7CwC4AJALAKQA4wwA5ADlAQADZ2V0AQA6KClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L0dldFRhZ0l0ZW1WZXJzaW9uUmVzdWx0OwcA5wEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyCADpAQAJQGl0ZW1LZXk6CgDmAOsMAAgAcwsArADtDADuAGEBAAV2YWx1ZQoA5gDwDADxAPIBAAZhcHBlbmQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsKAOYA9AwA9QBhAQAIdG9TdHJpbmcLAIQA9wwA+AD5AQARd2l0aFNlYXJjaEZpbHRlcnMBAFcoW0xqYXZhL2xhbmcvU3RyaW5nOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2VhcmNoSXRlbXNGb3JCcmFuY2hQYXJhbUdlbmVyYXRvcjsLAI4ASwsAOQD8DAD9AP4BAApmb3JTYXZlVGFnAQA7KClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZVRhZ0l0ZW1QYXJhbUdlbmVyYXRvcjsLAQABAgcBAQEAN2NvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVUYWdJdGVtUGFyYW1HZW5lcmF0b3IMAQMBBAEAFXdpdGhTb3VyY2VEYXRhYmFzZUtleQEAYChMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VLZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlVGFnSXRlbVBhcmFtR2VuZXJhdG9yOwsBBgEIBwEHAQA2Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L0dldFRhZ0l0ZW1WZXJzaW9uUmVzdWx0DAEJAQoBAA5pdGVtVmVyc2lvbktleQEAKigpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1WZXJzaW9uS2V5OwsBAAEMDAENAQ4BABh3aXRoU291cmNlSXRlbVZlcnNpb25LZXkBAGMoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1WZXJzaW9uS2V5OylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZVRhZ0l0ZW1QYXJhbUdlbmVyYXRvcjsLAQABEAwBEQESAQALd2l0aEl0ZW1LZXkBAFwoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1LZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlVGFnSXRlbVBhcmFtR2VuZXJhdG9yOwsBAAEUDAEVARYBABN3aXRoQXNzaWduZWRUYWdLZXlzAQBdKFtMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVUYWdJdGVtUGFyYW1HZW5lcmF0b3I7CwEAARgMARkA/gEAE3dpdGhJZ25vcmVDb25mbGljdHMLAGYBGwwBHAEdAQAHc2F2ZVRhZwEAbChMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZVRhZ0l0ZW1QYXJhbTtMamF2YS9sYW5nL1N0cmluZzspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL1RhZ0l0ZW1WZXJzaW9uOwgBHwEAEk1pZ3JhdGVkIHRhZyAnJXMnLgsBBgEhDAEiAGEBAAV0aXRsZQsAuAEkDAElASYBAAZjb3B5T2YBACcoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS91dGlsL1NldDsLALgBKAwBKQC9AQAGZXF1YWxzCwA5ASsMASwBLQEADGZvclVwZGF0ZVRhZwEAPSgpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZVRhZ0l0ZW1QYXJhbUdlbmVyYXRvcjsLAS8BMQcBMAEAOWNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZVRhZ0l0ZW1QYXJhbUdlbmVyYXRvcgwBFQEyAQBfKFtMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZVRhZ0l0ZW1QYXJhbUdlbmVyYXRvcjsLAKQBNAwBNQE2AQAGdXBkYXRlAQBuKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVUYWdJdGVtUGFyYW07TGphdmEvbGFuZy9TdHJpbmc7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9UYWdJdGVtVmVyc2lvbjsIATgBACRVcGRhdGVkIHRhZyBhc3NpZ25tZW50IGZvciB0YWcgJyVzJy4LAKQBIQsAqgE7DAE8AL0BAAhjb250YWlucwsApAE+DAE/AUABAAlhc3NpZ25UYWcBAFUoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1LZXk7TGphdmEvbGFuZy9TdHJpbmc7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9Db21taXQ7CAFCAQAiQWRkZWQgdGFnIGFzc2lnbm1lbnQgZm9yIHRhZyAnJXMnLgsA0gFEDAFFAMEBAAdpc0VtcHR5CAFHAQAcRmluaXNoZWQgbWlncmF0aW5nIGFsbCB0YWdzLggBSQEAJE1pZ3JhdGluZyBhbGwgbW9kZWxzIGFuZCBkYXRhIGZpbGVzLggBSwEANUJ1aWxkaW5nIHRoZSBwYXJlbnQtY2hpbGQgb3JpZ2luIGl0ZW0gdHJlZSBpbi1tZW1vcnkuCAFNAQAACwBmAU8MAIsBUAEAUShMamF2YS9sYW5nL1N0cmluZzspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3Jlc3VsdC9TZWFyY2hCcmFuY2hJdGVtUmVzdWx0U3RyZWFtOwsAjgFSDAFTAVQBAAp0b3RhbENvdW50AQADKClKCwCZAVYMAVcAngEADW9yaWdpbkl0ZW1LZXkSAAEArxIAAgCvCwCzAVsMAVwA3AEABmtleVNldAsBXgFgBwFfAQAPamF2YS91dGlsL0RlcXVlDAFhAWIBAARwdXNoAQAVKExqYXZhL2xhbmcvT2JqZWN0OylWCwFeAWQMAWUAmAEAA3BvcAsAOQFnDAFoAWkBABVmb3JTZWFyY2hJdGVtVmVyc2lvbnMBAEIoKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TZWFyY2hJdGVtVmVyc2lvbnNQYXJhbUdlbmVyYXRvcjsLAWsBbQcBbAEAPmNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NlYXJjaEl0ZW1WZXJzaW9uc1BhcmFtR2VuZXJhdG9yDAFuAWkBAA93aXRoU29ydEJ5U2F2ZWQLAWsBcAwBcQFpAQARd2l0aFNvcnRBc2NlbmRpbmcIAXMBAAhAYnJhbmNoOgsAZgF1DAF2AXcBAAlicmFuY2hLZXkBACUoKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2hLZXk7CwF5AO0HAXoBACFjb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2hLZXkLAWsBfAwA+AF9AQBVKFtMamF2YS9sYW5nL1N0cmluZzspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NlYXJjaEl0ZW1WZXJzaW9uc1BhcmFtR2VuZXJhdG9yOwsAMwF/DAGAAYEBABJzZWFyY2hJdGVtVmVyc2lvbnMBAHcoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NlYXJjaEl0ZW1WZXJzaW9uc1BhcmFtOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1NlYXJjaEl0ZW1WZXJzaW9uUmVzdWx0U3RyZWFtOwsBgwCQBwGEAQA8Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1NlYXJjaEl0ZW1WZXJzaW9uUmVzdWx0U3RyZWFtBwGGAQA2Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1NlYXJjaEl0ZW1WZXJzaW9uUmVzdWx0CAGIAQAaTWlncmF0aW5nIGl0ZW0gKCVkLyVkKTogJXMKAYoBjAcBiwEADmphdmEvbGFuZy9Mb25nDAGNAY4BAAd2YWx1ZU9mAQATKEopTGphdmEvbGFuZy9Mb25nOwsBhQEhCwGFAQgLAYUBkgwBkwFUAQAFc2F2ZWQKAAEBlQwBlgGXAQARZm9ybWF0dGVkRGF0ZVRpbWUBABUoSilMamF2YS9sYW5nL1N0cmluZzsIAZkBABlPcmlnaW5hbGx5IHNhdmVkICVzICglcykuCwGFAZsMAZwAYQEAB3NhdmVkQnkLAYUBngwBnwBhAQANY29tbWl0Q29tbWVudAoAaQGhDAGNAaIBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOwgBpAEAAgoKCAGmAQAQQGl0ZW1WZXJzaW9uS2V5OgsBqADtBwGpAQAmY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVZlcnNpb25LZXkLAYMASwoAAQGsDAAHAa0BAAQoKVtJCwGFAJwLAKwBsAwBsQGyAQAIaXRlbVR5cGUBACQoKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtVHlwZTsKAH0BtAwBtQG2AQAHb3JkaW5hbAEAAygpSQsAZgG4DAG5AboBAAptb2RlbEJ5S2V5AQBMKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5OylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoTW9kZWxJdGVtOwsAOQG8DAG9Ab4BAA5mb3JVcGRhdGVNb2RlbAEAPygpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZU1vZGVsSXRlbVBhcmFtR2VuZXJhdG9yOwsBwAHCBwHBAQA7Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vVXBkYXRlTW9kZWxJdGVtUGFyYW1HZW5lcmF0b3IMAQMBwwEAZChMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VLZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVNb2RlbEl0ZW1QYXJhbUdlbmVyYXRvcjsLAcABxQwBDQHGAQBnKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtVmVyc2lvbktleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZU1vZGVsSXRlbVBhcmFtR2VuZXJhdG9yOwsByACmBwHJAQAnY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoTW9kZWxJdGVtCwHAAcsMARUBzAEAVShMamF2YS91dGlsL0NvbGxlY3Rpb247KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVNb2RlbEl0ZW1QYXJhbUdlbmVyYXRvcjsLAcABzgwBzwHGAQASd2l0aEl0ZW1WZXJzaW9uS2V5CwHAAdEMARkBvgsByAHTDAE1AdQBAHIoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZU1vZGVsSXRlbVBhcmFtO0xqYXZhL2xhbmcvU3RyaW5nOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvTW9kZWxJdGVtVmVyc2lvbjsLAcgBVgsByAHXDAHYAdkBABNxdWVyeVZlcnNpb25IaXN0b3J5AQBGKClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5SXRlbVZlcnNpb25IaXN0b3J5UmVzdWx0U3RyZWFtOwsB2wHdBwHcAQBCY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5SXRlbVZlcnNpb25IaXN0b3J5UmVzdWx0U3RyZWFtDAHeAd8BAAZzdHJlYW0BABsoKUxqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbTsSAAMB4QwB4gHjAQAEdGVzdAEAQShMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTspTGphdmEvdXRpbC9mdW5jdGlvbi9QcmVkaWNhdGU7CwHlAecHAeYBABdqYXZhL3V0aWwvc3RyZWFtL1N0cmVhbQwB6AHpAQAGZmlsdGVyAQA5KExqYXZhL3V0aWwvZnVuY3Rpb24vUHJlZGljYXRlOylMamF2YS91dGlsL3N0cmVhbS9TdHJlYW07CwHlAesMAewB7QEACWZpbmRGaXJzdAEAFigpTGphdmEvdXRpbC9PcHRpb25hbDsKAe8B8QcB8AEAEmphdmEvdXRpbC9PcHRpb25hbAwB8gCYAQALb3JFbHNlVGhyb3cHAfQBADxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvUXVlcnlJdGVtVmVyc2lvbkhpc3RvcnlSZXN1bHQLAfMBCAsAMwH3DAH4AfkBABFtb2RlbFZlcnNpb25CeUtleQEAVChMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVZlcnNpb25LZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9Nb2RlbEl0ZW1WZXJzaW9uOwsAOQH7DAH8Af0BAAxmb3JTYXZlTW9kZWwBAD0oKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlTW9kZWxJdGVtUGFyYW1HZW5lcmF0b3I7CwH/ADUHAgABAChjb20vY29tc29sL2FwaS9kYXRhYmFzZS9Nb2RlbEl0ZW1WZXJzaW9uCwICAgQHAgMBADljb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlTW9kZWxJdGVtUGFyYW1HZW5lcmF0b3IMAQMCBQEAYihMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VLZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlTW9kZWxJdGVtUGFyYW1HZW5lcmF0b3I7CwH/AQgLAgICCAwBDQIJAQBlKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtVmVyc2lvbktleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVNb2RlbEl0ZW1QYXJhbUdlbmVyYXRvcjsLAgICCwwBFQIMAQBTKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVNb2RlbEl0ZW1QYXJhbUdlbmVyYXRvcjsLAgICDgwBEQIPAQBeKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5OylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZU1vZGVsSXRlbVBhcmFtR2VuZXJhdG9yOwoAAQIRDAAFAa0LAYUCEwwCFAIVAQAMaXRlbVNhdmVUeXBlAQAoKClMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVNhdmVUeXBlOwoCFwG0BwIYAQAkY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVNhdmVUeXBlCwICAhoMAhsB/QEAD3dpdGhUYXJnZXRBc05ldwgCHQEADENvcHkgYXMgbmV3LgsAZgIfDAIgAiEBAAlzYXZlTW9kZWwBAHAoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVNb2RlbEl0ZW1QYXJhbTtMamF2YS9sYW5nL1N0cmluZzspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL01vZGVsSXRlbVZlcnNpb247CwICAiMMAiQB/QEAF3dpdGhUYXJnZXREcmFmdFNhdmVUeXBlCAImAQAOQ29weSBhcyBkcmFmdC4LAgICKAwBzwIJCAIqAQAYTWlncmF0ZWQgbW9kZWwgdmVyc2lvbjogCAIsAQApU2tpcHBpbmcgYWxyZWFkeSBtaWdyYXRlZCBtb2RlbCB2ZXJzaW9uOiALAGYCLgwCLwIwAQAJZmlsZUJ5S2V5AQBLKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5OylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoRmlsZUl0ZW07CwA5AjIMAjMCNAEADWZvclVwZGF0ZUZpbGUBAD4oKUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVGaWxlSXRlbVBhcmFtR2VuZXJhdG9yOwsCNgI4BwI3AQA6Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vVXBkYXRlRmlsZUl0ZW1QYXJhbUdlbmVyYXRvcgwBAwI5AQBjKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUtleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZUZpbGVJdGVtUGFyYW1HZW5lcmF0b3I7CwI2AjsMAQ0CPAEAZihMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVZlcnNpb25LZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVGaWxlSXRlbVBhcmFtR2VuZXJhdG9yOwsCPgCmBwI/AQAmY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoRmlsZUl0ZW0LAjYCQQwBFQJCAQBUKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1VwZGF0ZUZpbGVJdGVtUGFyYW1HZW5lcmF0b3I7CwI2AkQMAc8CPAsCNgJGDAEZAjQLAj4CSAwBNQJJAQBwKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9VcGRhdGVGaWxlSXRlbVBhcmFtO0xqYXZhL2xhbmcvU3RyaW5nOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRmlsZUl0ZW1WZXJzaW9uOwsAOQJLDAJMAk0BAAtmb3JTYXZlRmlsZQEAPCgpTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVGaWxlSXRlbVBhcmFtR2VuZXJhdG9yOwsCTwJRBwJQAQA4Y29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZUZpbGVJdGVtUGFyYW1HZW5lcmF0b3IMAQMCUgEAYShMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2VLZXk7KUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9wYXJhbS9TYXZlRmlsZUl0ZW1QYXJhbUdlbmVyYXRvcjsLAk8CVAwBDQJVAQBkKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtVmVyc2lvbktleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVGaWxlSXRlbVBhcmFtR2VuZXJhdG9yOwsCTwJXDAEVAlgBAFIoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vU2F2ZUZpbGVJdGVtUGFyYW1HZW5lcmF0b3I7CwJPAloMARECWwEAXShMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTspTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVGaWxlSXRlbVBhcmFtR2VuZXJhdG9yOwsCTwJdDAHPAlULAGYCXwwCYAJhAQAIc2F2ZUZpbGUBAG4oTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVGaWxlSXRlbVBhcmFtO0xqYXZhL2xhbmcvU3RyaW5nOylMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRmlsZUl0ZW1WZXJzaW9uOwgCYwEAF01pZ3JhdGVkIGZpbGUgdmVyc2lvbjogCAJlAQAoU2tpcHBpbmcgYWxyZWFkeSBtaWdyYXRlZCBmaWxlIHZlcnNpb246IAsBXgFECAJoAQAtRmluaXNoZWQgbWlncmF0aW5nIGFsbCBtb2RlbHMgYW5kIGRhdGEgZmlsZXMuCAJqAQAlRmluaXNoZWQgbWlncmF0aW9uIGZyb20gJyVzJyB0byAnJXMnLgEAJUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUFwaTsBADpMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcGFyYW0vRGF0YWJhc2VBcGlQYXJhbUdlbmVyYXRvcnM7AQAOc291cmNlRGF0YWJhc2UBACJMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvRGF0YWJhc2U7AQAOdGFyZ2V0RGF0YWJhc2UBABFzb3VyY2VEYXRhYmFzZUtleQEAJUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUtleTsBABF0YXJnZXREYXRhYmFzZUtleQEAG3NvdXJjZURhdGFiYXNlQ29uZmlndXJhdGlvbgEAQUxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvUXVlcnlEYXRhYmFzZUNvbmZpZ3VyYXRpb25SZXN1bHQ7AQAbdGFyZ2V0RGF0YWJhc2VDb25maWd1cmF0aW9uAQAQc291cmNlUmVwb3NpdG9yeQEAJExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9SZXBvc2l0b3J5OwEADHNvdXJjZUJyYW5jaAEAIExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2g7AQAQdGFyZ2V0UmVwb3NpdG9yeQEADHRhcmdldEJyYW5jaAEAEXNvdXJjZURlc2NyaXB0aW9uAQASTGphdmEvbGFuZy9TdHJpbmc7AQARdGFyZ2V0RGVzY3JpcHRpb24BABlwYXJlbnRDaGlsZFRhZ0Fzc2lnbm1lbnRzAQAPTGphdmEvdXRpbC9NYXA7AQAVc291cmNlVGFnUmVzdWx0U3RyZWFtAQA9TGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3Jlc3VsdC9TZWFyY2hCcmFuY2hJdGVtUmVzdWx0U3RyZWFtOwEAD3NvdXJjZVRhZ1Jlc3VsdAEAN0xjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvU2VhcmNoQnJhbmNoSXRlbVJlc3VsdDsBAAZ0YWdLZXkBACFMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTsBAAlzb3VyY2VUYWcBACdMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvQnJhbmNoVGFnSXRlbTsBAAxwYXJlbnRUYWdLZXkBAAxtaWdyYXRlZFRhZ3MBAA9MamF2YS91dGlsL1NldDsBAAh0YWdRdWV1ZQEAEUxqYXZhL3V0aWwvUXVldWU7AQAKcm9vdFRhZ0tleQEAFnNvdXJjZVRhZ1ZlcnNpb25SZXN1bHQBADhMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L0dldFRhZ0l0ZW1WZXJzaW9uUmVzdWx0OwEAD3RhcmdldFRhZ1Jlc3VsdAEACXRhcmdldFRhZwEAFXNvdXJjZUFzc2lnbmVkVGFnS2V5cwEAFXRhcmdldEFzc2lnbmVkVGFnS2V5cwEAGnBhcmVudENoaWxkT3JpZ2luUmVsYXRpb25zAQAQaXRlbVJlc3VsdFN0cmVhbQEADnRvdGFsSXRlbUNvdW50AQABSgEACml0ZW1SZXN1bHQBAAlpdGVtU3RhY2sBABFMamF2YS91dGlsL0RlcXVlOwEAD3Byb2dyZXNzQ291bnRlcgEAHXNvdXJjZUl0ZW1WZXJzaW9uUmVzdWx0U3RyZWFtAQA+TGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3Jlc3VsdC9TZWFyY2hJdGVtVmVyc2lvblJlc3VsdFN0cmVhbTsBABFzYXZlZEZpcnN0VmVyc2lvbgEAAVoBABdzb3VyY2VJdGVtVmVyc2lvblJlc3VsdAEAOExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvU2VhcmNoSXRlbVZlcnNpb25SZXN1bHQ7AQAoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1WZXJzaW9uS2V5OwEADXNhdmVkRGF0ZVRpbWUBAAhhZGRlbmR1bQEAFW9yaWdpbmFsQ29tbWl0Q29tbWVudAEAF3RhcmdldEl0ZW1WZXJzaW9uUmVzdWx0AQAVc291cmNlQnJhbmNoTW9kZWxJdGVtAQApTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0JyYW5jaE1vZGVsSXRlbTsBABFvcmlnaW5Nb2RlbFJlc3VsdAEAPkxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9yZXN1bHQvUXVlcnlJdGVtVmVyc2lvbkhpc3RvcnlSZXN1bHQ7AQASb3JpZ2luTW9kZWxWZXJzaW9uAQAqTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL01vZGVsSXRlbVZlcnNpb247AQASc2F2ZU1vZGVsSXRlbVBhcmFtAQA7TGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL3BhcmFtL1NhdmVNb2RlbEl0ZW1QYXJhbUdlbmVyYXRvcjsBABRzb3VyY2VCcmFuY2hGaWxlSXRlbQEAKExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9CcmFuY2hGaWxlSXRlbTsBABR0YXJnZXRCcmFuY2hGaWxlSXRlbQEADGNoaWxkSXRlbUtleQEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBAGRMamF2YS91dGlsL01hcDxMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTtMamF2YS91dGlsL1NldDxMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTs+Oz47AQAyTGphdmEvdXRpbC9TZXQ8TGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1LZXk7PjsBADRMamF2YS91dGlsL1F1ZXVlPExjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtS2V5Oz47AQA0TGphdmEvdXRpbC9EZXF1ZTxMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTs+OwEADVN0YWNrTWFwVGFibGUHArsBACNjb20vY29tc29sL2FwaS9kYXRhYmFzZS9EYXRhYmFzZUtleQcCvQEAE2phdmEvbGFuZy9UaHJvd2FibGUBABFEYXRhYmFzZU1pZ3JhdGlvbggCvgoAAQLBDALCAsMBAApjYWxsTWV0aG9kAQA5KExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7CQABAsUMAAUABgoCFwLHDALIAskBAAZ2YWx1ZXMBACkoKVtMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbVNhdmVUeXBlOwkCFwLLDALMAs0BAAVEUkFGVAEAJkxjb20vY29tc29sL2FwaS9kYXRhYmFzZS9JdGVtU2F2ZVR5cGU7CQIXAs8MAtACzQEAB1JFR1VMQVIHAtIBABpqYXZhL2xhbmcvTm9TdWNoRmllbGRFcnJvcgcABgkAAQLVDAAHAAYKAH0C1wwCyALYAQAlKClbTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1UeXBlOwkAfQLaDALbAIIBAARGSUxFCQB9At0MAt4AggEABU1PREVMAQAIbGFtYmRhJDABADIoTGNvbS9jb21zb2wvYXBpL2RhdGFiYXNlL0l0ZW1LZXk7KUxqYXZhL3V0aWwvU2V0OwEAA2tleQEACGxhbWJkYSQxAQAIbGFtYmRhJDIBAAhsYW1iZGEkMwEAYihMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvSXRlbUtleTtMY29tL2NvbXNvbC9hcGkvZGF0YWJhc2UvcmVzdWx0L1F1ZXJ5SXRlbVZlcnNpb25IaXN0b3J5UmVzdWx0OylaCwHzAJwLAKwBKAEAAW0BAApTb3VyY2VGaWxlAQAQQm9vdHN0cmFwTWV0aG9kcwoC7ALuBwLtAQAiamF2YS9sYW5nL2ludm9rZS9MYW1iZGFNZXRhZmFjdG9yeQwC7wLwAQALbWV0YWZhY3RvcnkBAMwoTGphdmEvbGFuZy9pbnZva2UvTWV0aG9kSGFuZGxlcyRMb29rdXA7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9pbnZva2UvTWV0aG9kVHlwZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlO0xqYXZhL2xhbmcvaW52b2tlL01ldGhvZEhhbmRsZTtMamF2YS9sYW5nL2ludm9rZS9NZXRob2RUeXBlOylMamF2YS9sYW5nL2ludm9rZS9DYWxsU2l0ZTsPBgLrAQAmKExq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 ��oRANASGLgAGhkmuQHWAQC5AdoBABknugHgAAC5AeQCALkB6gEAtgHuwAHzOigRANcSGLgAGhkEGSi5AfUBALkB9gIAOikRANsSGLgAGiy5AfoBABkpuQH+AQC5AgECABkpuQIGAQC5AgcCABkmuQHHAQC5AgoCABkbuQINAgA6KhEA4RIYuAAauAIQGR65AhIBALYCFi6qAAAAAABhAAAAAQAAAAIAAAAXAAAAPBEA4xIYuAAaGQwZKrkCGQEAEwIcuQIeAwBXEQDkEhi4ABqnADARAOYSGLgAGhkMGSq5AiIBABMCJbkCHgMAVxEA5xIYuAAapwALEQDpEhi4ABoRAOsSGLgAGhkMGRu5AbcCACy5AbsBABkFuQG/AgAZILkBxAIAGSa5AccBALkBygIAGSC5Ac0CALkB0AEAGSS5AdIDAFenAEMRAPQSGLgAGhkMLLkB+gEAGQW5AgECABkguQIHAgAZJrkBxwEAuQIKAgAZG7kCDQIAGSC5AicCABkkuQIeAwBXEQD9Ehi4ABq7AOZZEwIptwDqGSG2AO+2APO4AHCnACARAP8SGLgAGrsA5lkTAiu3AOoZIbYA77YA87gAcBEBARIYuAAapwEeEQEDEhi4ABoZChkeuQGuAQC5Ai0CADonEQEEEhi4ABoZJccAyREBBRIYuAAaFR2ZAFwRAQYSGLgAGhkMGR65Aa4BALkCLQIAOigRAQcSGLgAGhkoLLkCMQEAGQW5AjUCABkguQI6AgAZJ7kCPQEAuQJAAgAZILkCQwIAuQJFAQAZJLkCRwMAV6cAQxEBDxIYuAAaGQwsuQJKAQAZBbkCTgIAGSC5AlMCABknuQI9AQC5AlYCABkbuQJZAgAZILkCXAIAGSS5Al4DAFcRARcSGLgAGrsA5lkTAmK3AOoZIbYA77YA87gAcKcAIBEBGRIYuAAauwDmWRMCZLcA6hkhtgDvtgDzuABwEQEbEhi4ABqnAAsRAR0SGLgAGhEBHxIYuAAaBDYdGR+5AL4BAJr7KhEBIhIYuAAaGRQZG7gA17kA3QMAwAC4uQDhAQA6H6cAIBkfuQCTAQDAAKw6HhEBIxIYuAAaGRgZHrkBXQIAGR+5AL4BAJr/3BkYuQJmAQCZ+kQRAScSGLgAGhMCZ7gAcBEBKRIYuAAaEwJpBb0AXFkDGQ1TWQQZDlO4AGi4AHARASoSGLgAGqcADDorArgAEhkrvwK4ABKxAAEABAwwDDAAAAAEAA0AAAM+AM8AAAAPAAQAEwAPABQAGgAZACoAGgA7ABwASgAdAFoAHwBiACAAdAAhAH4AIgCGACMAmAAkAKIAKACxACkAwQAqANEAKwDhAC0BEQAuAUEAMAFeADIBagA0AXoANgGfADgBvgA5Ac4AOgHgADsCBAA8AiQAOwIuADgCOABAAkQARgJUAEcCZABJAngASgKJAEsCmgBNAqQATgK3AFAC4wBRAvYAUgMHAFQDGQBVAykAWAMzAFkDPgBaA00AWwNpAFgDbgBbA3gAXQOEAF4DjgBfA5MAYAOaAGEDpgBiA7MAYwO7AGQDwQBeA8cAZgPlAGgD6ABpA/oAagQNAGsEIABtBDMAbgRXAHAEdQBzBHgAdASKAHYEogB3BLQAeQTSAFAE3ABNBOYAfwTzAIEFAQCDBQ8AhQUgAIcFNACIBUUAigVlAIsFdgCMBYMAjQWpAI4FrACPBcgAigXSAJcF4wCZBggAmgYZAJkGIwCdBi4AnwY5AKAGTQCjBlUApAZXAKUGXACmBmEApwZsAKgGpwCkBqwAowauAKsGuQCtBtkArwbmALAHGgCzBysAtQc/ALYHYgC3B3MAuAehALsHqQC8B6wAvQe3AL4H1AC8B9kAvgfhALsH4wDACBQAwggnAMMINADECEEAxQhTAMYIWADHCF8AyAhmAMkIcgDKCHkAywiAAMUIhgDMCIkAzQiaAM4IpwDQCLEA0Qi2ANIIuwDTCMcA1AjMANUI1ADXCOwA2wj1ANwI+gDdCQYA3gkSAN8JHgDgCScA4QlUAOMJbgDkCXkA5gmTAOcJngDpCaYA6wm4AOwJvQDtCcQA7gnLAO8J1wDwCd4A8QnlAOsJ6wDzCe4A9An5APUJ/gD2CgUA9woMAPgKGAD5Ch8A+gooAPQKLgD9CksA/gpOAP8KawEBCnYBAwqOAQQKmwEFCqgBBgrAAQcKywEICtABCQrXAQoK3gELCuoBDArxAQ0K+AEHCv4BDgsBAQ8LDAEQCxEBEQsYARILHwETCysBFAsyARULOwEPC0EBFwteARgLYQEZC34BGwuJAR0LkQEfC5wArQumASIL0wEjC+QBIgvuAJ8L+AEnDAYBKQwlASoADgAAAlAAOwAADD4ADwAQAAAADwweACICawABABoMEwAmAmwAAgAqDAMCbQJuAAMAOwvyAm8CbgAEAEoL4wJwAnEABQBaC9MCcgJxAAYAfguvAnMCdAAHAKILiwJ1AnQACACxC3wCdgJ3AAkAwQtsAngCeQAKANELXAJ6AncACwDhC0wCewJ5AAwBEQscAnwCfQANAUEK7AJ+An0ADgF6CrMCfwKAAA8BnwqOAoECggAQAb4AcAKDAoQAEQHOAGAChQKGABMB4ABOAocCiAAUAgQAIAKJAoYAFQJUCdkCigKLABECZAnJAowCjQASAngJtQKOAoYAEwK3AiUCiQKGABQC4wHvAoUChgAVAxkBXAKHAogAFwMpAUwCjwKQABgDeAD9ApEChAAZA/oAewKSAogAGgQNAGgCkwKLABsEIABVApQCiwAcBIoASAKSAogAFwUgBw0ClQKAABQFNAb5ApYCggAVBUUG6AKXApgAFgVlAGMCmQKEABgFdgBSAVcChgAaBeMGSgKaApsAGAYIABEAnQKGABkGLgX/ApwCmAAZBk0FoQCdAoYAGwauBUACnQKeABwGuQU1Ap8CoAAdBtkEwwKhAqIAHgcrBHEBCQKjACAHPwRdAqQCfQAhB2IEOgKlAn0AIgdzBCkCpgJ9ACMHoQP7AZ8CfQAkB+MDuQKnAqIAJQgnAk8CqAKpACYImgGUAVcChgAnCNQBFwKqAqsAKAjsAP8CrAKtACkJJwDEAq4CrwAqCo4A+wKwArEAJwrAAD4CsgKxACgL0wARArMChgAeArQAAABIAAcBegqzAn8CtQAPAlQJ2QKKArYAEQJkCckCjAK3ABIEDQBoApMCtgAbBCAAVQKUArYAHAUgBw0ClQK1ABQF4wZKApoCuAAYArkAAAcbACv/AbIAEwcAAQcAKwcAOQcAMwcAMwcCugcCugcATgcATgcAVQcAZgcAVQcAZgcAaQcAaQcAswcAjgAHAJQAAP8ARQAXBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwCZBwCUBwCsBwCkAAcAlAAAK/8ACQATBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOAAcAlAAA/wB1ABQHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwAAP8AMgAXBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCsAAcAlAAA/wEQABoHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHAKwHAKwHAJQHAKQHAQYHAJkAAPgAj/8AWQAXBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCsAAcAlAAA/wAJABQHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwAAP8AfAAZBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAAHAJQAAP8AUgAaBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAcAmQcAlAcArAAA/wAbABkHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHALMHAI4EAAcAlAAA/wAzABoHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHALMHAI4EBwFeAAcAlAAAHP8AHwAZBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAcBXgQAAP8AkwAeBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAcBXgQHAKwHAYMBAAcAlAAA/wBMAB4HAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHALMHAI4EBwFeBAcArAcBgwEHAYUHAJQAAP8AggAiBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAcBXgQHAKwHAYMBBwGFBwCUBwGoBwBpBwBpBwBpAABBBwBp/QB0BwBpBwGF/AB0BwHI/wDKACkHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHALMHAI4EBwFeBAcArAcBgwEHAYUHAJQHAagHAGkHAGkHAGkHAGkHAYUHAcgHAKwHAfMHAf8HAgIAACQkB/gAR/oAPx8c+gAK/wCKACYHAAEHACsHADkHADMHADMHAroHAroHAE4HAE4HAFUHAGYHAFUHAGYHAGkHAGkHALMHAI4HALgHANIHAKwHALMHAI4EBwFeBAcArAcBgwEHAYUHAJQHAagHAGkHAGkHAGkHAGkHAYUABwI+AAA/Hxz/AAoAJAcAAQcAKwcAOQcAMwcAMwcCugcCugcATgcATgcAVQcAZgcAVQcAZgcAaQcAaQcAswcAjgcAuAcA0gcArAcAswcAjgQHAV4EBwCsBwGDAQcBhQcAlAcBqAcAaQcAaQcAaQcAaQcBhQAAB/8ACgAeBwABBwArBwA5BwAzBwAzBwK6BwK6BwBOBwBOBwBVBwBmBwBVBwBmBwBpBwBpBwCzBwCOBwC4BwDSBwCsBwCzBwCOBAcBXgQHAKwHAYMBAAcAlAAAKhz/AAkAGQcAAQcAKwcAOQcAMwcAMwcCugcCugcATgcATgcAVQcAZgcAVQcAZgcAaQcAaQcAswcAjgcAuAcA0gcArAcAswcAjgQHAV4EAAD/AEEAAQcAAQABBwK8CAAEAr4ACQABAAoAAAA2AAIAAQAAAAwTAr8DvQBcuALAV7EAAAACAA0AAAAGAAEAAAEuAA4AAAAMAAEAAAAMAA8AEAAAEAgABQGtAAEACgAAAH8AAwABAAAAMLICxFnGAASwV7gCxr68CksqsgLKtgIWBU+nAARXKrICzrYCFgRPpwAEVypZswLEsAACABAAGQAcAtEAHQAmACkC0QADAA0AAAAGAAEAAAANAA4AAAACAAACuQAAABkABUgHAtP/ABMAAQcC0wABBwLRAEsHAtEAEAgABwGtAAEACgAAAJkAAwABAAAAPbIC1FnGAASwV7gC1r68CksqsgLZtgGzBk+nAARXKrIC3LYBswVPpwAEVyqyAH+2AbMET6cABFcqWbMC1LAAAwAQABkAHALRAB0AJgApAtEAKgAzADYC0QADAA0AAAAGAAEAAAANAA4AAAACAAACuQAAAB4AB0gHAtP/ABMAAQcC0wABBwLRAEsHAtEASwcC0QAQCgLfAuAAAQAKAAAAMgACAAEAAAAIuwDEWbcAxrAAAAACAA0AAAAGAAEAAAA8AA4AAAAMAAEAAAAIAuEChgAAEAoC4gLgAAEACgAAADIAAgABAAAACLsAxFm3AMawAAAAAgANAAAABgABAAAAjQAOAAAADAABAAAACALhAoYAABAKAuMC4AABAAoAAAAyAAIAAQAAAAi7AMRZtwDGsAAAAAIADQAAAAYAAQAAAI8ADgAAAAwAAQAAAAgC4QKGAAAQCgLkAuUAAQAKAAAANwACAAIAAAANK7kC5gEAKrkC5wIArAAAAAIADQAAAAYAAQAAANMADgAAAAwAAQAAAA0C6AKrAAEAAwLpAAAAAgK+AuoAAAAqAAQC8QADAvMC9gL3AvEAAwL4AvsC/ALxAAMC/QMAAwEC8QADAwIDBQMHAwgAAAAKAAEDCQMLAw0AGQ==}
1,'builder.DatabaseMigration'
>parentChildTagAssignments = new HashMap<>(); SearchBranchItemResultStream sourceTagResultStream = sourceBranch.searchItems(param.forSearchItemsForBranch().withItemTypes(ItemType.TAG)); for (SearchBranchItemResult sourceTagResult : sourceTagResultStream) { ItemKey tagKey = sourceTagResult.itemKey(); BranchTagItem sourceTag = sourceBranch.tagByKey(tagKey); for (ItemKey parentTagKey : sourceTag.assignedTagKeys()) { parentChildTagAssignments.computeIfAbsent(parentTagKey, key -> new HashSet<>()).add(tagKey); } } debugLog("Migrating all tags."); // Parent tags need to be migrated before child tags. Perform the migration via a non-recursive // breadth-first-search (BFS) traversal of the source tag tree. We only migrate the latest version // of each tag from the source branch. Set migratedTags = new HashSet<>(); Queue tagQueue = new ArrayDeque<>(); ItemKey rootTagKey = sourceDatabase.rootTag().itemKey(); migratedTags.add(rootTagKey); // The root tag is always present in all databases so we skip migrating it. tagQueue.add(rootTagKey); while (!tagQueue.isEmpty()) { ItemKey parentTagKey = tagQueue.poll(); for (ItemKey tagKey : parentChildTagAssignments.getOrDefault(parentTagKey, Collections.emptySet())) { if (migratedTags.add(tagKey)) { tagQueue.add(tagKey); BranchTagItem sourceTag = sourceBranch.tagByKey(tagKey); GetTagItemVersionResult sourceTagVersionResult = sourceTag.get(); // Check if the tag already exists in the target branch. SearchBranchItemResult targetTagResult = targetBranch.searchItems(param .forSearchItemsForBranch() .withItemTypes(ItemType.TAG) .withSearchFilters("@itemKey:"+tagKey.value())).firstOrNull(); if (targetTagResult == null) { targetBranch.saveTag(param .forSaveTag() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(sourceTagVersionResult.itemVersionKey()) .withItemKey(tagKey) .withAssignedTagKeys(parentTagKey) .withIgnoreConflicts(), null); debugLog(String.format("Migrated tag '%s'.", sourceTagVersionResult.title())); } else { // Tag already exists in target database. BranchTagItem targetTag = targetBranch.tagByKey(tagKey); Set sourceAssignedTagKeys = Set.copyOf(sourceTag.assignedTagKeys()); Set targetAssignedTagKeys = Set.copyOf(targetTag.assignedTagKeys()); if (!sourceAssignedTagKeys.equals(targetAssignedTagKeys)) { targetTag.update(param.forUpdateTag().withAssignedTagKeys(parentTagKey), null); debugLog(String.format("Updated tag assignment for tag '%s'.", targetTag.title())); } } } else { // Tag already migrated to target database. Assign additional tags if needed. BranchTagItem targetTag = targetBranch.tagByKey(tagKey); if (!targetTag.assignedTagKeys().contains(parentTagKey)) { targetTag.assignTag(parentTagKey, null); debugLog(String.format("Added tag assignment for tag '%s'.", targetTag.title())); } } } } debugLog("Finished migrating all tags."); debugLog("Migrating all models and data files."); debugLog("Building the parent-child origin item tree in-memory."); Map < ItemKey, Set < ItemKey>>parentChildOriginRelations = new HashMap<>(); SearchBranchItemResultStream itemResultStream = sourceBranch.searchItems(""); long totalItemCount = itemResultStream.totalCount(); for (SearchBranchItemResult itemResult : itemResultStream) { ItemKey originItemKey = itemResult.originItemKey(); if (originItemKey != null) { parentChildOriginRelations.computeIfAbsent(originItemKey, key -> new HashSet<>()).add(itemResult.itemKey()); } else { parentChildOriginRelations.computeIfAbsent(itemResult.itemKey(), key -> new HashSet<>()); } } // Origin items need to be migrated before their descendant items. Perform the migration via a non-recursive // depth-first-search (DFS) traversal of the origin item tree. Unlike the tag tree, we know that each child // only has one parent. Deque itemStack = new ArrayDeque<>(); for (ItemKey itemKey : parentChildOriginRelations.keySet()) { itemStack.push(itemKey); } long progressCounter = 0L; while (!itemStack.isEmpty()) { ItemKey itemKey = itemStack.pop(); // Read all versions of the item on the source branch, sorted by saved date in ascending order. SearchItemVersionResultStream sourceItemVersionResultStream = sourceDatabase.searchItemVersions(param .forSearchItemVersions() .withSortBySaved() .withSortAscending() .withSearchFilters("@itemKey:"+itemKey.value(), "@branch:"+sourceBranch.branchKey().value())); // We need to distinguish between saving the first version of the item and saving all subsequent versions. boolean savedFirstVersion = false; for (SearchItemVersionResult sourceItemVersionResult : sourceItemVersionResultStream) { if (!savedFirstVersion) { debugLog(String.format("Migrating item (%d/%d): %s", ++progressCounter, totalItemCount, sourceItemVersionResult.title())); } ItemVersionKey itemVersionKey = sourceItemVersionResult.itemVersionKey(); String savedDateTime = formattedDateTime(sourceItemVersionResult.saved()); String addendum = String.format("Originally saved %s (%s).", savedDateTime, sourceItemVersionResult.savedBy()); String originalCommitComment = sourceItemVersionResult.commitComment(); String commitComment = originalCommitComment != null ? originalCommitComment+"\n\n"+addendum : addendum; // Check if this version has already been migrated. SearchItemVersionResult targetItemVersionResult = targetDatabase.searchItemVersions(param .forSearchItemVersions() .withSearchFilters("@itemVersionKey:"+itemVersionKey.value())).firstOrNull(); switch (sourceItemVersionResult.itemKey().itemType()) { case MODEL: BranchModelItem sourceBranchModelItem = sourceBranch.modelByKey(itemKey); if (targetItemVersionResult == null) { if (savedFirstVersion) { targetBranch.modelByKey(itemKey).update(param .forUpdateModel() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(itemVersionKey) .withAssignedTagKeys(sourceBranchModelItem.assignedTagKeys()) .withItemVersionKey(itemVersionKey) .withIgnoreConflicts(), commitComment); } else { ItemKey originItemKey = sourceBranchModelItem.originItemKey(); if (originItemKey != null) { QueryItemVersionHistoryResult originModelResult = sourceBranchModelItem .queryVersionHistory() .stream() .filter(m -> m.itemKey().equals(originItemKey)) .findFirst() .orElseThrow(); ModelItemVersion originModelVersion = targetDatabase.modelVersionByKey(originModelResult.itemVersionKey()); // Create a first version for the child model of the origin model as a direct copy of the // origin model version. SaveModelItemParamGenerator saveModelItemParam = param .forSaveModel() .withSourceDatabaseKey(originModelVersion.databaseKey()) .withSourceItemVersionKey(originModelVersion.itemVersionKey()) .withAssignedTagKeys(sourceBranchModelItem.assignedTagKeys()) .withItemKey(itemKey); switch (sourceItemVersionResult.itemSaveType()) { case REGULAR: targetBranch.saveModel(saveModelItemParam.withTargetAsNew(), "Copy as new."); break; case DRAFT: targetBranch.saveModel(saveModelItemParam.withTargetDraftSaveType(), "Copy as draft."); break; default: break; } targetBranch.modelByKey(itemKey).update(param .forUpdateModel() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(itemVersionKey) .withAssignedTagKeys(sourceBranchModelItem.assignedTagKeys()) .withItemVersionKey(itemVersionKey) .withIgnoreConflicts(), commitComment); } else { targetBranch.saveModel(param .forSaveModel() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(itemVersionKey) .withAssignedTagKeys(sourceBranchModelItem.assignedTagKeys()) .withItemKey(itemKey) .withItemVersionKey(itemVersionKey), commitComment); } } debugLog("Migrated model version: "+savedDateTime); } else { debugLog("Skipping already migrated model version: "+savedDateTime); } break; case FILE: BranchFileItem sourceBranchFileItem = sourceBranch.fileByKey(sourceItemVersionResult.itemKey()); if (targetItemVersionResult == null) { if (savedFirstVersion) { BranchFileItem targetBranchFileItem = targetBranch.fileByKey(sourceItemVersionResult.itemKey()); targetBranchFileItem.update(param .forUpdateFile() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(itemVersionKey) .withAssignedTagKeys(sourceBranchFileItem.assignedTagKeys()) .withItemVersionKey(itemVersionKey) .withIgnoreConflicts(), commitComment); } else { targetBranch.saveFile(param .forSaveFile() .withSourceDatabaseKey(sourceDatabaseKey) .withSourceItemVersionKey(itemVersionKey) .withAssignedTagKeys(sourceBranchFileItem.assignedTagKeys()) .withItemKey(itemKey) .withItemVersionKey(itemVersionKey), commitComment); } debugLog("Migrated file version: "+savedDateTime); } else { debugLog("Skipping already migrated file version: "+savedDateTime); } break; default: break; } savedFirstVersion = true; } for (ItemKey childItemKey : parentChildOriginRelations.getOrDefault(itemKey, Collections.emptySet())) { itemStack.push(childItemKey); } } debugLog("Finished migrating all models and data files."); debugLog(String.format("Finished migration from '%s' to '%s'.", sourceDescription, targetDescription)); } }" name="p:code">
13,'p:error','p:breakpoints','p:breakpointStates','p:foldedRanges','p:showinmodelbuilder','p:inputNames','p:inputTypes','p:inputDefaults','p:inputDescs','p:inputUnits','p:outputType','p:outputName','p:inputsmoved'
COMSOL
COMSOL
COMSOL
COMSOL
NODEACTIVATE
COMSOL
1,'p:methodcall.argschanged'
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
$null
animate.png
fileResource1.png
true
true
$null
animate_32.png
fileResource2.png
true
true
$null
clear.png
fileResource3.png
true
true
$null
clear_32.png
fileResource4.png
true
true
$null
compute.png
fileResource5.png
true
true
$null
compute_32.png
fileResource6.png
true
true
$null
��
comsol.png
fileResource7.png
true
true
$null
comsol_32.png
fileResource8.png
true
true
$null
delete.png
fileResource9.png
true
true
$null
delete_32.png
fileResource10.png
true
true
$null
email.png
fileResource11.png
true
true
$null
email_32.png
fileResource12.png
true
true
$null
export.png
fileResource13.png
true
true
$null
export_32.png
fileResource14.png
true
true
$null
geometry.png
fileResource15.png
true
true
$null
geometry_32.png
fileResource16.png
true
true
$null
help.png
fileResource17.png
true
true
$null
help_32.png
fileResource18.png
true
true
$null
import.png
fileResource19.png
true
true
$null
import_32.png
fileResource20.png
true
true
$null
information.png
fileResource21.png
true
true
$null
information_32.png
fileResource22.png
true
true
$null
library.png
fileResource23.png
true
true
$null
library_32.png
fileResource24.png
true
true
$null
material.png
fileResource25.png
true
true
$null
material_32.png
fileResource26.png
true
true
$null
mesh.png
fileResource27.png
true
true
$null
mesh_32.png
fileResource28.png
true
true
$null
model.png
fileResource29.png
true
true
$null
model_32.png
fileResource30.png
true
true
$null
not_available.png
fileResource31.png
true
true
$null
not_available_32.png
fileResource32.png
true
true
$null
notations.png
fileResource33.png
true
true
$null
notations_32.png
fileResource34.png
true
true
$null
optimize.png
fileResource35.png
true
true
$null
optimize_32.png
fileResource36.png
true
true
$null
pdf.png
fileResource37.png
true
true
$null
pdf_32.png
fileResource38.png
true
true
$null
physics.png
fileResource39.png
true
true
$null
physics_32.png
fileResource40.png
true
true
$null
plot.png
fileResource41.png
true
true
$null
plot_32.png
fileResource42.png
true
true
$null
preferences.png
fileResource43.png
true
true
$null
preferences_32.png
fileResource44.png
true
true
$null
report.png
fileResource45.png
true
true
$null
report_32.png
fileResource46.png
true
true
$null
reset.png
fileResource47.png
true
true
$null
reset_32.png
fileResource48.png
true
true
$null
results.png
fileResource49.png
true
true
$null
results_32.png
fileResource5(��0.png
true
true
$null
settings.png
fileResource51.png
true
true
$null
settings_32.png
fileResource52.png
true
true
$null
study.png
fileResource53.png
true
true
$null
study_32.png
fileResource54.png
true
true
$null
update.png
fileResource55.png
true
true
$null
update_32.png
fileResource56.png
true
true
$null
warning.png
fileResource57.png
true
true
$null
warning_32.png
fileResource58.png
true
true
$null
success.wav
fileResource59.wav
true
$null
fail.wav
fileResource60.wav
true
$null
neutral.wav
fileResource61.wav
true
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
COMSOL
PKp�}F( ( PK 2DQZ model.xml� 0�
PK�{�� � PK 2DQZ resources/fileResource1.png� X��PNG IHDR ��a tEXtSoftware Adobe ImageReadyq�e<