### Example: Filter Event Sessions by Presenter and Date (HTTP) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/collectionresources This example shows an HTTP GET request filtering event sessions. It selects sessions presented by a specific contact ('ContactID' 7732) that are 'Active' and start before a specified date using `lt` operator. ```http GET /api/2012-02-01/auth/resources/eventsessions/?filter=Presenter/ContactID eq 7732 and Status eq 'Active' and StartDateTime lt datetimeoffset('2012-03-07T00:00:00.000Z') ``` -------------------------------- ### Retrieve Venues Collection (GET Request) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/venues This example demonstrates how to retrieve a collection of venue links using the default API parameters. It shows a basic GET request to the venues endpoint without any specific expansion or filtering. ```http GET /api/2012-02-01/auth/resources/venues/ ``` -------------------------------- ### HTTP GET Request for EventOptionRegistration Collection Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventoptionregistrations This snippet shows an example of an HTTP GET request to retrieve a collection of EventOptionRegistration links. It demonstrates the base URL and the structure of the response, which includes Link elements for individual resources and a self-referencing link. ```HTTP GET /api/2012-02-01/auth/resources/registrations/4990/optionregistrations/ ``` -------------------------------- ### GET Address Resource Example (XML) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/addresses This snippet demonstrates an example HTTP GET request to retrieve an Address resource for an organisation. It shows the expected XML response format, including all address properties and a self-referencing link. ```http GET /api/2012-02-01/auth/resources/organisations/562/postaladdress/ ``` ```xml
Level 1 Acme Tower 98 Wallacetown Quay PO Box 98442 Northcote Metropolis 9332 New Zealand
``` -------------------------------- ### Example GET Request for Presenters Source: https://developer.arlo.co/doc/api/2012-02-01/pub/resources/presenters This example demonstrates how to retrieve a collection of presenters with specific fields (FullName, ViewUri) and specifies the response format as JSON. It utilizes query parameters to filter and format the response. ```HTTP GET /api/2012-02-01/pub/resources/presenters/?format=json&fields=FullName,ViewUri ``` -------------------------------- ### Configure and Start Arlo Web Controls Application Source: https://developer.arlo.co/doc/webcontrols/index This example shows how to configure and start the Arlo Web Controls application. It defines configurations for two 'UpcomingEvents' modules, specifying their target elements, templates, custom URLs, and the number of events to display. The application is then initialized with a platform ID and an array of these module configurations. ```javascript ``` -------------------------------- ### Example: Filter Contacts Registered in Past Week (HTTP) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/collectionresources This example demonstrates an HTTP GET request using the filter syntax to retrieve contacts registered for an event within the past week. It utilizes a date comparison with the `gt` operator and expands the 'Contact' resource. ```http GET /api/2012-02-01/auth/resources/registrations/?filter=CreatedDateTime gt datetime('2012-02-01T00:00:00.000Z')&expand=Contact ``` -------------------------------- ### GET /api/2012-02-01/auth/resources/eventtemplates/{TemplateID}/logistics/ Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventtemplatelogistics Retrieves the default catering and room setup details for a specific event template. ```APIDOC ## GET /api/2012-02-01/auth/resources/eventtemplates/{TemplateID}/logistics/ ### Description Retrieves a representation of an EventTemplateLogistics resource, which includes default catering and room setup details for an event template. ### Method GET ### Endpoint /api/2012-02-01/auth/resources/eventtemplates/{TemplateID}/logistics/ #### Path Parameters - **TemplateID** (string) - Required - The unique identifier of the event template. #### Query Parameters None #### Request Body None ### Request Example ``` GET /api/2012-02-01/auth/resources/eventtemplates/123/logistics/ ``` ### Response #### Success Response (200) - **CateringSetupDefault** (string) - The default catering setup for the event template. - **RoomSetupDefault** (string) - The default room setup for the event template. #### Response Example ```xml Buffet lunch Classroom layout with projector ``` ``` -------------------------------- ### Example Drill-Down API Request (HTTP GET) Source: https://developer.arlo.co/doc/api/2012-02-01/pub/resources/eventsearch/facets This is an example of an HTTP GET request used to drill down into specific facet values. It demonstrates how to use the 'FilterCode' and a 'Code' from a facet response to retrieve a filtered list of events. This is useful for obtaining detailed event data based on a selected category or attribute. ```http GET /api/2012-02-01/pub/resources/eventsearch/?format=json&filter=templatecategoryid=9032 ``` -------------------------------- ### URL Example for Link Expansion Source: https://developer.arlo.co/doc/api/2012-02-01/auth/hypermediaresources This URL example illustrates how to use the 'expand' query option in an HTTP GET request to retrieve related resources inline. It shows expanding 'Employment' and then nested 'Manager' and 'PostalAddress' resources. ```url ?expand=Employment,Employment/Manager,Employment/Manager/PostalAddress ``` -------------------------------- ### GET /api/2012-02-01/auth/resources/eventsessions/{SessionID}/logistics/ Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventsessionlogistics Retrieves a representation of an EventSessionLogistics resource, including room setup and detailed instructions. ```APIDOC ## GET /api/2012-02-01/auth/resources/eventsessions/{SessionID}/logistics/ ### Description Retrieves a representation of an EventSessionLogistics resource, including room setup and detailed instructions. ### Method GET ### Endpoint /api/2012-02-01/auth/resources/eventsessions/{SessionID}/logistics/ #### Path Parameters - **SessionID** (string) - Required - The ID of the event session. ### Response #### Success Response (200) - **RoomSetup** (string) - A string describing the required room arrangement or layout to use for the event, up to 128 characters long. - **RoomSetupDetails** (object) - An inline RichContent resource representing extended instructions for room layout and/or setup for the event. - **ContentType** (string) - The content type of the room setup details. - **Content** (string) - The detailed content of the room setup instructions. #### Response Example ```xml Classroom layout with projector text/plain ``` ``` -------------------------------- ### Example Response for EventOptionRegistration Collection Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventoptionregistrations This snippet illustrates the XML response structure for an HTTP GET request to the EventOptionRegistration collection. It contains multiple Link elements representing individual EventOptionRegistration resources and a 'self' link for the collection itself. ```XML ``` -------------------------------- ### Retrieve EventTemplateDescription using HTTP GET Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventtemplatedescription This snippet demonstrates how to retrieve an EventTemplateDescription resource using an HTTP GET request. It shows the resource URI and an example of the XML response, including summary, description, and related links. The 'expand' parameter can be used for link expansion. ```HTTP GET /api/2012-02-01/auth/resources/eventtemplates/123/description/ ``` ```XML text/plain application/xhtml Extend your skills with data management and analysis, setting up and using charts / graphs and creating reports.  Learn to name ranges, customise numbers and consolidate data from multiple work books and improve your knowledge of absolute and relative references.

