{"configuration":{},"description":"This is an example workspace to illustrate the key features of Structurizr, via the DSL, based around a fictional online banking system.","documentation":{},"id":6,"lastModifiedAgent":"structurizr-cli/","lastModifiedDate":"2025-01-28T15:57:26Z","lastModifiedUser":"root@3aa3938fc6fa","model":{"deploymentNodes":[{"children":[{"containerInstances":[{"containerId":"8","deploymentGroups":["Default"],"environment":"Development","id":"52","instanceId":1,"properties":{"structurizr.dsl.identifier":"developersinglepageapplicationinstance"},"relationships":[{"description":"Makes API calls to","destinationId":"57","id":"58","linkedRelationshipId":"33","sourceId":"52","technology":"JSON/HTTPS"}],"tags":"Container Instance"}],"environment":"Development","id":"51","instances":"1","name":"Web Browser","properties":{"structurizr.dsl.identifier":"ca176e5a-50d6-4f7a-8815-627f62629c90"},"tags":"Element,Deployment Node","technology":"Chrome, Firefox, Safari, or Edge"},{"children":[{"containerInstances":[{"containerId":"10","deploymentGroups":["Default"],"environment":"Development","id":"55","instanceId":1,"properties":{"structurizr.dsl.identifier":"developerwebapplicationinstance"},"relationships":[{"description":"Delivers to the customer's web browser","destinationId":"52","id":"56","linkedRelationshipId":"31","sourceId":"55"}],"tags":"Container Instance"},{"containerId":"11","deploymentGroups":["Default"],"environment":"Development","id":"57","instanceId":1,"properties":{"structurizr.dsl.identifier":"developerapiapplicationinstance"},"relationships":[{"description":"Reads from and writes to","destinationId":"61","id":"62","linkedRelationshipId":"45","sourceId":"57","technology":"SQL/TCP"},{"description":"Makes API calls to","destinationId":"65","id":"66","linkedRelationshipId":"47","sourceId":"57","technology":"XML/HTTPS"}],"tags":"Container Instance"}],"environment":"Development","id":"54","instances":"1","name":"Apache Tomcat","properties":{"structurizr.dsl.identifier":"35514ab6-34d3-4f97-a9c5-c59347ae747b"},"tags":"Element,Deployment Node","technology":"Apache Tomcat 8.x"}],"environment":"Development","id":"53","instances":"1","name":"Docker Container - Web Server","properties":{"structurizr.dsl.identifier":"3f691a51-d953-46d5-b85a-e71debe02743"},"tags":"Element,Deployment Node","technology":"Docker"},{"children":[{"containerInstances":[{"containerId":"18","deploymentGroups":["Default"],"environment":"Development","id":"61","instanceId":1,"properties":{"structurizr.dsl.identifier":"developerdatabaseinstance"},"tags":"Container Instance"}],"environment":"Development","id":"60","instances":"1","name":"Database Server","properties":{"structurizr.dsl.identifier":"9ecdddd3-24df-4c51-bd1d-2f4b0cad7bba"},"tags":"Element,Deployment Node","technology":"Oracle 12c"}],"environment":"Development","id":"59","instances":"1","name":"Docker Container - Database Server","properties":{"structurizr.dsl.identifier":"6161a587-7646-4d4a-a940-1063b87c2bfc"},"tags":"Element,Deployment Node","technology":"Docker"}],"environment":"Development","id":"50","instances":"1","name":"Developer Laptop","properties":{"structurizr.dsl.identifier":"5ed3feaf-c6d5-4bcd-b85f-2734bd37f76b"},"tags":"Element,Deployment Node","technology":"Microsoft Windows 10 or Apple macOS"},{"children":[{"environment":"Development","id":"64","instances":"1","name":"bigbank-dev001","properties":{"structurizr.dsl.identifier":"c98d8719-51e7-41d3-a2b1-1a1ccfa83a99"},"softwareSystemInstances":[{"deploymentGroups":["Default"],"environment":"Development","id":"65","instanceId":1,"properties":{"structurizr.dsl.identifier":"5906ec64-33b2-48a1-82af-526c7b1886b5"},"softwareSystemId":"4","tags":"Software System Instance"}],"tags":"Element,Deployment Node"}],"environment":"Development","id":"63","instances":"1","name":"Big Bank plc","properties":{"structurizr.dsl.identifier":"8f0401a2-72bc-45e9-93fc-b5fa8d8ea6cb"},"tags":"Element,Deployment Node","technology":"Big Bank plc data center"},{"containerInstances":[{"containerId":"9","deploymentGroups":["Default"],"environment":"Live","id":"68","instanceId":1,"properties":{"structurizr.dsl.identifier":"livemobileappinstance"},"relationships":[{"description":"Makes API calls to","destinationId":"79","id":"80","linkedRelationshipId":"37","sourceId":"68","technology":"JSON/HTTPS"}],"tags":"Container Instance"}],"environment":"Live","id":"67","instances":"1","name":"Customer's mobile device","properties":{"structurizr.dsl.identifier":"a5d1f3bc-a36a-42cc-8035-3632616f2e44"},"tags":"Element,Deployment Node","technology":"Apple iOS or Android"},{"children":[{"containerInstances":[{"containerId":"8","deploymentGroups":["Default"],"environment":"Live","id":"71","instanceId":1,"properties":{"structurizr.dsl.identifier":"livesinglepageapplicationinstance"},"relationships":[{"description":"Makes API calls to","destinationId":"79","id":"81","linkedRelationshipId":"33","sourceId":"71","technology":"JSON/HTTPS"}],"tags":"Container Instance"}],"environment":"Live","id":"70","instances":"1","name":"Web Browser","properties":{"structurizr.dsl.identifier":"e0c4b539-1d76-4e97-bb19-5528e6829e66"},"tags":"Element,Deployment Node","technology":"Chrome, Firefox, Safari, or Edge"}],"environment":"Live","id":"69","instances":"1","name":"Customer's computer","properties":{"structurizr.dsl.identifier":"1987d9f4-1009-4774-87b8-6803e93168d6"},"tags":"Element,Deployment Node","technology":"Microsoft Windows or Apple macOS"},{"children":[{"children":[{"containerInstances":[{"containerId":"10","deploymentGroups":["Default"],"environment":"Live","id":"75","instanceId":1,"properties":{"structurizr.dsl.identifier":"livewebapplicationinstance"},"relationships":[{"description":"Delivers to the customer's web browser","destinationId":"71","id":"76","linkedRelationshipId":"31","sourceId":"75"}],"tags":"Container Instance"}],"environment":"Live","id":"74","instances":"1","name":"Apache Tomcat","properties":{"structurizr.dsl.identifier":"d51797b0-a209-4b77-8723-4a06bb6305b9"},"tags":"Element,Deployment Node","technology":"Apache Tomcat 8.x"}],"environment":"Live","id":"73","instances":"4","name":"bigbank-web***","properties":{"structurizr.dsl.identifier":"781b79d9-35cf-4fe7-b9c7-03224e394475"},"tags":"Element,Deployment Node","technology":"Ubuntu 16.04 LTS"},{"children":[{"containerInstances":[{"containerId":"11","deploymentGroups":["Default"],"environment":"Live","id":"79","instanceId":1,"properties":{"structurizr.dsl.identifier":"liveapiapplicationinstance"},"relationships":[{"description":"Reads from and writes to","destinationId":"84","id":"85","linkedRelationshipId":"45","sourceId":"79","technology":"SQL/TCP"},{"description":"Reads from and writes to","destinationId":"88","id":"89","linkedRelationshipId":"45","sourceId":"79","technology":"SQL/TCP"},{"description":"Makes API calls to","destinationId":"91","id":"92","linkedRelationshipId":"47","sourceId":"79","technology":"XML/HTTPS"}],"tags":"Container Instance"}],"environment":"Live","id":"78","instances":"1","name":"Apache Tomcat","properties":{"structurizr.dsl.identifier":"af55a36c-d47f-4238-862b-bb934f0159c7"},"tags":"Element,Deployment Node","technology":"Apache Tomcat 8.x"}],"environment":"Live","id":"77","instances":"8","name":"bigbank-api***","properties":{"structurizr.dsl.identifier":"a8bc36c6-9ab5-400e-a390-e243fada7d7b"},"tags":"Element,Deployment Node","technology":"Ubuntu 16.04 LTS"},{"children":[{"containerInstances":[{"containerId":"18","deploymentGroups":["Default"],"environment":"Live","id":"84","instanceId":1,"properties":{"structurizr.dsl.identifier":"liveprimarydatabaseinstance"},"tags":"Container Instance"}],"environment":"Live","id":"83","instances":"1","name":"Oracle - Primary","properties":{"structurizr.dsl.identifier":"primarydatabaseserver"},"relationships":[{"description":"Replicates data to","destinationId":"87","id":"93","properties":{"structurizr.dsl.identifier":"06f59ee1-b684-4cba-80bf-df6f0848242d"},"sourceId":"83","tags":"Relationship"}],"tags":"Element,Deployment Node","technology":"Oracle 12c"}],"environment":"Live","id":"82","instances":"1","name":"bigbank-db01","properties":{"structurizr.dsl.identifier":"5782f88e-dc71-42b5-b4c2-0c3fa7b3270c"},"tags":"Element,Deployment Node","technology":"Ubuntu 16.04 LTS"},{"children":[{"containerInstances":[{"containerId":"18","deploymentGroups":["Default"],"environment":"Live","id":"88","instanceId":1,"properties":{"structurizr.dsl.identifier":"livesecondarydatabaseinstance"},"tags":"Container Instance"}],"environment":"Live","id":"87","instances":"1","name":"Oracle - Secondary","properties":{"structurizr.dsl.identifier":"secondarydatabaseserver"},"tags":"Element,Deployment Node,Failover","technology":"Oracle 12c"}],"environment":"Live","id":"86","instances":"1","name":"bigbank-db02","properties":{"structurizr.dsl.identifier":"ccefea16-a74f-4e6d-b30e-50a66f4ae4fe"},"tags":"Element,Deployment Node,Failover","technology":"Ubuntu 16.04 LTS"},{"environment":"Live","id":"90","instances":"1","name":"bigbank-prod001","properties":{"structurizr.dsl.identifier":"257d2559-28b8-4c38-93c2-54d9e6aa2260"},"softwareSystemInstances":[{"deploymentGroups":["Default"],"environment":"Live","id":"91","instanceId":1,"properties":{"structurizr.dsl.identifier":"92c1f2ae-05ad-4b5c-884f-1606bcbf7a27"},"softwareSystemId":"4","tags":"Software System Instance"}],"tags":"Element,Deployment Node"}],"environment":"Live","id":"72","instances":"1","name":"Big Bank plc","properties":{"structurizr.dsl.identifier":"8d6fd7b6-e273-40c2-8e8b-e4b30ff2407d"},"tags":"Element,Deployment Node","technology":"Big Bank plc data center"}],"people":[{"description":"A customer of the bank, with personal bank accounts.","id":"1","location":"Unspecified","name":"Personal Banking Customer","properties":{"structurizr.dsl.identifier":"customer"},"relationships":[{"description":"Views account balances, and makes payments using","destinationId":"7","id":"19","properties":{"structurizr.dsl.identifier":"bf46f7c5-5b71-4733-a689-807d84282d7c"},"sourceId":"1","tags":"Relationship"},{"description":"Asks questions to","destinationId":"2","id":"23","properties":{"structurizr.dsl.identifier":"5c340ecd-fc9d-4083-be27-c3def11d648c"},"sourceId":"1","tags":"Relationship","technology":"Telephone"},{"description":"Withdraws cash using","destinationId":"6","id":"25","properties":{"structurizr.dsl.identifier":"d1b3e27b-b8b8-4eca-82b0-7d12c1d16946"},"sourceId":"1","tags":"Relationship"},{"description":"Visits bigbank.com/ib using","destinationId":"10","id":"28","properties":{"structurizr.dsl.identifier":"cc224bef-7373-43a9-93aa-0fa163466233"},"sourceId":"1","tags":"Relationship","technology":"HTTPS"},{"description":"Views account balances, and makes payments using","destinationId":"8","id":"29","properties":{"structurizr.dsl.identifier":"d4c83901-ce98-46f8-96a6-bdec1fcc16db"},"sourceId":"1","tags":"Relationship"},{"description":"Views account balances, and makes payments using","destinationId":"9","id":"30","properties":{"structurizr.dsl.identifier":"27f3df15-3086-4f4c-9c89-8b2681dbe5f3"},"sourceId":"1","tags":"Relationship"}],"tags":"Element,Person,Customer"},{"description":"Customer service staff within the bank.","group":"Big Bank plc","id":"2","location":"Unspecified","name":"Customer Service Staff","properties":{"structurizr.dsl.identifier":"supportstaff"},"relationships":[{"description":"Uses","destinationId":"4","id":"24","properties":{"structurizr.dsl.identifier":"1b56a903-9392-4849-9c38-8d7578ccef1c"},"sourceId":"2","tags":"Relationship"}],"tags":"Element,Person,Bank Staff"},{"description":"Administration and support staff within the bank.","group":"Big Bank plc","id":"3","location":"Unspecified","name":"Back Office Staff","properties":{"structurizr.dsl.identifier":"backoffice"},"relationships":[{"description":"Uses","destinationId":"4","id":"27","properties":{"structurizr.dsl.identifier":"c9e68c21-3ca1-448b-898f-5efb37ef8f19"},"sourceId":"3","tags":"Relationship"}],"tags":"Element,Person,Bank Staff"}],"softwareSystems":[{"description":"Stores all of the core banking information about customers, accounts, transactions, etc.","documentation":{},"group":"Big Bank plc","id":"4","location":"Unspecified","name":"Mainframe Banking System","properties":{"structurizr.dsl.identifier":"mainframe"},"tags":"Element,Software System,Existing System"},{"description":"The internal Microsoft Exchange e-mail system.","documentation":{},"group":"Big Bank plc","id":"5","location":"Unspecified","name":"E-mail System","properties":{"structurizr.dsl.identifier":"email"},"relationships":[{"description":"Sends e-mails to","destinationId":"1","id":"22","properties":{"structurizr.dsl.identifier":"0e20db3d-61d6-40ec-81fc-dcffd441b043"},"sourceId":"5","tags":"Relationship"}],"tags":"Element,Software System,Existing System"},{"description":"Allows customers to withdraw cash.","documentation":{},"group":"Big Bank plc","id":"6","location":"Unspecified","name":"ATM","properties":{"structurizr.dsl.identifier":"atm"},"relationships":[{"description":"Uses","destinationId":"4","id":"26","properties":{"structurizr.dsl.identifier":"219197fc-d1cf-46fb-a7ac-59271952612a"},"sourceId":"6","tags":"Relationship"}],"tags":"Element,Software System,Existing System"},{"containers":[{"description":"Provides all of the Internet banking functionality to customers via their web browser.","documentation":{},"id":"8","name":"Single-Page Application","properties":{"structurizr.dsl.identifier":"singlepageapplication"},"relationships":[{"description":"Makes API calls to","destinationId":"12","id":"32","properties":{"structurizr.dsl.identifier":"8c638205-2d5d-4ddc-b7de-f4c8554972c0"},"sourceId":"8","tags":"Relationship","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"11","id":"33","linkedRelationshipId":"32","sourceId":"8","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"13","id":"34","properties":{"structurizr.dsl.identifier":"517154df-dd7a-4561-b5f1-3bdeabf5640b"},"sourceId":"8","tags":"Relationship","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"14","id":"35","properties":{"structurizr.dsl.identifier":"70676b1b-cef5-4dfc-8434-31b727a9f808"},"sourceId":"8","tags":"Relationship","technology":"JSON/HTTPS"}],"tags":"Element,Container,Web Browser","technology":"JavaScript and Angular"},{"description":"Provides a limited subset of the Internet banking functionality to customers via their mobile device.","documentation":{},"id":"9","name":"Mobile App","properties":{"structurizr.dsl.identifier":"mobileapp"},"relationships":[{"description":"Makes API calls to","destinationId":"12","id":"36","properties":{"structurizr.dsl.identifier":"b44b378d-3bb4-427d-b7cd-0c0e142870e5"},"sourceId":"9","tags":"Relationship","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"11","id":"37","linkedRelationshipId":"36","sourceId":"9","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"13","id":"38","properties":{"structurizr.dsl.identifier":"7a9336b3-3554-45f5-89c6-a3f18ab880f0"},"sourceId":"9","tags":"Relationship","technology":"JSON/HTTPS"},{"description":"Makes API calls to","destinationId":"14","id":"39","properties":{"structurizr.dsl.identifier":"cc30b461-2e21-4fe3-a539-dc2784a19596"},"sourceId":"9","tags":"Relationship","technology":"JSON/HTTPS"}],"tags":"Element,Container,Mobile App","technology":"Xamarin"},{"description":"Delivers the static content and the Internet banking single page application.","documentation":{},"id":"10","name":"Web Application","properties":{"structurizr.dsl.identifier":"webapplication"},"relationships":[{"description":"Delivers to the customer's web browser","destinationId":"8","id":"31","properties":{"structurizr.dsl.identifier":"65451872-1f9c-4702-b8db-ce8b0fe03598"},"sourceId":"10","tags":"Relationship"}],"tags":"Element,Container","technology":"Java and Spring MVC"},{"components":[{"description":"Allows users to sign in to the Internet Banking System.","documentation":{},"id":"12","name":"Sign In Controller","properties":{"structurizr.dsl.identifier":"signincontroller"},"relationships":[{"description":"Uses","destinationId":"15","id":"40","properties":{"structurizr.dsl.identifier":"2596a58f-f466-4ba9-83ff-112b4171a54e"},"sourceId":"12","tags":"Relationship"}],"tags":"Element,Component","technology":"Spring MVC Rest Controller"},{"description":"Provides customers with a summary of their bank accounts.","documentation":{},"id":"13","name":"Accounts Summary Controller","properties":{"structurizr.dsl.identifier":"accountssummarycontroller"},"relationships":[{"description":"Uses","destinationId":"16","id":"41","properties":{"structurizr.dsl.identifier":"b8c14d7d-09d6-461c-9feb-4e81b6168833"},"sourceId":"13","tags":"Relationship"}],"tags":"Element,Component","technology":"Spring MVC Rest Controller"},{"description":"Allows users to reset their passwords with a single use URL.","documentation":{},"id":"14","name":"Reset Password Controller","properties":{"structurizr.dsl.identifier":"resetpasswordcontroller"},"relationships":[{"description":"Uses","destinationId":"15","id":"42","properties":{"structurizr.dsl.identifier":"84764f6f-3405-43ef-8824-e3fba9125b73"},"sourceId":"14","tags":"Relationship"},{"description":"Uses","destinationId":"17","id":"43","properties":{"structurizr.dsl.identifier":"326e3700-64ac-49ea-ad0e-cb8cac0ef5a7"},"sourceId":"14","tags":"Relationship"}],"tags":"Element,Component","technology":"Spring MVC Rest Controller"},{"description":"Provides functionality related to signing in, changing passwords, etc.","documentation":{},"id":"15","name":"Security Component","properties":{"structurizr.dsl.identifier":"securitycomponent"},"relationships":[{"description":"Reads from and writes to","destinationId":"18","id":"44","properties":{"structurizr.dsl.identifier":"0642b765-4fd1-4cc4-9e69-bfff6aa774bf"},"sourceId":"15","tags":"Relationship","technology":"SQL/TCP"}],"tags":"Element,Component","technology":"Spring Bean"},{"description":"A facade onto the mainframe banking system.","documentation":{},"id":"16","name":"Mainframe Banking System Facade","properties":{"structurizr.dsl.identifier":"mainframebankingsystemfacade"},"relationships":[{"description":"Makes API calls to","destinationId":"4","id":"46","properties":{"structurizr.dsl.identifier":"58cffa81-3d45-46ed-96e8-a2d768a8e1c5"},"sourceId":"16","tags":"Relationship","technology":"XML/HTTPS"}],"tags":"Element,Component","technology":"Spring Bean"},{"description":"Sends e-mails to users.","documentation":{},"id":"17","name":"E-mail Component","properties":{"structurizr.dsl.identifier":"emailcomponent"},"relationships":[{"description":"Sends e-mail using","destinationId":"5","id":"48","properties":{"structurizr.dsl.identifier":"c79c7708-af97-4b3d-b0fe-4c7523689d75"},"sourceId":"17","tags":"Relationship"}],"tags":"Element,Component","technology":"Spring Bean"}],"description":"Provides Internet banking functionality via a JSON/HTTPS API.","documentation":{},"id":"11","name":"API Application","properties":{"structurizr.dsl.identifier":"apiapplication"},"relationships":[{"description":"Reads from and writes to","destinationId":"18","id":"45","linkedRelationshipId":"44","sourceId":"11","technology":"SQL/TCP"},{"description":"Makes API calls to","destinationId":"4","id":"47","linkedRelationshipId":"46","sourceId":"11","technology":"XML/HTTPS"},{"description":"Sends e-mail using","destinationId":"5","id":"49","linkedRelationshipId":"48","sourceId":"11"}],"tags":"Element,Container","technology":"Java and Spring MVC"},{"description":"Stores user registration information, hashed authentication credentials, access logs, etc.","documentation":{},"id":"18","name":"Database","properties":{"structurizr.dsl.identifier":"database"},"tags":"Element,Container,Database","technology":"Oracle Database Schema"}],"description":"Allows customers to view information about their bank accounts, and make payments.","documentation":{},"group":"Big Bank plc","id":"7","location":"Unspecified","name":"Internet Banking System","properties":{"structurizr.dsl.identifier":"internetbankingsystem"},"relationships":[{"description":"Gets account information from, and makes payments using","destinationId":"4","id":"20","properties":{"structurizr.dsl.identifier":"008f4431-c838-4418-92d5-44de5bdf3efa"},"sourceId":"7","tags":"Relationship"},{"description":"Sends e-mail using","destinationId":"5","id":"21","properties":{"structurizr.dsl.identifier":"e2dd0b15-1b64-41d0-9f38-b02f7320ed61"},"sourceId":"7","tags":"Relationship"}],"tags":"Element,Software System"}]},"name":"Big Bank plc","properties":{"structurizr.dsl":"LyoKICogVGhpcyBpcyBhIGNvbWJpbmVkIHZlcnNpb24gb2YgdGhlIGZvbGxvd2luZyB3b3Jrc3BhY2VzLCB3aXRoIGF1dG9tYXRpYyBsYXlvdXQgZW5hYmxlZDoKICoKICogLSAiQmlnIEJhbmsgcGxjIC0gU3lzdGVtIExhbmRzY2FwZSIgKGh0dHBzOi8vc3RydWN0dXJpenIuY29tL3NoYXJlLzI4MjAxLykKICogLSAiQmlnIEJhbmsgcGxjIC0gSW50ZXJuZXQgQmFua2luZyBTeXN0ZW0iIChodHRwczovL3N0cnVjdHVyaXpyLmNvbS9zaGFyZS8zNjE0MS8pCiovCndvcmtzcGFjZSAiQmlnIEJhbmsgcGxjIiAiVGhpcyBpcyBhbiBleGFtcGxlIHdvcmtzcGFjZSB0byBpbGx1c3RyYXRlIHRoZSBrZXkgZmVhdHVyZXMgb2YgU3RydWN0dXJpenIsIHZpYSB0aGUgRFNMLCBiYXNlZCBhcm91bmQgYSBmaWN0aW9uYWwgb25saW5lIGJhbmtpbmcgc3lzdGVtLiIgewoKICAgIG1vZGVsIHsKICAgICAgICBjdXN0b21lciA9IHBlcnNvbiAiUGVyc29uYWwgQmFua2luZyBDdXN0b21lciIgIkEgY3VzdG9tZXIgb2YgdGhlIGJhbmssIHdpdGggcGVyc29uYWwgYmFuayBhY2NvdW50cy4iICJDdXN0b21lciIKCiAgICAgICAgZ3JvdXAgIkJpZyBCYW5rIHBsYyIgewogICAgICAgICAgICBzdXBwb3J0U3RhZmYgPSBwZXJzb24gIkN1c3RvbWVyIFNlcnZpY2UgU3RhZmYiICJDdXN0b21lciBzZXJ2aWNlIHN0YWZmIHdpdGhpbiB0aGUgYmFuay4iICJCYW5rIFN0YWZmIgogICAgICAgICAgICBiYWNrb2ZmaWNlID0gcGVyc29uICJCYWNrIE9mZmljZSBTdGFmZiIgIkFkbWluaXN0cmF0aW9uIGFuZCBzdXBwb3J0IHN0YWZmIHdpdGhpbiB0aGUgYmFuay4iICJCYW5rIFN0YWZmIgoKICAgICAgICAgICAgbWFpbmZyYW1lID0gc29mdHdhcmVzeXN0ZW0gIk1haW5mcmFtZSBCYW5raW5nIFN5c3RlbSIgIlN0b3JlcyBhbGwgb2YgdGhlIGNvcmUgYmFua2luZyBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b21lcnMsIGFjY291bnRzLCB0cmFuc2FjdGlvbnMsIGV0Yy4iICJFeGlzdGluZyBTeXN0ZW0iCiAgICAgICAgICAgIGVtYWlsID0gc29mdHdhcmVzeXN0ZW0gIkUtbWFpbCBTeXN0ZW0iICJUaGUgaW50ZXJuYWwgTWljcm9zb2Z0IEV4Y2hhbmdlIGUtbWFpbCBzeXN0ZW0uIiAiRXhpc3RpbmcgU3lzdGVtIgogICAgICAgICAgICBhdG0gPSBzb2Z0d2FyZXN5c3RlbSAiQVRNIiAiQWxsb3dzIGN1c3RvbWVycyB0byB3aXRoZHJhdyBjYXNoLiIgIkV4aXN0aW5nIFN5c3RlbSIKCiAgICAgICAgICAgIGludGVybmV0QmFua2luZ1N5c3RlbSA9IHNvZnR3YXJlc3lzdGVtICJJbnRlcm5ldCBCYW5raW5nIFN5c3RlbSIgIkFsbG93cyBjdXN0b21lcnMgdG8gdmlldyBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBiYW5rIGFjY291bnRzLCBhbmQgbWFrZSBwYXltZW50cy4iIHsKICAgICAgICAgICAgICAgIHNpbmdsZVBhZ2VBcHBsaWNhdGlvbiA9IGNvbnRhaW5lciAiU2luZ2xlLVBhZ2UgQXBwbGljYXRpb24iICJQcm92aWRlcyBhbGwgb2YgdGhlIEludGVybmV0IGJhbmtpbmcgZnVuY3Rpb25hbGl0eSB0byBjdXN0b21lcnMgdmlhIHRoZWlyIHdlYiBicm93c2VyLiIgIkphdmFTY3JpcHQgYW5kIEFuZ3VsYXIiICJXZWIgQnJvd3NlciIKICAgICAgICAgICAgICAgIG1vYmlsZUFwcCA9IGNvbnRhaW5lciAiTW9iaWxlIEFwcCIgIlByb3ZpZGVzIGEgbGltaXRlZCBzdWJzZXQgb2YgdGhlIEludGVybmV0IGJhbmtpbmcgZnVuY3Rpb25hbGl0eSB0byBjdXN0b21lcnMgdmlhIHRoZWlyIG1vYmlsZSBkZXZpY2UuIiAiWGFtYXJpbiIgIk1vYmlsZSBBcHAiCiAgICAgICAgICAgICAgICB3ZWJBcHBsaWNhdGlvbiA9IGNvbnRhaW5lciAiV2ViIEFwcGxpY2F0aW9uIiAiRGVsaXZlcnMgdGhlIHN0YXRpYyBjb250ZW50IGFuZCB0aGUgSW50ZXJuZXQgYmFua2luZyBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbi4iICJKYXZhIGFuZCBTcHJpbmcgTVZDIgogICAgICAgICAgICAgICAgYXBpQXBwbGljYXRpb24gPSBjb250YWluZXIgIkFQSSBBcHBsaWNhdGlvbiIgIlByb3ZpZGVzIEludGVybmV0IGJhbmtpbmcgZnVuY3Rpb25hbGl0eSB2aWEgYSBKU09OL0hUVFBTIEFQSS4iICJKYXZhIGFuZCBTcHJpbmcgTVZDIiB7CiAgICAgICAgICAgICAgICAgICAgc2lnbmluQ29udHJvbGxlciA9IGNvbXBvbmVudCAiU2lnbiBJbiBDb250cm9sbGVyIiAiQWxsb3dzIHVzZXJzIHRvIHNpZ24gaW4gdG8gdGhlIEludGVybmV0IEJhbmtpbmcgU3lzdGVtLiIgIlNwcmluZyBNVkMgUmVzdCBDb250cm9sbGVyIgogICAgICAgICAgICAgICAgICAgIGFjY291bnRzU3VtbWFyeUNvbnRyb2xsZXIgPSBjb21wb25lbnQgIkFjY291bnRzIFN1bW1hcnkgQ29udHJvbGxlciIgIlByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIGEgc3VtbWFyeSBvZiB0aGVpciBiYW5rIGFjY291bnRzLiIgIlNwcmluZyBNVkMgUmVzdCBDb250cm9sbGVyIgogICAgICAgICAgICAgICAgICAgIHJlc2V0UGFzc3dvcmRDb250cm9sbGVyID0gY29tcG9uZW50ICJSZXNldCBQYXNzd29yZCBDb250cm9sbGVyIiAiQWxsb3dzIHVzZXJzIHRvIHJlc2V0IHRoZWlyIHBhc3N3b3JkcyB3aXRoIGEgc2luZ2xlIHVzZSBVUkwuIiAiU3ByaW5nIE1WQyBSZXN0IENvbnRyb2xsZXIiCiAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlDb21wb25lbnQgPSBjb21wb25lbnQgIlNlY3VyaXR5IENvbXBvbmVudCIgIlByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBzaWduaW5nIGluLCBjaGFuZ2luZyBwYXNzd29yZHMsIGV0Yy4iICJTcHJpbmcgQmVhbiIKICAgICAgICAgICAgICAgICAgICBtYWluZnJhbWVCYW5raW5nU3lzdGVtRmFjYWRlID0gY29tcG9uZW50ICJNYWluZnJhbWUgQmFua2luZyBTeXN0ZW0gRmFjYWRlIiAiQSBmYWNhZGUgb250byB0aGUgbWFpbmZyYW1lIGJhbmtpbmcgc3lzdGVtLiIgIlNwcmluZyBCZWFuIgogICAgICAgICAgICAgICAgICAgIGVtYWlsQ29tcG9uZW50ID0gY29tcG9uZW50ICJFLW1haWwgQ29tcG9uZW50IiAiU2VuZHMgZS1tYWlscyB0byB1c2Vycy4iICJTcHJpbmcgQmVhbiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGFiYXNlID0gY29udGFpbmVyICJEYXRhYmFzZSIgIlN0b3JlcyB1c2VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiwgaGFzaGVkIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLCBhY2Nlc3MgbG9ncywgZXRjLiIgIk9yYWNsZSBEYXRhYmFzZSBTY2hlbWEiICJEYXRhYmFzZSIKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyByZWxhdGlvbnNoaXBzIGJldHdlZW4gcGVvcGxlIGFuZCBzb2Z0d2FyZSBzeXN0ZW1zCiAgICAgICAgY3VzdG9tZXIgLT4gaW50ZXJuZXRCYW5raW5nU3lzdGVtICJWaWV3cyBhY2NvdW50IGJhbGFuY2VzLCBhbmQgbWFrZXMgcGF5bWVudHMgdXNpbmciCiAgICAgICAgaW50ZXJuZXRCYW5raW5nU3lzdGVtIC0+IG1haW5mcmFtZSAiR2V0cyBhY2NvdW50IGluZm9ybWF0aW9uIGZyb20sIGFuZCBtYWtlcyBwYXltZW50cyB1c2luZyIKICAgICAgICBpbnRlcm5ldEJhbmtpbmdTeXN0ZW0gLT4gZW1haWwgIlNlbmRzIGUtbWFpbCB1c2luZyIKICAgICAgICBlbWFpbCAtPiBjdXN0b21lciAiU2VuZHMgZS1tYWlscyB0byIKICAgICAgICBjdXN0b21lciAtPiBzdXBwb3J0U3RhZmYgIkFza3MgcXVlc3Rpb25zIHRvIiAiVGVsZXBob25lIgogICAgICAgIHN1cHBvcnRTdGFmZiAtPiBtYWluZnJhbWUgIlVzZXMiCiAgICAgICAgY3VzdG9tZXIgLT4gYXRtICJXaXRoZHJhd3MgY2FzaCB1c2luZyIKICAgICAgICBhdG0gLT4gbWFpbmZyYW1lICJVc2VzIgogICAgICAgIGJhY2tvZmZpY2UgLT4gbWFpbmZyYW1lICJVc2VzIgoKICAgICAgICAjIHJlbGF0aW9uc2hpcHMgdG8vZnJvbSBjb250YWluZXJzCiAgICAgICAgY3VzdG9tZXIgLT4gd2ViQXBwbGljYXRpb24gIlZpc2l0cyBiaWdiYW5rLmNvbS9pYiB1c2luZyIgIkhUVFBTIgogICAgICAgIGN1c3RvbWVyIC0+IHNpbmdsZVBhZ2VBcHBsaWNhdGlvbiAiVmlld3MgYWNjb3VudCBiYWxhbmNlcywgYW5kIG1ha2VzIHBheW1lbnRzIHVzaW5nIgogICAgICAgIGN1c3RvbWVyIC0+IG1vYmlsZUFwcCAiVmlld3MgYWNjb3VudCBiYWxhbmNlcywgYW5kIG1ha2VzIHBheW1lbnRzIHVzaW5nIgogICAgICAgIHdlYkFwcGxpY2F0aW9uIC0+IHNpbmdsZVBhZ2VBcHBsaWNhdGlvbiAiRGVsaXZlcnMgdG8gdGhlIGN1c3RvbWVyJ3Mgd2ViIGJyb3dzZXIiCgogICAgICAgICMgcmVsYXRpb25zaGlwcyB0by9mcm9tIGNvbXBvbmVudHMKICAgICAgICBzaW5nbGVQYWdlQXBwbGljYXRpb24gLT4gc2lnbmluQ29udHJvbGxlciAiTWFrZXMgQVBJIGNhbGxzIHRvIiAiSlNPTi9IVFRQUyIKICAgICAgICBzaW5nbGVQYWdlQXBwbGljYXRpb24gLT4gYWNjb3VudHNTdW1tYXJ5Q29udHJvbGxlciAiTWFrZXMgQVBJIGNhbGxzIHRvIiAiSlNPTi9IVFRQUyIKICAgICAgICBzaW5nbGVQYWdlQXBwbGljYXRpb24gLT4gcmVzZXRQYXNzd29yZENvbnRyb2xsZXIgIk1ha2VzIEFQSSBjYWxscyB0byIgIkpTT04vSFRUUFMiCiAgICAgICAgbW9iaWxlQXBwIC0+IHNpZ25pbkNvbnRyb2xsZXIgIk1ha2VzIEFQSSBjYWxscyB0byIgIkpTT04vSFRUUFMiCiAgICAgICAgbW9iaWxlQXBwIC0+IGFjY291bnRzU3VtbWFyeUNvbnRyb2xsZXIgIk1ha2VzIEFQSSBjYWxscyB0byIgIkpTT04vSFRUUFMiCiAgICAgICAgbW9iaWxlQXBwIC0+IHJlc2V0UGFzc3dvcmRDb250cm9sbGVyICJNYWtlcyBBUEkgY2FsbHMgdG8iICJKU09OL0hUVFBTIgogICAgICAgIHNpZ25pbkNvbnRyb2xsZXIgLT4gc2VjdXJpdHlDb21wb25lbnQgIlVzZXMiCiAgICAgICAgYWNjb3VudHNTdW1tYXJ5Q29udHJvbGxlciAtPiBtYWluZnJhbWVCYW5raW5nU3lzdGVtRmFjYWRlICJVc2VzIgogICAgICAgIHJlc2V0UGFzc3dvcmRDb250cm9sbGVyIC0+IHNlY3VyaXR5Q29tcG9uZW50ICJVc2VzIgogICAgICAgIHJlc2V0UGFzc3dvcmRDb250cm9sbGVyIC0+IGVtYWlsQ29tcG9uZW50ICJVc2VzIgogICAgICAgIHNlY3VyaXR5Q29tcG9uZW50IC0+IGRhdGFiYXNlICJSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8iICJTUUwvVENQIgogICAgICAgIG1haW5mcmFtZUJhbmtpbmdTeXN0ZW1GYWNhZGUgLT4gbWFpbmZyYW1lICJNYWtlcyBBUEkgY2FsbHMgdG8iICJYTUwvSFRUUFMiCiAgICAgICAgZW1haWxDb21wb25lbnQgLT4gZW1haWwgIlNlbmRzIGUtbWFpbCB1c2luZyIKCiAgICAgICAgZGVwbG95bWVudEVudmlyb25tZW50ICJEZXZlbG9wbWVudCIgewogICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiRGV2ZWxvcGVyIExhcHRvcCIgIiIgIk1pY3Jvc29mdCBXaW5kb3dzIDEwIG9yIEFwcGxlIG1hY09TIiB7CiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiV2ViIEJyb3dzZXIiICIiICJDaHJvbWUsIEZpcmVmb3gsIFNhZmFyaSwgb3IgRWRnZSIgewogICAgICAgICAgICAgICAgICAgIGRldmVsb3BlclNpbmdsZVBhZ2VBcHBsaWNhdGlvbkluc3RhbmNlID0gY29udGFpbmVySW5zdGFuY2Ugc2luZ2xlUGFnZUFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiRG9ja2VyIENvbnRhaW5lciAtIFdlYiBTZXJ2ZXIiICIiICJEb2NrZXIiIHsKICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiQXBhY2hlIFRvbWNhdCIgIiIgIkFwYWNoZSBUb21jYXQgOC54IiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcldlYkFwcGxpY2F0aW9uSW5zdGFuY2UgPSBjb250YWluZXJJbnN0YW5jZSB3ZWJBcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJBcGlBcHBsaWNhdGlvbkluc3RhbmNlID0gY29udGFpbmVySW5zdGFuY2UgYXBpQXBwbGljYXRpb24KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiRG9ja2VyIENvbnRhaW5lciAtIERhdGFiYXNlIFNlcnZlciIgIiIgIkRvY2tlciIgewogICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJEYXRhYmFzZSBTZXJ2ZXIiICIiICJPcmFjbGUgMTJjIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlckRhdGFiYXNlSW5zdGFuY2UgPSBjb250YWluZXJJbnN0YW5jZSBkYXRhYmFzZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiQmlnIEJhbmsgcGxjIiAiIiAiQmlnIEJhbmsgcGxjIGRhdGEgY2VudGVyIiAiIiB7CiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiYmlnYmFuay1kZXYwMDEiICIiICIiICIiIHsKICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZVN5c3RlbUluc3RhbmNlIG1haW5mcmFtZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgZGVwbG95bWVudEVudmlyb25tZW50ICJMaXZlIiB7CiAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJDdXN0b21lcidzIG1vYmlsZSBkZXZpY2UiICIiICJBcHBsZSBpT1Mgb3IgQW5kcm9pZCIgewogICAgICAgICAgICAgICAgbGl2ZU1vYmlsZUFwcEluc3RhbmNlID0gY29udGFpbmVySW5zdGFuY2UgbW9iaWxlQXBwCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIkN1c3RvbWVyJ3MgY29tcHV0ZXIiICIiICJNaWNyb3NvZnQgV2luZG93cyBvciBBcHBsZSBtYWNPUyIgewogICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIldlYiBCcm93c2VyIiAiIiAiQ2hyb21lLCBGaXJlZm94LCBTYWZhcmksIG9yIEVkZ2UiIHsKICAgICAgICAgICAgICAgICAgICBsaXZlU2luZ2xlUGFnZUFwcGxpY2F0aW9uSW5zdGFuY2UgPSBjb250YWluZXJJbnN0YW5jZSBzaW5nbGVQYWdlQXBwbGljYXRpb24KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIkJpZyBCYW5rIHBsYyIgIiIgIkJpZyBCYW5rIHBsYyBkYXRhIGNlbnRlciIgewogICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImJpZ2Jhbmstd2ViKioqIiAiIiAiVWJ1bnR1IDE2LjA0IExUUyIgIiIgNCB7CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIkFwYWNoZSBUb21jYXQiICIiICJBcGFjaGUgVG9tY2F0IDgueCIgewogICAgICAgICAgICAgICAgICAgICAgICBsaXZlV2ViQXBwbGljYXRpb25JbnN0YW5jZSA9IGNvbnRhaW5lckluc3RhbmNlIHdlYkFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImJpZ2JhbmstYXBpKioqIiAiIiAiVWJ1bnR1IDE2LjA0IExUUyIgIiIgOCB7CiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgIkFwYWNoZSBUb21jYXQiICIiICJBcGFjaGUgVG9tY2F0IDgueCIgewogICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXBpQXBwbGljYXRpb25JbnN0YW5jZSA9IGNvbnRhaW5lckluc3RhbmNlIGFwaUFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRlcGxveW1lbnROb2RlICJiaWdiYW5rLWRiMDEiICIiICJVYnVudHUgMTYuMDQgTFRTIiB7CiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeURhdGFiYXNlU2VydmVyID0gZGVwbG95bWVudE5vZGUgIk9yYWNsZSAtIFByaW1hcnkiICIiICJPcmFjbGUgMTJjIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVQcmltYXJ5RGF0YWJhc2VJbnN0YW5jZSA9IGNvbnRhaW5lckluc3RhbmNlIGRhdGFiYXNlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVwbG95bWVudE5vZGUgImJpZ2JhbmstZGIwMiIgIiIgIlVidW50dSAxNi4wNCBMVFMiICJGYWlsb3ZlciIgewogICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeURhdGFiYXNlU2VydmVyID0gZGVwbG95bWVudE5vZGUgIk9yYWNsZSAtIFNlY29uZGFyeSIgIiIgIk9yYWNsZSAxMmMiICJGYWlsb3ZlciIgewogICAgICAgICAgICAgICAgICAgICAgICBsaXZlU2Vjb25kYXJ5RGF0YWJhc2VJbnN0YW5jZSA9IGNvbnRhaW5lckluc3RhbmNlIGRhdGFiYXNlICJGYWlsb3ZlciIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXBsb3ltZW50Tm9kZSAiYmlnYmFuay1wcm9kMDAxIiAiIiAiIiAiIiB7CiAgICAgICAgICAgICAgICAgICAgc29mdHdhcmVTeXN0ZW1JbnN0YW5jZSBtYWluZnJhbWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpbWFyeURhdGFiYXNlU2VydmVyIC0+IHNlY29uZGFyeURhdGFiYXNlU2VydmVyICJSZXBsaWNhdGVzIGRhdGEgdG8iCiAgICAgICAgfQogICAgfQoKICAgIHZpZXdzIHsKICAgICAgICBzeXN0ZW1sYW5kc2NhcGUgIlN5c3RlbUxhbmRzY2FwZSIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgIH0KCiAgICAgICAgc3lzdGVtY29udGV4dCBpbnRlcm5ldEJhbmtpbmdTeXN0ZW0gIlN5c3RlbUNvbnRleHQiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGFuaW1hdGlvbiB7CiAgICAgICAgICAgICAgICBpbnRlcm5ldEJhbmtpbmdTeXN0ZW0KICAgICAgICAgICAgICAgIGN1c3RvbWVyCiAgICAgICAgICAgICAgICBtYWluZnJhbWUKICAgICAgICAgICAgICAgIGVtYWlsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgc3lzdGVtIGNvbnRleHQgZGlhZ3JhbSBmb3IgdGhlIEludGVybmV0IEJhbmtpbmcgU3lzdGVtLiIKICAgICAgICAgICAgcHJvcGVydGllcyB7CiAgICAgICAgICAgICAgICBzdHJ1Y3R1cml6ci5ncm91cHMgZmFsc2UKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29udGFpbmVyIGludGVybmV0QmFua2luZ1N5c3RlbSAiQ29udGFpbmVycyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYW5pbWF0aW9uIHsKICAgICAgICAgICAgICAgIGN1c3RvbWVyIG1haW5mcmFtZSBlbWFpbAogICAgICAgICAgICAgICAgd2ViQXBwbGljYXRpb24KICAgICAgICAgICAgICAgIHNpbmdsZVBhZ2VBcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgbW9iaWxlQXBwCiAgICAgICAgICAgICAgICBhcGlBcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgZGF0YWJhc2UKICAgICAgICAgICAgfQogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29udGFpbmVyIGRpYWdyYW0gZm9yIHRoZSBJbnRlcm5ldCBCYW5raW5nIFN5c3RlbS4iCiAgICAgICAgfQoKICAgICAgICBjb21wb25lbnQgYXBpQXBwbGljYXRpb24gIkNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGFuaW1hdGlvbiB7CiAgICAgICAgICAgICAgICBzaW5nbGVQYWdlQXBwbGljYXRpb24gbW9iaWxlQXBwIGRhdGFiYXNlIGVtYWlsIG1haW5mcmFtZQogICAgICAgICAgICAgICAgc2lnbmluQ29udHJvbGxlciBzZWN1cml0eUNvbXBvbmVudAogICAgICAgICAgICAgICAgYWNjb3VudHNTdW1tYXJ5Q29udHJvbGxlciBtYWluZnJhbWVCYW5raW5nU3lzdGVtRmFjYWRlCiAgICAgICAgICAgICAgICByZXNldFBhc3N3b3JkQ29udHJvbGxlciBlbWFpbENvbXBvbmVudAogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIEFQSSBBcHBsaWNhdGlvbi4iCiAgICAgICAgfQoKICAgICAgICBpbWFnZSBtYWluZnJhbWVCYW5raW5nU3lzdGVtRmFjYWRlICJNYWluZnJhbWVCYW5raW5nU3lzdGVtRmFjYWRlIiB7CiAgICAgICAgICAgIGltYWdlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdHJ1Y3R1cml6ci9leGFtcGxlcy9tYWluL2RzbC9iaWctYmFuay1wbGMvaW50ZXJuZXQtYmFua2luZy1zeXN0ZW0vbWFpbmZyYW1lLWJhbmtpbmctc3lzdGVtLWZhY2FkZS5wbmcKICAgICAgICAgICAgdGl0bGUgIltDb2RlXSBNYWluZnJhbWUgQmFua2luZyBTeXN0ZW0gRmFjYWRlIgogICAgICAgIH0KCiAgICAgICAgZHluYW1pYyBhcGlBcHBsaWNhdGlvbiAiU2lnbkluIiAiU3VtbWFyaXNlcyBob3cgdGhlIHNpZ24gaW4gZmVhdHVyZSB3b3JrcyBpbiB0aGUgc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24uIiB7CiAgICAgICAgICAgIHNpbmdsZVBhZ2VBcHBsaWNhdGlvbiAtPiBzaWduaW5Db250cm9sbGVyICJTdWJtaXRzIGNyZWRlbnRpYWxzIHRvIgogICAgICAgICAgICBzaWduaW5Db250cm9sbGVyIC0+IHNlY3VyaXR5Q29tcG9uZW50ICJWYWxpZGF0ZXMgY3JlZGVudGlhbHMgdXNpbmciCiAgICAgICAgICAgIHNlY3VyaXR5Q29tcG9uZW50IC0+IGRhdGFiYXNlICJzZWxlY3QgKiBmcm9tIHVzZXJzIHdoZXJlIHVzZXJuYW1lID0gPyIKICAgICAgICAgICAgZGF0YWJhc2UgLT4gc2VjdXJpdHlDb21wb25lbnQgIlJldHVybnMgdXNlciBkYXRhIHRvIgogICAgICAgICAgICBzZWN1cml0eUNvbXBvbmVudCAtPiBzaWduaW5Db250cm9sbGVyICJSZXR1cm5zIHRydWUgaWYgdGhlIGhhc2hlZCBwYXNzd29yZCBtYXRjaGVzIgogICAgICAgICAgICBzaWduaW5Db250cm9sbGVyIC0+IHNpbmdsZVBhZ2VBcHBsaWNhdGlvbiAiU2VuZHMgYmFjayBhbiBhdXRoZW50aWNhdGlvbiB0b2tlbiB0byIKICAgICAgICAgICAgYXV0b0xheW91dAogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU3VtbWFyaXNlcyBob3cgdGhlIHNpZ24gaW4gZmVhdHVyZSB3b3JrcyBpbiB0aGUgc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24uIgogICAgICAgIH0KCiAgICAgICAgZGVwbG95bWVudCBpbnRlcm5ldEJhbmtpbmdTeXN0ZW0gIkRldmVsb3BtZW50IiAiRGV2ZWxvcG1lbnREZXBsb3ltZW50IiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBhbmltYXRpb24gewogICAgICAgICAgICAgICAgZGV2ZWxvcGVyU2luZ2xlUGFnZUFwcGxpY2F0aW9uSW5zdGFuY2UKICAgICAgICAgICAgICAgIGRldmVsb3BlcldlYkFwcGxpY2F0aW9uSW5zdGFuY2UgZGV2ZWxvcGVyQXBpQXBwbGljYXRpb25JbnN0YW5jZQogICAgICAgICAgICAgICAgZGV2ZWxvcGVyRGF0YWJhc2VJbnN0YW5jZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1dG9MYXlvdXQKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFuIGV4YW1wbGUgZGV2ZWxvcG1lbnQgZGVwbG95bWVudCBzY2VuYXJpbyBmb3IgdGhlIEludGVybmV0IEJhbmtpbmcgU3lzdGVtLiIKICAgICAgICB9CgogICAgICAgIGRlcGxveW1lbnQgaW50ZXJuZXRCYW5raW5nU3lzdGVtICJMaXZlIiAiTGl2ZURlcGxveW1lbnQiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGFuaW1hdGlvbiB7CiAgICAgICAgICAgICAgICBsaXZlU2luZ2xlUGFnZUFwcGxpY2F0aW9uSW5zdGFuY2UKICAgICAgICAgICAgICAgIGxpdmVNb2JpbGVBcHBJbnN0YW5jZQogICAgICAgICAgICAgICAgbGl2ZVdlYkFwcGxpY2F0aW9uSW5zdGFuY2UgbGl2ZUFwaUFwcGxpY2F0aW9uSW5zdGFuY2UKICAgICAgICAgICAgICAgIGxpdmVQcmltYXJ5RGF0YWJhc2VJbnN0YW5jZQogICAgICAgICAgICAgICAgbGl2ZVNlY29uZGFyeURhdGFiYXNlSW5zdGFuY2UKICAgICAgICAgICAgfQogICAgICAgICAgICBhdXRvTGF5b3V0CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbiBleGFtcGxlIGxpdmUgZGVwbG95bWVudCBzY2VuYXJpbyBmb3IgdGhlIEludGVybmV0IEJhbmtpbmcgU3lzdGVtLiIKICAgICAgICB9CgogICAgICAgIHN0eWxlcyB7CiAgICAgICAgICAgIGVsZW1lbnQgIlBlcnNvbiIgewogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICAgICAgZm9udFNpemUgMjIKICAgICAgICAgICAgICAgIHNoYXBlIFBlcnNvbgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIkN1c3RvbWVyIiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICMwODQyN2IKICAgICAgICAgICAgfQogICAgICAgICAgICBlbGVtZW50ICJCYW5rIFN0YWZmIiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICM5OTk5OTkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbGVtZW50ICJTb2Z0d2FyZSBTeXN0ZW0iIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzExNjhiZAogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIkV4aXN0aW5nIFN5c3RlbSIgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZCAjOTk5OTk5CiAgICAgICAgICAgICAgICBjb2xvciAjZmZmZmZmCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxlbWVudCAiQ29udGFpbmVyIiB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kICM0MzhkZDUKICAgICAgICAgICAgICAgIGNvbG9yICNmZmZmZmYKICAgICAgICAgICAgfQogICAgICAgICAgICBlbGVtZW50ICJXZWIgQnJvd3NlciIgewogICAgICAgICAgICAgICAgc2hhcGUgV2ViQnJvd3NlcgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIk1vYmlsZSBBcHAiIHsKICAgICAgICAgICAgICAgIHNoYXBlIE1vYmlsZURldmljZUxhbmRzY2FwZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIkRhdGFiYXNlIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBDeWxpbmRlcgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIkNvbXBvbmVudCIgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZCAjODViYmYwCiAgICAgICAgICAgICAgICBjb2xvciAjMDAwMDAwCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxlbWVudCAiRmFpbG92ZXIiIHsKICAgICAgICAgICAgICAgIG9wYWNpdHkgMjUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo="},"views":{"componentViews":[{"animations":[{"elements":["18","4","5","8","9"],"order":1},{"elements":["12","15"],"order":2,"relationships":["32","36","40","44"]},{"elements":["13","16"],"order":3,"relationships":["34","38","41","46"]},{"elements":["14","17"],"order":4,"relationships":["35","39","42","43","48"]}],"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"containerId":"11","description":"The component diagram for the API Application.","elements":[{"id":"4","x":0,"y":0},{"id":"5","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"9","x":0,"y":0},{"id":"12","x":0,"y":0},{"id":"13","x":0,"y":0},{"id":"14","x":0,"y":0},{"id":"15","x":0,"y":0},{"id":"16","x":0,"y":0},{"id":"17","x":0,"y":0},{"id":"18","x":0,"y":0}],"externalContainerBoundariesVisible":false,"key":"Components","order":4,"relationships":[{"id":"32"},{"id":"34"},{"id":"35"},{"id":"36"},{"id":"38"},{"id":"39"},{"id":"40"},{"id":"41"},{"id":"42"},{"id":"43"},{"id":"44"},{"id":"46"},{"id":"48"}]}],"configuration":{"branding":{},"styles":{"elements":[{"color":"#ffffff","fontSize":22,"shape":"Person","tag":"Person"},{"background":"#08427b","tag":"Customer"},{"background":"#999999","tag":"Bank Staff"},{"background":"#1168bd","color":"#ffffff","tag":"Software System"},{"background":"#999999","color":"#ffffff","tag":"Existing System"},{"background":"#438dd5","color":"#ffffff","tag":"Container"},{"shape":"WebBrowser","tag":"Web Browser"},{"shape":"MobileDeviceLandscape","tag":"Mobile App"},{"shape":"Cylinder","tag":"Database"},{"background":"#85bbf0","color":"#000000","tag":"Component"},{"opacity":25,"tag":"Failover"}]},"terminology":{}},"containerViews":[{"animations":[{"elements":["1","4","5"],"order":1,"relationships":["22"]},{"elements":["10"],"order":2,"relationships":["28"]},{"elements":["8"],"order":3,"relationships":["29","31"]},{"elements":["9"],"order":4,"relationships":["30"]},{"elements":["11"],"order":5,"relationships":["33","37","47","49"]},{"elements":["18"],"order":6,"relationships":["45"]}],"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"description":"The container diagram for the Internet Banking System.","elements":[{"id":"1","x":0,"y":0},{"id":"4","x":0,"y":0},{"id":"5","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"9","x":0,"y":0},{"id":"10","x":0,"y":0},{"id":"11","x":0,"y":0},{"id":"18","x":0,"y":0}],"externalSoftwareSystemBoundariesVisible":false,"key":"Containers","order":3,"relationships":[{"id":"22"},{"id":"28"},{"id":"29"},{"id":"30"},{"id":"31"},{"id":"33"},{"id":"37"},{"id":"45"},{"id":"47"},{"id":"49"}],"softwareSystemId":"7"}],"deploymentViews":[{"animations":[{"elements":["50","51","52"],"order":1},{"elements":["53","54","55","57"],"order":2,"relationships":["56","58"]},{"elements":["59","60","61"],"order":3,"relationships":["62"]}],"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"description":"An example development deployment scenario for the Internet Banking System.","elements":[{"id":"50","x":0,"y":0},{"id":"51","x":0,"y":0},{"id":"52","x":0,"y":0},{"id":"53","x":0,"y":0},{"id":"54","x":0,"y":0},{"id":"55","x":0,"y":0},{"id":"57","x":0,"y":0},{"id":"59","x":0,"y":0},{"id":"60","x":0,"y":0},{"id":"61","x":0,"y":0},{"id":"63","x":0,"y":0},{"id":"64","x":0,"y":0},{"id":"65","x":0,"y":0}],"environment":"Development","key":"DevelopmentDeployment","order":7,"relationships":[{"id":"56"},{"id":"58"},{"id":"62"},{"id":"66"}],"softwareSystemId":"7"},{"animations":[{"elements":["69","70","71"],"order":1},{"elements":["67","68"],"order":2},{"elements":["72","73","74","75","77","78","79"],"order":3,"relationships":["76","80","81"]},{"elements":["82","83","84"],"order":4,"relationships":["85"]},{"elements":["86","87","88"],"order":5,"relationships":["89","93"]}],"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"description":"An example live deployment scenario for the Internet Banking System.","elements":[{"id":"67","x":0,"y":0},{"id":"68","x":0,"y":0},{"id":"69","x":0,"y":0},{"id":"70","x":0,"y":0},{"id":"71","x":0,"y":0},{"id":"72","x":0,"y":0},{"id":"73","x":0,"y":0},{"id":"74","x":0,"y":0},{"id":"75","x":0,"y":0},{"id":"77","x":0,"y":0},{"id":"78","x":0,"y":0},{"id":"79","x":0,"y":0},{"id":"82","x":0,"y":0},{"id":"83","x":0,"y":0},{"id":"84","x":0,"y":0},{"id":"86","x":0,"y":0},{"id":"87","x":0,"y":0},{"id":"88","x":0,"y":0},{"id":"90","x":0,"y":0},{"id":"91","x":0,"y":0}],"environment":"Live","key":"LiveDeployment","order":8,"relationships":[{"id":"76"},{"id":"80"},{"id":"81"},{"id":"85"},{"id":"89"},{"id":"92"},{"id":"93"}],"softwareSystemId":"7"}],"dynamicViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"description":"Summarises how the sign in feature works in the single-page application.","elementId":"11","elements":[{"id":"8","x":0,"y":0},{"id":"12","x":0,"y":0},{"id":"15","x":0,"y":0},{"id":"18","x":0,"y":0}],"externalBoundariesVisible":false,"key":"SignIn","order":6,"relationships":[{"description":"Submits credentials to","id":"32","order":"1","response":false},{"description":"Validates credentials using","id":"40","order":"2","response":false},{"description":"select * from users where username = ?","id":"44","order":"3","response":false},{"description":"Returns user data to","id":"44","order":"4","response":true},{"description":"Returns true if the hashed password matches","id":"40","order":"5","response":true},{"description":"Sends back an authentication token to","id":"32","order":"6","response":true}]}],"imageViews":[{"content":"https://raw.githubusercontent.com/structurizr/examples/main/dsl/big-bank-plc/internet-banking-system/mainframe-banking-system-facade.png","contentType":"image/png","elementId":"16","key":"MainframeBankingSystemFacade","order":5,"title":"[Code] Mainframe Banking System Facade"}],"systemContextViews":[{"animations":[{"elements":["7"],"order":1},{"elements":["1"],"order":2,"relationships":["19"]},{"elements":["4"],"order":3,"relationships":["20"]},{"elements":["5"],"order":4,"relationships":["21","22"]}],"description":"The system context diagram for the Internet Banking System.","elements":[{"id":"1","x":0,"y":0},{"id":"4","x":0,"y":0},{"id":"5","x":0,"y":0},{"id":"7","x":0,"y":0}],"enterpriseBoundaryVisible":true,"key":"SystemContext","order":2,"properties":{"structurizr.groups":"false"},"relationships":[{"id":"19"},{"id":"20"},{"id":"21"},{"id":"22"}],"softwareSystemId":"7"}],"systemLandscapeViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"TopBottom","rankSeparation":300,"vertices":false},"elements":[{"id":"1","x":0,"y":0},{"id":"2","x":0,"y":0},{"id":"3","x":0,"y":0},{"id":"4","x":0,"y":0},{"id":"5","x":0,"y":0},{"id":"6","x":0,"y":0},{"id":"7","x":0,"y":0}],"enterpriseBoundaryVisible":true,"key":"SystemLandscape","order":1,"relationships":[{"id":"19"},{"id":"20"},{"id":"21"},{"id":"22"},{"id":"23"},{"id":"24"},{"id":"25"},{"id":"26"},{"id":"27"}]}]}}