For those who have completed a Beginners' course or equivalent.

]]>
``` -------------------------------- ### Initialize ArloWebControls Application (JavaScript) Source: https://developer.arlo.co/doc/webcontrols/index This example shows how to initialize the ArloWebControls application with essential configuration options. It includes setting the platform ID, providing a Google Maps API key, enabling developer error reporting, and defining the modules to be loaded. ```javascript ``` -------------------------------- ### HTTP GET Response Example (XML) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/customfields An example XML response for a GET request, showing custom fields including TaxCode (String) and FavouriteGenres (StringArray), along with associated FieldDescription links. ```xml TaxCode 7900-0023-AF01 FavouriteGenres Thriller Science fiction Biography ``` -------------------------------- ### Full Online Activities Control Configuration Example (JavaScript) Source: https://developer.arlo.co/doc/webcontrols/onlineactivities This comprehensive JavaScript example shows advanced configuration for the Online Activities control. It includes options for custom URLs, event handlers like onBeforeRender and onShow, and a specific template for rendering activity names. This allows for detailed customization of how activities are displayed and interacted with. ```javascript var onlineAcitvitiesControl = { moduleType: "OnlineActivities", targetElement: "online-activities-control", top: 5, template: "online-activities-control-template", eventFullMessage: "Registration Limit Reached", callbacks: { onBeforeRender: function(eventData, jQuery){//Do something with onlineActivitiesData}, onShow: function(getOAListItemsFunction, jQuery){//Do something with list item elements} }, customUrls: { eventtemplate: "http://example.com/eventtemplatepage.html", presenter: "http://example.com/presenterpage.html", venue: "http://example.com/venuepage.html" } }; ``` -------------------------------- ### RichContent Example in EventTemplateDescription (API GET Request) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/richcontent This example demonstrates how the RichContent resource is used within an EventTemplateDescription resource to represent content with HTML markup. It shows the structure of a GET request and the expected response snippet containing ContentType and Content properties. ```http GET /api/2012-02-01/auth/resources/eventtemplates/123/description/ ? 1234567891011| ... application/xhtml Extend your skills with data management and analysis, setting up and using charts / graphs and creating reports.  Learn to name ranges, customise numbers and consolidate data from multiple work books and improve your knowledge of absolute and relative references.

For those who have completed a Beginners' course or equivalent.

]]>
...
``` -------------------------------- ### GET /api/2012-02-01/auth/resources/contacts - Invalid Token Example Source: https://developer.arlo.co/doc/api/2012-02-01/auth/oauth2 This example demonstrates an API request with an invalid access token and the corresponding 401 Unauthorized response, including the WWW-Authenticate header with error details. ```APIDOC ## GET /api/2012-02-01/auth/resources/contacts ### Description This endpoint is used to retrieve contact resources. An invalid or expired access token will result in a 401 Unauthorized response. ### Method GET ### Endpoint /api/2012-02-01/auth/resources/contacts ### Parameters #### Query Parameters None #### Request Body None ### Request Example ```http GET https://demo.arlo.co/api/2012-02-01/auth/resources/contacts HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Authorization: Bearer my_invalid_token ``` ### Response #### Success Response (200) (Not applicable for this error example) #### Error Response (401 Unauthorized) - **WWW-Authenticate** (string) - Contains details about the authentication failure, including realm, error code, and an optional error message. #### Response Example ```http HTTP/1.1 401 Unauthorized Content-Length: 0 WWW-Authenticate: Basic realm="demo", error="invalid_token", error_message="The access token is invalid" ``` ### WWW-Authenticate Header Fields - **realm** (string) - The scope of the authentication (always the name of the platform). - **error** (string) - The machine-readable code of the error. - **error_message** (string, optional) - A human-readable description of the error, if available. - **scopes** (string, optional) - Any scopes relevant to the error. Typically included only when the error code is `insufficient_scope`. ### Common `error` Values - **invalid_request**: The OAuth authorization server considered the request, and found that it could not be interpreted. This is likely to be a client application error in terms of protocol use. - **invalid_token**: The specified token could not be found, has expired, or has been revoked. A new token is required. If you have a stored `refresh_token`, you can make a request to refresh your access token. If you do not have a refresh token, you must start the authentication process again and obtain a new access token. - **expired_token**: The OAuth authorization server extracted an access token from the request, but determined it had expired. The token supplied has expired. If you have a refresh token, you should use it to request a new one. - **insufficient_scope**: The OAuth authorization server extracted an access token from the request, but the scopes to which it pertained were insufficient to complete the requested operation. The token supplied does not have the scope required to execute the API call successfully. The required scope will be provided as one of the values of the WWW-Authenticate response header. A new token with the required scope (or an all encompassing scope) should be requested from the authorization server - this will often require a new round of user consent. ``` -------------------------------- ### GET /api/2012-02-01/auth/resources/eventsessions/ Source: https://developer.arlo.co/doc/api/2012-02-01/auth/collectionresources Retrieves a collection of event sessions, filtered by presenter, status, and start date. ```APIDOC ## GET /api/2012-02-01/auth/resources/eventsessions/ ### Description Filter expression to retrieve a collection of all EventSessions starting in the next week (starting before 7 Mar 2012 12:00AM UTC) that will be presented by John Mitchell (with `ContactID` 7732). ### Method GET ### Endpoint `/api/2012-02-01/auth/resources/eventsessions/` ### Query Parameters - **filter** (string) - Required - The filter expression to apply. Example: `Presenter/ContactID eq 7732 and Status eq 'Active' and StartDateTime lt datetimeoffset('2012-03-07T00:00:00.000Z')` ### Request Example ``` GET /api/2012-02-01/auth/resources/eventsessions/?filter=Presenter/ContactID eq 7732 and Status eq 'Active' and StartDateTime lt datetimeoffset('2012-03-07T00:00:00.000Z') ``` ### Response #### Success Response (200) - **Event Session Data**: Details of the event sessions matching the filter. ``` -------------------------------- ### Example XML Response for Organisations with Expansion Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/organisations This is an example of the XML response received when requesting organisations with the 'Organisation' expansion. It includes a collection of 'Link' elements, each containing detailed 'Organisation' data such as ID, Name, contact information, and related links. ```XML 823 Acme Consultants Acme Consultants Limited admin@acme.example.org ACMECONSUL04 74-582-821 +64 4 211 2334 +64 4 211 2334 ext 231 acme.example.org Active 2009-11-23T02:49:59.493Z 2009-11-25T02:11:32.174Z 824 Acme Engineering Acme Engineering Limited engineering@acme.example.org ACMEENGIN23 23-622-881 +64 4 211 2314 +64 4 211 2314 ext 101 acme.example.org Active 2009-11-23T02:49:59.493Z 2009-11-25T02:11:32.174Z ... ``` -------------------------------- ### Display Next Running Events in Search Results Template Source: https://developer.arlo.co/doc/webcontrols/search This example shows how to structure an HTML template for search results to display next running events. It requires a specific class structure ('nextrunning-') within the template to render event details and associated URIs. ```html ``` -------------------------------- ### Example HTTP Request and Response with Invalid Token Source: https://developer.arlo.co/doc/api/2012-02-01/auth/oauth2 Demonstrates an example GET request to the Arlo API with an invalid authorization token and the subsequent HTTP 401 Unauthorized response, including the WWW-Authenticate header with error details. ```http GET https://demo.arlo.co/api/2012-02-01/auth/resources/contacts HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Authorization: Bearer my_invalid_token ``` ```http HTTP/1.1 401 Unauthorized Content-Length: 0 WWW-Authenticate: Basic realm="demo", error="invalid_token", error_message="The access token is invalid" ``` -------------------------------- ### Venue Control Full Configuration Example - JavaScript Source: https://developer.arlo.co/doc/webcontrols/Venue This example shows a comprehensive configuration for the Arlo Venues control, including options for displaying a single venue by ID or via a query string. It also demonstrates how to set custom templates, define callbacks for rendering events, and specify custom URLs for venue details. This configuration allows for advanced customization of venue display. ```javascript var venueControl = { moduleType: "Venues", targetElement: "venue-control", //Option 1 for showing a single venue (Or multiple! e.g.[11,12]) venues: [11], //Option 2 for showing a single venue queryStringConfig: ["venue"], template: "venue-control-template", callbacks: { onBeforeRender: function(venueData, jQuery){//Do something with venueData}, onShow: function(getVenueListItemsFunction, jQuery){ //Do something with venue item(s) elements } }, customUrls: { venue: "http://myawesomewebsite.com/venuepage.html" } }; ``` -------------------------------- ### Upcoming Events Control Setup (HTML & JavaScript) Source: https://developer.arlo.co/doc/webcontrols/search This snippet demonstrates the necessary HTML elements and JavaScript configuration to create an Upcoming Events control. It includes placeholder divs for the control, a script to load Arlo JS Controls, and template scripts for rendering event details. The JavaScript initializes the control with a platform ID and specific module configurations. ```html
``` -------------------------------- ### Configure Arlo Presenter Control with Options (JavaScript) Source: https://developer.arlo.co/doc/webcontrols/presenter This example shows a more advanced configuration for the Presenter control. It includes options for filtering by specific presenters, using query string parameters for configuration, defining custom URLs, and setting up callback functions for rendering events. It assumes a template with the ID 'presenter-control-template' is defined. ```javascript var presenterControl = { moduleType: "Presenters", targetElement: "presenter-control", //Option 1 for showing a single presenter (Or multiple! e.g.[11,12]) presenters: [11], //Option 2 for showing a single presenter queryStringConfig: ["presenter"], template: "presenter-control-template", callbacks: { onBeforeRender: function(eventTemplateData, jQuery){//Do something with eventTemplateData}, onShow: function(getEventTemplateListItemsFunction, jQuery){ //Do something with event template item(s) elements } }, customUrls: { presenter: "http://example.com/presenterpage.html" } }; ``` -------------------------------- ### GET /api/2012-02-01/auth/resources/events/{EventID}/logistics/ Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventlogistics Retrieves a representation of an EventLogistics resource for a specific event, including catering and room setup details. ```APIDOC ## GET /api/2012-02-01/auth/resources/events/{EventID}/logistics/ ### Description Retrieves a representation of an EventLogistics resource, including catering and room setup details for a specific event. ### Method GET ### Endpoint /api/2012-02-01/auth/resources/events/{EventID}/logistics/ #### Path Parameters - **EventID** (string) - Required - The unique identifier of the event. #### Query Parameters None #### Request Body None ### Request Example ``` GET /api/2012-02-01/auth/resources/events/456/logistics/ ``` ### Response #### Success Response (200) - **CateringSetup** (string) - A brief description of the catering setup. - **RoomSetup** (string) - A brief description of the room arrangement. - **CateringDetails** (object) - Extended instructions for caterers. - **ContentType** (string) - The content type of the catering details. - **Content** (string) - The detailed catering instructions. - **RoomSetupDetails** (object) - Extended instructions for room layout and setup. - **ContentType** (string) - The content type of the room setup details. - **Content** (string) - The detailed room setup instructions. #### Response Example ```xml Buffet lunch Classroom layout with projector text/plain text/plain ``` ``` -------------------------------- ### Update Organisation with PostalAddress and KeyContact (XML) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/organisations This example demonstrates a PUT request to update an existing organisation. It includes new PostalAddress and KeyContact information, overwriting any previous values for these fields. The request uses XML for data transfer. ```http PUT https://demo.arlo.co/api/2012-02-01/auth/resources/organisations/823/ HTTP/1.1 Accept: application/xml Accept-Encoding: gzip, deflate Content-Type: application/xml Content-Length: 1769 823 Acme Consultants Acme Consultants Limited admin@acme.example.org ACMECONSUL04 74-582-821 +64 4 211 2334 +64 4 211 2334 ext 231 acme.example.org Active 2009-11-23T02:49:59.493Z 2009-11-25T02:11:32.174Z
98 Wallacetown Quay PO Box 98442 Northcote Metropolis 9332 New Zealand
``` -------------------------------- ### Retrieve Event Templates (GET Request) Source: https://developer.arlo.co/doc/api/2012-02-01/auth/resources/eventtemplates This snippet demonstrates how to retrieve a collection of event templates using a GET request to the Arlo API. It includes optional parameters for expanding related resources, filtering the results, sorting the collection, and paginating the response. The example shows a basic request with default parameters. ```http GET /api/2012-02-01/auth/resources/eventtemplates/ ``` -------------------------------- ### Format Advertised Offers with Custom Configuration (Template Helper) Source: https://developer.arlo.co/doc/webcontrols/onlineactivities The `formatAdvertisedOffers` helper provides flexible control over how advertised offers and pricing are displayed. It accepts a configuration object to customize various aspects, such as showing only the best offer, including tax, displaying labels, messages, and currency codes. This helper is essential for presenting pricing information clearly and according to specific design requirements. ```html <%= formatAdvertisedOffers({ showPriceWithTaxInclusive: true, showSingleOffer: false, showLabel: true, showCurrencyCode: true, showMessage: true, showTaxRate: true }) %> <%= formatAdvertisedOffers({ showSingleOffer: true, freeText: "Special Offer" }) %> ``` -------------------------------- ### Collection Entity Structure Example (JSON) Source: https://developer.arlo.co/doc/api/2012-02-01/pub/resources/eventtemplatecategoryitems This JSON snippet illustrates the general structure of a collection entity. It includes pagination fields like StartIndex and Count, and an Items array containing individual records. The TotalCount is optional and only included if requested. ```json { "StartIndex": 0, "Count": 20, "Items": [ { "EventTemplateID": 9002, "Title": "Motivation and Leadership", "Summary": "This Short Course is aimed directly at enabling you or your organisation to understand and practise the implementation of process mapping. The course will provide you with the tools and processes and a proven methodology for identifying your current AS IS business process and enable you to develop the SHOULD BE roadmap", "Code": "MOTI", "CategoryID": 9032, "AdvertisedDuration": "3 hours", "Uri": "http://acme.example.org/courses/9002-motivation-and-leadership", "BestAdvertisedOffers": [ { "OfferID": 0, "IsDiscountOffer": false, "OfferAmount": { "CurrencyCode": "AUD", "AmountTaxExclusive": 2181.82, "AmountTaxInclusive": 2400.00, "FormattedAmountTaxExclusive": "$2,181.82", "FormattedAmountTaxInclusive": "$2,400.00", "TaxRate": { "ShortName": "GST", "Name": "GST (10%)", "RatePercent": 10.000 } } } ] }, { "CategoryID": 9032, "Title": "Visit our partner site for more courses!", "Uri": "http://acme-partner.example.org/" }, { "EventTemplateID": 9075, "Title": "Managing People", "Summary": "To enable participants to understand and interpret accounting reports and to use them to assist in making effective business decisions. To clown around.", "Code": "LEAD", "Tags": [ "Top 10", "New in 2013" ], "CategoryID": 9032, "AdvertisedDuration": "1 day", "Uri": "http://acme.example.org/courses/9075-managing-people", "AdvertisedPresenters": [ { "PresenterID": 11224, "Name": "Louise Saddler" }, { "PresenterID": 11152, "Name": "Daisy Hume" } ], "Credits": [ { "Type": "PD points", "Value": 2.50 }, { "Type": "PD hours", "Value": 1.00 } ], "RegisterInterestUri": "http://demo.example.org/nz/register-interest?t=0&e=4857bd48-9a09-4eae-8ab2-d55c78a10526", "BestAdvertisedOffers": [ { "OfferID": 0, "IsDiscountOffer": false, "OfferAmount": { "CurrencyCode": "AUD", "AmountTaxExclusive": 2181.82, "AmountTaxInclusive": 2400.00, "FormattedAmountTaxExclusive": "$2,181.82", "FormattedAmountTaxInclusive": "$2,400.00", "TaxRate": { "ShortName": "GST", "Name": "GST (10%)", "RatePercent": 10.000 } } } ] }, ... ] } ``` -------------------------------- ### GET /api/2012-02-01/auth/resources/contacts/{id}/ Source: https://developer.arlo.co/doc/api/2012-02-01/auth/oauth2/apiusage Example of using an access token to authenticate an API call to retrieve a contact resource. ```APIDOC ## GET /api/2012-02-01/auth/resources/contacts/{id}/ ### Description An example of how to use a Bearer token to access a protected resource, such as retrieving contact information. ### Method GET ### Endpoint `/api/2012-02-01/auth/resources/contacts/{id}/` ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the contact resource. #### Query Parameters None #### Request Body None #### Request Headers - **Authorization** (string) - Required - The access token obtained from the token exchange, prefixed with `Bearer `. Example: `Bearer d5382c0000a5821280de0da32f7c0f01` ### Request Example ```http GET https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/562/ HTTP/1.1 Accept: application/xml Accept-Encoding: gzip, deflate Authorization: Bearer d5382c0000a5821280de0da32f7c0f01 ``` ### Response #### Success Response (200) Returns the requested resource (e.g., contact details) in the specified format (e.g., XML). #### Response Example (Example response structure depends on the specific resource requested and format, not provided in the source text.) #### Response Fields (Response fields depend on the specific resource being requested. Refer to the relevant API documentation for details.) ```