Blog  |  Support  |  Forums

Search Results for 'script manager'

Tap Forms – Organizer Database App for Mac, iPhone, and iPad Forums Search Search Results for 'script manager'

Viewing 15 results - 46 through 60 (of 64 total)
  • Author
    Search Results
  • #39643
    Sam Moffatt
    Participant

    I’ll walk through this a little as this is my bulk scan script. It’s probably a bit much but it has a bunch of piece that might help.

    document.getFormNamed('Script Manager').runScriptNamed('Prompter Functions');
    

    This is pulling in my Prompter Functions via the Script Manager method. Basically Script Manager is a Tap Forms form named ‘Script Manager’ and then it uses ‘Form Scripts’.

    var tracking_number_id = 'fld-c487390743c947969cbe661cff596855';
    var received_date_id = 'fld-e3e3539ee04f4cc7971c7098c572104d';
    var confirmed_id = 'fld-2adb9ba8cdd048bbbb614d46b415ada5';
    var alternate_tracking_numbers_id = 'fld-cf8718051bea4cc2aba0069ae76f32b7';
    var alternate_tracking_number_id = 'fld-7342203d8f36415191bf8419fb6f70dc';
    var carrier_id = 'fld-0950c430cb0c41f79c51d43a544b366b';
    var zip_code_id = 'fld-4f73faa8937446a0a3b24e6dd4624d6b';
    var shipper_id = 'fld-1789ae45fd1f4f588294eff0c2fb6045';
    

    These are all of the field ID’s I care about, you’ll see them spliced through. Obviously your fields will be different.

    function findRecord(targetTrackingNumber)
    {
    	var targetRecord = null;
    	MainLoop:
    	for(candidateRecord of form.getRecords())
    	{
    		if (targetTrackingNumber == candidateRecord.getFieldValue(tracking_number_id))
    		{
    			targetRecord = candidateRecord;
    			break MainLoop;
    		}
    		
    		
    		for (alternateRecord of candidateRecord.getFieldValue(alternate_tracking_numbers_id))
    		{
    			if (targetTrackingNumber == alternateRecord.getFieldValue(alternate_tracking_number_id))
    			{
    				targetRecord = candidateRecord;
    				break MainLoop;
    			}
    		}
    	}
    	
    	return targetRecord;
    }
    

    This is a quick method to basically brute force scan all of the records and search for them. I mentioned earlier that Brendan is adding a function to make this a little less relevant however what it’s doing is getting a list of all of the records, checking if the tracking number matches (in your case it’ll be your box barcode or item barcode) and it also checks the values of a table field that is in my shipments form. Because there are two levels of loops in this, I use a trick to make sure I break out of them easily. Shipping is fun where a package might have more than one tracking number, hence the crazy setup.

    async function start(){
    	try {
    		while (1)
    		{
    

    This is the start of the meat and it has three things to be interested in. The async keyword is required to get my prompter functions to work properly and enable you to do blocking calls without having to manage the callbacks all yourself. The try is a fallback for an exceptions that might escape and the while (1) is our infinite loop.

    			let zipcode = undefined;
    			let carrier = '';
    			let barcode = '';
    			let scanBarcode = await promptText("Scan Shipment", "Barcode:");
    

    This sets up some variables, in my case I’m tracking zipcode for the package (USPS embed this into their tracking number), a carrier that I can automatically infer (USPS and UPS) and then obviously the core barcode. This uses the promptText function which is in that Prompter Functions I mentioned earlier. It has await prefixed to make it block until we get a response back.

    			if (!scanBarcode)
    			{
    				break;
    			}
    

    This is pretty straight forward, if we don’t get anything back from the barcode then we abort the loop. This is our exit criteria.

    			let matches = scanBarcode.match(/420(9[0-9]{4})(.*)/);
    			if (matches)
    			{
    				carrier = 'USPS';
    				zipcode = matches[1];
    				barcode = matches[2];
    			}
    			else
    			{
    				barcode = scanBarcode;
    			}
    

    This isn’t relevant to you as much but it basically looks for a USPS barcode and extracts the useful information out of it. It resets the barcode to be what the label and tracking number actually is versus the full details that are encoded into the barcode. I’m in California so my zipcode is prefixed with a 9 which is why it looks the way it does.

    			matches = scanBarcode.match(/^1Z/);
    			if (matches)
    			{
    				carrier = 'UPS';
    			}
    

    This also isn’t as relevant but it looks for a UPS style barcode and sets it automatically. Depending on how your barcode generation is done, this might be something you can apply where you have different barcode prefixes for stuff (or not).

    			console.log(barcode);
    			
    			let targetRecord = findRecord(barcode);
    

    I logged the barcode because I wanted to see what it was in the console. This is useful for understanding when something weird happens. This is then fed into that findRecord method before to find a record that matches, or not.

    			if (targetRecord)
    			{
    				// Flip confirmed flag but otherwise leave it alone.
    				targetRecord.setFieldValue(confirmed_id, true);
    				document.saveAllChanges();
    				console.log("Updated existing record for " + barcode);
    			}
    

    For me I’m looking to confirm or create a record that I’m scanning. In this case if for some reason the shipping number already exists and I found a matching record, I just toggle a flag saying that I know it exists and move on.

    			else
    			{
    				let payload = {
    					[tracking_number_id]: barcode,
    					[confirmed_id]: true
    				};
    

    Ok, the else case means this tracking number doesn’t exist already so we need to create it. I start to create a new record here. This syntax with the square brackets is to get the value of tracking_number_id instead of using tracking_number_id as the key.

    				if (carrier)
    				{
    					payload[carrier_id] = carrier;
    					payload[zip_code_id] = zipcode;
    				}
    

    If there is a carrier set then this gets set up as well including the zipcode (USPS).

    				let shipper = await promptText("Enter Shipper Name", "Shipper: ");
    				console.log(shipper);
    				
    				if (shipper)
    				{
    					payload[shipper_id] = shipper;
    				}
    

    I ask for the shipper name in case that’s obvious, again with the promptText method. That’s useful for knowing where something is from if I want to add it in.

    				console.log(JSON.stringify(payload));
    
    				let newRecord = form.addNewRecord();
    				newRecord.setFieldValues(payload);
    				document.saveAllChanges();
    

    I log out what I’m about to create to see what it is during debugging. I then create a new record, use setFieldValues to set up the values and then save the changes. Too easy!

    			}
    		}
    	} catch (error) {
    		console.log("Error: " + error);
    	}
    }
    
    start();

    This is closing everything out and then triggering the script to begin with. The catch is the follow up to the try and is a fail safe to log the message and go from there. It’s closing out the loop so assuming you enter in a valid barcode, it’ll keep looping until it’s done.

    I thought I had another script that handled a little closer to what you were doing but I can’t find where I put it.

    Here’s the script in full:

    document.getFormNamed('Script Manager').runScriptNamed('Prompter Functions');
    
    var tracking_number_id = 'fld-c487390743c947969cbe661cff596855';
    var received_date_id = 'fld-e3e3539ee04f4cc7971c7098c572104d';
    var confirmed_id = 'fld-2adb9ba8cdd048bbbb614d46b415ada5';
    var alternate_tracking_numbers_id = 'fld-cf8718051bea4cc2aba0069ae76f32b7';
    var alternate_tracking_number_id = 'fld-7342203d8f36415191bf8419fb6f70dc';
    var carrier_id = 'fld-0950c430cb0c41f79c51d43a544b366b';
    var zip_code_id = 'fld-4f73faa8937446a0a3b24e6dd4624d6b';
    var shipper_id = 'fld-1789ae45fd1f4f588294eff0c2fb6045';
    
    function findRecord(targetTrackingNumber)
    {
    	var targetRecord = null;
    	MainLoop:
    	for(candidateRecord of form.getRecords())
    	{
    		if (targetTrackingNumber == candidateRecord.getFieldValue(tracking_number_id))
    		{
    			targetRecord = candidateRecord;
    			break MainLoop;
    		}
    		
    		
    		for (alternateRecord of candidateRecord.getFieldValue(alternate_tracking_numbers_id))
    		{
    			if (targetTrackingNumber == alternateRecord.getFieldValue(alternate_tracking_number_id))
    			{
    				targetRecord = candidateRecord;
    				break MainLoop;
    			}
    		}
    	}
    	
    	return targetRecord;
    }
    
    async function start(){
    	try {
    		while (1)
    		{
    			let zipcode = undefined;
    			let carrier = '';
    			let barcode = '';
    			let scanBarcode = await promptText("Scan Shipment", "Barcode:");
    			
    			if (!scanBarcode)
    			{
    				break;
    			}
    
    			let matches = scanBarcode.match(/420(9[0-9]{4})(.*)/);
    			if (matches)
    			{
    				carrier = 'USPS';
    				zipcode = matches[1];
    				barcode = matches[2];
    			}
    			else
    			{
    				barcode = scanBarcode;
    			}
    			
    			matches = scanBarcode.match(/^1Z/);
    			if (matches)
    			{
    				carrier = 'UPS';
    			}
    			console.log(barcode);
    			
    			let targetRecord = findRecord(barcode);
    				
    			if (targetRecord)
    			{
    				// Flip confirmed flag but otherwise leave it alone.
    				targetRecord.setFieldValue(confirmed_id, true);
    				document.saveAllChanges();
    				console.log("Updated existing record for " + barcode);
    			}
    			else
    			{
    				let payload = {
    					[tracking_number_id]: barcode,
    					[confirmed_id]: true
    				};
    				
    				if (carrier)
    				{
    					payload[carrier_id] = carrier;
    					payload[zip_code_id] = zipcode;
    				}
    
    				let shipper = await promptText("Enter Shipper Name", "Shipper: ");
    				console.log(shipper);
    				
    				if (shipper)
    				{
    					payload[shipper_id] = shipper;
    				}
    				
    				console.log(JSON.stringify(payload));
    
    				let newRecord = form.addNewRecord();
    				newRecord.setFieldValues(payload);
    				document.saveAllChanges();
    			}
    		}
    	} catch (error) {
    		console.log("Error: " + error);
    	}
    }
    
    start();
    #39641
    Sam Moffatt
    Participant

    Credit to @daniel_leu for this originally and I think a variant of them will be coming in the sample scripts. These are the two that I use personally and I figured I’d share them. I added this in my “Script Manager” form as “Prompter Functions”, so if you have that included already then you can add this as a new one.

    If you’re going to use these, the calling function needs to be prefixed with async to make it work properly.

    // ========== Prompter Functions Start ========== //
    // NAME: Prompter Functions
    // VERSION: 1.0
    /**
     * Prompter Functions for using the async system to handle some requests.
     */
     
    // Temporary variable to store callback details.
    var prompterTempVar = undefined;
    
    /**
     * Prompt a confirmation dialog with a simple message.
     *
     * NOTE: This method uses async, please make sure your calling method is declared 'async'.
     *
     * @param {string} text - The text to display in the dialog for the confirmation.
     * @param {string} continueTitle - The text for the continue button.
     * @param {string} cancelTitle - The text for the cancel button.
     *
     * @return {boolean} Boolean result if the user confirmed or declined the dialog.
     */
    function promptConfirm(text, continueTitle = 'Continue', cancelTitle = 'Cancel') {
    	return new Promise(function(resolve, reject) {
    	  	let prompter = Prompter	.new();
      		prompter.cancelButtonTitle = cancelTitle;
    		prompter.continueButtonTitle = continueTitle;
    		prompter.show(text, ((status) => {
    			if (status == true) {
    				resolve(true);
    			} else {
    				resolve(false);
    			}		
    		}));
    	});
    }
    
    /**
     * Prompt 
     *
     * NOTE: This method uses async, please make sure your calling method is declared 'async'.
     *
     * @param {string} text - The text to display in the dialog for the confirmation.
     * @param {string} popupName - The prefix to display for the text box of the prompt.
     * @param {string} [continueTitle=Continue] - The text for the continue button.
     * @param {string} [cancelTitle=Cancel] - The text for the cancel button.
     *
     * @return {(string|boolean)} The input text or false if cancelled.
     */
    function promptText(text, popupName, continueTitle = 'Continue', cancelTitle = 'Cancel'){
    	return new Promise(function(resolve, reject) {
    		prompterTempVar = undefined;
    	  	let prompter = Prompter	.new();
    	  	prompter.addParameter(popupName, 'prompterTempVar')
      		prompter.cancelButtonTitle = cancelTitle;
    		prompter.continueButtonTitle = continueTitle;
    		prompter.show(text, ((status) => {
    			if (status == true && prompterTempVar) {
    				resolve(prompterTempVar);
    			} else {
    				resolve(false);
    			}		
    		}));
    	});
    }
    // ========== Prompter Functions End ========== //
    

    You can also get a copy of this file here: https://github.com/pasamio/tftools/blob/master/scripts/js/prompter.js.

    #39535
    Grischa Dallmer
    Participant

    Hello everybody, recently the app is crashing often, here is a crash log. Version is TF 5.3.10 ( Build 1832)

    Process:               Tap Forms Mac 5 [3344]
    Path:                  /Applications/TapFormsMac5.app/Contents/MacOS/Tap Forms Mac 5
    Identifier:            Tap Forms Mac 5
    Version:               5.3.10 (1832)
    Code Type:             X86-64 (Native)
    Parent Process:        ??? [1]
    Responsible:           Tap Forms Mac 5 [3344]
    User ID:               501
    
    Date/Time:             2020-02-09 10:42:40.425 +0100
    OS Version:            Mac OS X 10.14.6 (18G103)
    Report Version:        12
    Bridge OS Version:     3.0 (14Y904)
    Anonymous UUID:        3A801F53-886C-FB74-5E5B-31F26286F81E
    
    Sleep/Wake UUID:       42F44799-ABE4-45ED-937F-53D0A785D195
    
    Time Awake Since Boot: 27000 seconds
    Time Since Wake:       3700 seconds
    
    System Integrity Protection: enabled
    
    Crashed Thread:        0  Dispatch queue: com.apple.main-thread
    
    Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
    Exception Codes:       0x0000000000000001, 0x0000000000000000
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Signal:    Illegal instruction: 4
    Termination Reason:    Namespace SIGNAL, Code 0x4
    Terminating Process:   exc handler [3344]
    
    Application Specific Information:
    Crashing on exception: Invalid type in JSON write (__NSDate)
    
    Application Specific Backtrace 1:
    0   CoreFoundation                      0x00007fff50da2a7d __exceptionPreprocess + 256
    1   libobjc.A.dylib                     0x00007fff7b473a17 objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff50da28af +[NSException raise:format:] + 201
    3   Foundation                          0x00007fff52f73a1d _writeJSONValue + 722
    4   Foundation                          0x00007fff52f74fe5 ___writeJSONArray_block_invoke + 145
    5   CoreFoundation                      0x00007fff50d25233 -[__NSSingleObjectArrayI enumerateObjectsWithOptions:usingBlock:] + 66
    6   Foundation                          0x00007fff52f74e9c _writeJSONArray + 300
    7   Foundation                          0x00007fff52f736f7 -[_NSJSONWriter dataWithRootObject:options:error:] + 124
    8   Foundation                          0x00007fff52f735dc +[NSJSONSerialization dataWithJSONObject:options:error:] + 338
    9   CouchbaseLite                       0x0000000102b632bb +[CBLJSON dataWithJSONObject:options:error:] + 335
    10  CouchbaseLite                       0x0000000102af9c2e toJSONData + 75
    11  CouchbaseLite                       0x0000000102afa3df -[CBL_SQLiteViewStorage _runQueryWithOptions:onRow:] + 1388
    12  CouchbaseLite                       0x0000000102afadc4 -[CBL_SQLiteViewStorage regularQueryWithOptions:status:] + 467
    13  CouchbaseLite                       0x0000000102af9d56 -[CBL_SQLiteViewStorage queryWithOptions:status:] + 157
    14  CouchbaseLite                       0x0000000102b1635a -[CBLView _queryWithOptions:status:] + 232
    15  CouchbaseLite                       0x0000000102b0c127 -[CBLDatabase(Views) queryViewNamed:options:ifChangedSince:status:] + 494
    16  CouchbaseLite                       0x0000000102b0aa18 -[CBLQuery run:] + 143
    17  TFCoreMac                           0x00000001024b4a5c -[TFForm recordsForJoinValue:joinField:] + 662
    18  Tap Forms Mac 5                     0x0000000102039bb1 Tap Forms Mac 5 + 3488689
    19  CoreFoundation                      0x00007fff50d4f2f6 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
    20  CoreFoundation                      0x00007fff50d4f270 ___CFXRegistrationPost_block_invoke + 63
    21  CoreFoundation                      0x00007fff50d4f1da _CFXRegistrationPost + 404
    22  CoreFoundation                      0x00007fff50d57688 ___CFXNotificationPost_block_invoke + 87
    23  CoreFoundation                      0x00007fff50cc0014 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1642
    24  CoreFoundation                      0x00007fff50cbf3c7 _CFXNotificationPost + 732
    25  Foundation                          0x00007fff52f45aab -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
    26  Tap Forms Mac 5                     0x0000000101fafad9 Tap Forms Mac 5 + 2923225
    27  CoreFoundation                      0x00007fff50d4f2f6 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
    28  CoreFoundation                      0x00007fff50d4f270 ___CFXRegistrationPost_block_invoke + 63
    29  CoreFoundation                      0x00007fff50d4f1da _CFXRegistrationPost + 404
    30  CoreFoundation                      0x00007fff50d57688 ___CFXNotificationPost_block_invoke + 87
    31  CoreFoundation                      0x00007fff50cc0014 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1642
    32  CoreFoundation                      0x00007fff50cbf3c7 _CFXNotificationPost + 732
    33  Foundation                          0x00007fff52f45aab -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
    34  AppKit                              0x00007fff4e5d044b -[NSTextField textDidEndEditing:] + 344
    35  Tap Forms Mac 5                     0x0000000101f527a6 Tap Forms Mac 5 + 2541478
    36  CoreFoundation                      0x00007fff50d4f2f6 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
    37  CoreFoundation                      0x00007fff50d4f270 ___CFXRegistrationPost_block_invoke + 63
    38  CoreFoundation                      0x00007fff50d4f1da _CFXRegistrationPost + 404
    39  CoreFoundation                      0x00007fff50d57688 ___CFXNotificationPost_block_invoke + 87
    40  CoreFoundation                      0x00007fff50cc0014 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1642
    41  CoreFoundation                      0x00007fff50cbf3c7 _CFXNotificationPost + 732
    42  Foundation                          0x00007fff52f45aab -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
    43  AppKit                              0x00007fff4e5cfeff -[NSTextView(NSSharing) resignFirstResponder] + 877
    44  AppKit                              0x00007fff4e431880 -[NSWindow _realMakeFirstResponder:] + 245
    45  Tap Forms Mac 5                     0x0000000101fff0ca Tap Forms Mac 5 + 3248330
    46  AppKit                              0x00007fff4e5d4644 -[NSApplication(NSResponder) sendAction:to:from:] + 312
    47  AppKit                              0x00007fff4e63e992 -[NSControl sendAction:to:] + 86
    48  AppKit                              0x00007fff4e63e8c4 __26-[NSCell _sendActionFrom:]_block_invoke + 136
    49  AppKit                              0x00007fff4e63e7c6 -[NSCell _sendActionFrom:] + 178
    50  AppKit                              0x00007fff4e66b54b -[NSButtonCell _sendActionFrom:] + 96
    51  AppKit                              0x00007fff4e63d0e1 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2375
    52  AppKit                              0x00007fff4e66b29c -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 698
    53  AppKit                              0x00007fff4e63bb1e -[NSControl mouseDown:] + 791
    54  AppKit                              0x00007fff4e517937 -[NSWindow(NSEventRouting) _handleMouseDownEvent:isDelayedEvent:] + 5724
    55  AppKit                              0x00007fff4e44e1a6 -[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:] + 2295
    56  AppKit                              0x00007fff4e44d667 -[NSWindow(NSEventRouting) sendEvent:] + 478
    57  AppKit                              0x00007fff4e2ece4b -[NSApplication(NSEvent) sendEvent:] + 331
    58  AppKit                              0x00007fff4e2db5c0 -[NSApplication run] + 755
    59  AppKit                              0x00007fff4e2caac8 NSApplicationMain + 777
    60  libdyld.dylib                       0x00007fff7cc413d5 start + 1
    
    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0   com.apple.AppKit              	0x00007fff4e6e6867 -[NSApplication _crashOnException:] + 109
    1   com.apple.AppKit              	0x00007fff4e6e6748 -[NSApplication reportException:] + 916
    2   com.tapzapp.tapforms-mac      	0x000000010206cb70 0x101ce6000 + 3697520
    3   com.apple.AppKit              	0x00007fff4e2db645 -[NSApplication run] + 888
    4   com.apple.AppKit              	0x00007fff4e2caac8 NSApplicationMain + 777
    5   libdyld.dylib                 	0x00007fff7cc413d5 start + 1
    
    Thread 1:: com.twitter.crashlytics.mac.MachExceptionServer
    0   libsystem_kernel.dylib        	0x00007fff7cd79f4a write + 10
    1   com.tapzapp.tapforms-mac      	0x00000001020621ef 0x101ce6000 + 3654127
    2   com.tapzapp.tapforms-mac      	0x0000000102059f09 0x101ce6000 + 3620617
    3   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    4   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    5   libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 2:: com.apple.NSEventThread
    0   libsystem_kernel.dylib        	0x00007fff7cd7622a mach_msg_trap + 10
    1   libsystem_kernel.dylib        	0x00007fff7cd7676c mach_msg + 60
    2   com.apple.CoreFoundation      	0x00007fff50cec94e __CFRunLoopServiceMachPort + 328
    3   com.apple.CoreFoundation      	0x00007fff50cebebc __CFRunLoopRun + 1612
    4   com.apple.CoreFoundation      	0x00007fff50ceb61e CFRunLoopRunSpecific + 455
    5   com.apple.AppKit              	0x00007fff4e2ea4a2 _NSEventThread + 175
    6   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    7   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    8   libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 3:: CouchbaseLite
    0   com.apple.CoreFoundation      	0x00007fff50cde12c -[__NSArrayM objectAtIndex:] + 0
    1   com.apple.security            	0x00007fff5c2107a8 SecTrustCreateWithCertificates + 126
    2   libcoretls_cfhelpers.dylib    	0x00007fff7a18c7d2 tls_helper_create_peer_trust + 222
    3   com.apple.security            	0x00007fff5c42b790 sslCreateSecTrust + 47
    4   com.apple.security            	0x00007fff5c23c2a7 SSLCopyPeerTrust + 68
    5   com.apple.CFNetwork           	0x00007fff4fcf6101 SocketStream::_copyPeerTrustWithPinning_NoLock(SSLContext*, __SecTrust**) + 27
    6   com.apple.CFNetwork           	0x00007fff4fc41e27 SocketStream::copyProperty_NoLock(void const*, __CFString const*) + 2193
    7   com.apple.CFNetwork           	0x00007fff4fc46558 virtual thunk to SocketStream::copyProperty(void const*, __CFString const*) + 48
    8   com.apple.CoreFoundation      	0x00007fff50d9a55f CFReadStreamCopyProperty + 98
    9   com.apple.CFNetwork           	0x00007fff4fc4f00d HTTPReadFilter::_streamImpl_CopyProperty(__CFString const*) const + 297
    10  com.apple.CFNetwork           	0x00007fff4fc4eecb CoreStreamBase::_streamInterface_CopyProperty(__CFString const*) const + 23
    11  com.apple.CFNetwork           	0x00007fff4fc4ee41 HTTPNetStreamInfo::copyConnectionProperty(__CFString const*) const + 109
    12  com.apple.CoreFoundation      	0x00007fff50d9a55f CFReadStreamCopyProperty + 98
    13  com.apple.CoreFoundation      	0x00007fff50d9a55f CFReadStreamCopyProperty + 98
    14  com.couchbase.CouchbaseLite   	0x0000000102b35a32 -[CBLSocketChangeTracker checkSSLCert] + 40
    15  com.couchbase.CouchbaseLite   	0x0000000102b3679e -[CBLSocketChangeTracker stream:handleEvent:] + 304
    16  com.apple.CoreFoundation      	0x00007fff50d6055d _signalEventSync + 223
    17  com.apple.CoreFoundation      	0x00007fff50d60687 _cfstream_solo_signalEventSync + 232
    18  com.apple.CoreFoundation      	0x00007fff50d5fee5 _CFStreamSignalEvent + 481
    19  com.apple.CFNetwork           	0x00007fff4fc6d5ef HTTPReadStream::streamEvent(unsigned long) + 261
    20  com.apple.CoreFoundation      	0x00007fff50d6055d _signalEventSync + 223
    21  com.apple.CoreFoundation      	0x00007fff50d60414 _cfstream_shared_signalEventSync + 358
    22  com.apple.CoreFoundation      	0x00007fff50d08de3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    23  com.apple.CoreFoundation      	0x00007fff50d08d89 __CFRunLoopDoSource0 + 108
    24  com.apple.CoreFoundation      	0x00007fff50cec74b __CFRunLoopDoSources0 + 195
    25  com.apple.CoreFoundation      	0x00007fff50cebd15 __CFRunLoopRun + 1189
    26  com.apple.CoreFoundation      	0x00007fff50ceb61e CFRunLoopRunSpecific + 455
    27  com.apple.Foundation          	0x00007fff52f5032f -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 280
    28  com.couchbase.CouchbaseLite   	0x0000000102abe430 -[CBL_RunLoopServer runServerThread] + 321
    29  com.apple.Foundation          	0x00007fff52f46112 __NSThread__start__ + 1194
    30  libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    31  libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    32  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 4:
    0   libsystem_kernel.dylib        	0x00007fff7cd7622a mach_msg_trap + 10
    1   libsystem_kernel.dylib        	0x00007fff7cd7676c mach_msg + 60
    2   com.apple.CoreFoundation      	0x00007fff50cec94e __CFRunLoopServiceMachPort + 328
    3   com.apple.CoreFoundation      	0x00007fff50cebebc __CFRunLoopRun + 1612
    4   com.apple.CoreFoundation      	0x00007fff50ceb61e CFRunLoopRunSpecific + 455
    5   com.apple.Foundation          	0x00007fff52f5032f -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 280
    6   com.apple.Foundation          	0x00007fff52f50204 -[NSRunLoop(NSRunLoop) run] + 76
    7   com.couchbase.CouchbaseLiteListener	0x00000001026a65b2 +[CBL_HTTPServer bonjourThread] + 226
    8   com.apple.Foundation          	0x00007fff52f46112 __NSThread__start__ + 1194
    9   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    10  libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    11  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 5:: com.apple.CFSocket.private
    0   libsystem_kernel.dylib        	0x00007fff7cd7d61a __select + 10
    1   com.apple.CoreFoundation      	0x00007fff50d1a2d2 __CFSocketManager + 635
    2   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    3   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    4   libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 6:: JavaScriptCore bmalloc scavenger
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   libc++.1.dylib                	0x00007fff79e73a0a std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
    3   com.apple.JavaScriptCore      	0x00007fff541cbc42 void std::__1::condition_variable_any::wait<std::__1::unique_lock<bmalloc::Mutex> >(std::__1::unique_lock<bmalloc::Mutex>&) + 82
    4   com.apple.JavaScriptCore      	0x00007fff541cfd4b bmalloc::Scavenger::threadRunLoop() + 139
    5   com.apple.JavaScriptCore      	0x00007fff541cf579 bmalloc::Scavenger::threadEntryPoint(bmalloc::Scavenger*) + 9
    6   com.apple.JavaScriptCore      	0x00007fff541d0ee7 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(bmalloc::Scavenger*), bmalloc::Scavenger*> >(void*) + 39
    7   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    8   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    9   libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 7:: com.apple.NSURLConnectionLoader
    0   libsystem_kernel.dylib        	0x00007fff7cd7622a mach_msg_trap + 10
    1   libsystem_kernel.dylib        	0x00007fff7cd7676c mach_msg + 60
    2   com.apple.CoreFoundation      	0x00007fff50cec94e __CFRunLoopServiceMachPort + 328
    3   com.apple.CoreFoundation      	0x00007fff50cebebc __CFRunLoopRun + 1612
    4   com.apple.CoreFoundation      	0x00007fff50ceb61e CFRunLoopRunSpecific + 455
    5   com.apple.CFNetwork           	0x00007fff4fbd1380 -[__CoreSchedulingSetRunnable runForever] + 210
    6   com.apple.Foundation          	0x00007fff52f46112 __NSThread__start__ + 1194
    7   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    8   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    9   libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 8:: Dispatch queue: shared_tcpConnWorkQueue
    0   libsystem_kernel.dylib        	0x00007fff7cd78f06 __psynch_mutexwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce35d52 _pthread_mutex_firstfit_lock_wait + 96
    2   libsystem_pthread.dylib       	0x00007fff7ce334cd _pthread_mutex_firstfit_lock_slow + 222
    3   com.apple.CFNetwork           	0x00007fff4fc42463 SocketStream::_onqueue_HandleTCPConnectionEvent(unsigned int, void const*) + 49
    4   libnetwork.dylib              	0x00007fff7b150fe3 tcp_connection_send_event_unlocked + 195
    5   libdispatch.dylib             	0x00007fff7cbf35f8 _dispatch_call_block_and_release + 12
    6   libdispatch.dylib             	0x00007fff7cbf463d _dispatch_client_callout + 8
    7   libdispatch.dylib             	0x00007fff7cbfa8e0 _dispatch_lane_serial_drain + 602
    8   libdispatch.dylib             	0x00007fff7cbfb396 _dispatch_lane_invoke + 385
    9   libdispatch.dylib             	0x00007fff7cc036ed _dispatch_workloop_worker_thread + 598
    10  libsystem_pthread.dylib       	0x00007fff7ce34611 _pthread_wqthread + 421
    11  libsystem_pthread.dylib       	0x00007fff7ce343fd start_wqthread + 13
    
    Thread 9:: Dispatch queue: com.apple.CFNetwork.HTTP2.HTTP2Stream
    0   com.apple.CoreFoundation      	0x00007fff50cbb303 CFStringGetCStringPtr + 267
    1   com.apple.CoreFoundation      	0x00007fff50cc09c4 CFStringFindWithOptionsAndLocale + 258
    2   com.apple.CoreFoundation      	0x00007fff50cc08b6 CFStringHasPrefix + 55
    3   com.apple.CFNetwork           	0x00007fff4fbfeae3 HTTP2Stream::_onqueue_checkStatusHeader(__CFString const*, __CFString const*) + 65
    4   com.apple.CFNetwork           	0x00007fff4fbfe83d HTTP2Stream::_onqueue_processHeader(__CFString const*, __CFString const*) + 29
    5   com.apple.CFNetwork           	0x00007fff4fbfe6b5 HTTP2Stream::_onqueue_processRawHeaders() + 101
    6   com.apple.CFNetwork           	0x00007fff4fbfe551 HTTP2Stream::_onqueue_endHeaders() + 37
    7   libdispatch.dylib             	0x00007fff7cbf35f8 _dispatch_call_block_and_release + 12
    8   libdispatch.dylib             	0x00007fff7cbf463d _dispatch_client_callout + 8
    9   libdispatch.dylib             	0x00007fff7cbfa8e0 _dispatch_lane_serial_drain + 602
    10  libdispatch.dylib             	0x00007fff7cbfb396 _dispatch_lane_invoke + 385
    11  libdispatch.dylib             	0x00007fff7cc036ed _dispatch_workloop_worker_thread + 598
    12  libsystem_pthread.dylib       	0x00007fff7ce34611 _pthread_wqthread + 421
    13  libsystem_pthread.dylib       	0x00007fff7ce343fd start_wqthread + 13
    
    Thread 10:: Dispatch queue: com.apple.CFNetwork.Connection
    0   libsystem_malloc.dylib        	0x00007fff7cdf91ce nanov2_allocate_from_block + 322
    1   libsystem_malloc.dylib        	0x00007fff7cdf8969 nanov2_allocate + 130
    2   libsystem_malloc.dylib        	0x00007fff7cdf8896 nanov2_malloc + 56
    3   libsystem_malloc.dylib        	0x00007fff7cdebc99 malloc_zone_malloc + 103
    4   com.apple.CoreFoundation      	0x00007fff50cb4bc5 _CFRuntimeCreateInstance + 274
    5   com.apple.CoreFoundation      	0x00007fff50cb453d __CFStringCreateImmutableFunnel3 + 1946
    6   com.apple.CoreFoundation      	0x00007fff50cd3d8c CFStringCreateWithSubstring + 371
    7   com.apple.CoreFoundation      	0x00007fff50cd3901 _retainedComponentString + 112
    8   com.apple.CoreFoundation      	0x00007fff50cd3776 CFURLCreateStringWithFileSystemPath + 1251
    9   com.apple.CoreFoundation      	0x00007fff50cd05b9 CFURLCopyFileSystemPath + 326
    10  com.apple.Foundation          	0x00007fff52f36f70 -[NSURL(NSURL) path] + 143
    11  com.apple.Foundation          	0x00007fff52f85cc7 -[NSURL(NSURLPathUtilities) pathExtension] + 22
    12  com.apple.CFNetwork           	0x00007fff4fbfc105 +[NSURLSessionTaskDependencyTree mimeTypeForURLString:] + 42
    13  com.apple.CFNetwork           	0x00007fff4fbffd7c -[__NSCFURLSessionTaskActiveStreamDependencyInfo removeStreamWithStreamID:requestURLString:] + 242
    14  com.apple.CFNetwork           	0x00007fff4fbffbad __NSURLSessionTaskDependency_RemoveRequest + 135
    15  com.apple.CFNetwork           	0x00007fff4fbffabc HTTP2Stream::cleanUpInUserDataResetCallback(nghttp2_session*, int, unsigned int, HTTP2Connection*) + 90
    16  com.apple.CFNetwork           	0x00007fff4fbffa2a cf_nghttp2_on_stream_close_callback(nghttp2_session*, int, unsigned int, void*) + 111
    17  libapple_nghttp2.dylib        	0x00007fff79cc2acd nghttp2_session_close_stream + 147
    18  libapple_nghttp2.dylib        	0x00007fff79cc29fa nghttp2_session_on_data_received + 196
    19  libapple_nghttp2.dylib        	0x00007fff79cbf90e nghttp2_session_mem_recv + 4724
    20  libapple_nghttp2.dylib        	0x00007fff79cbe621 nghttp2_session_recv + 98
    21  com.apple.CFNetwork           	0x00007fff4fbfd32f HTTP2Connection::_onqueue_performRead() + 21
    22  com.apple.CFNetwork           	0x00007fff4fbfc57b HTTP2Connection::_onqueue_scheduleIO() + 153
    23  libdispatch.dylib             	0x00007fff7cbf35f8 _dispatch_call_block_and_release + 12
    24  libdispatch.dylib             	0x00007fff7cbf463d _dispatch_client_callout + 8
    25  libdispatch.dylib             	0x00007fff7cbfa8e0 _dispatch_lane_serial_drain + 602
    26  libdispatch.dylib             	0x00007fff7cbfb3c6 _dispatch_lane_invoke + 433
    27  libdispatch.dylib             	0x00007fff7cbfc667 _dispatch_workloop_invoke + 2100
    28  libdispatch.dylib             	0x00007fff7cc036ed _dispatch_workloop_worker_thread + 598
    29  libsystem_pthread.dylib       	0x00007fff7ce34611 _pthread_wqthread + 421
    30  libsystem_pthread.dylib       	0x00007fff7ce343fd start_wqthread + 13
    
    Thread 11:
    0   libsystem_pthread.dylib       	0x00007fff7ce343f0 start_wqthread + 0
    
    Thread 12:: JSC Heap Collector Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 13:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 14:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 15:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 16:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 17:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 18:: Heap Helper Thread
    0   libsystem_kernel.dylib        	0x00007fff7cd7986a __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff7ce3856e _pthread_cond_wait + 722
    2   com.apple.JavaScriptCore      	0x00007fff5418eb1a WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 122
    3   com.apple.JavaScriptCore      	0x00007fff5417a502 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    4   com.apple.JavaScriptCore      	0x00007fff54159685 bool WTF::Condition::waitUntil<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) + 165
    5   com.apple.JavaScriptCore      	0x00007fff5415998a WTF::Function<void ()>::CallableWrapper<WTF::AutomaticThread::start(WTF::AbstractLocker const&)::$_0>::call() + 186
    6   com.apple.JavaScriptCore      	0x00007fff5418c7f2 WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) + 194
    7   com.apple.JavaScriptCore      	0x00007fff53fabc39 WTF::wtfThreadEntryPoint(void*) + 9
    8   libsystem_pthread.dylib       	0x00007fff7ce352eb _pthread_body + 126
    9   libsystem_pthread.dylib       	0x00007fff7ce38249 _pthread_start + 66
    10  libsystem_pthread.dylib       	0x00007fff7ce3440d thread_start + 13
    
    Thread 19:
    0   libsystem_pthread.dylib       	0x00007fff7ce343f0 start_wqthread + 0
    
    Thread 0 crashed with X86 Thread State (64-bit):
      rax: 0x00007fcb8bd36e00  rbx: 0x00006000002ffc30  rcx: 0x0000000000000000  rdx: 0x0000000000001882
      rdi: 0x0000000000000000  rsi: 0x00007ffeedf19460  rbp: 0x00007ffeedf198d0  rsp: 0x00007ffeedf198c0
       r8: 0x0000000000000082   r9: 0x0000000000001800  r10: 0x0000000000000082  r11: 0x00007fcb8bd38682
      r12: 0x00007fff7b465550  r13: 0x0000000000000001  r14: 0x00007fff7b465680  r15: 0x0000600003d815f0
      rip: 0x00007fff4e6e6867  rfl: 0x0000000000010202  cr2: 0x000060000918c000
      
    Logical CPU:     6
    Error Code:      0x00000000
    Trap Number:     6
    
    Binary Images:
           0x101ce6000 -        0x102279957 +com.tapzapp.tapforms-mac (5.3.10 - 1832) <661D971E-7192-37EB-B225-F066DFC3456C> /Applications/TapFormsMac5.app/Contents/MacOS/Tap Forms Mac 5
           0x10240f000 -        0x102422ff7 +org.cocoapods.FMDB (2.7.5 - 1) <0AC877A8-AE4A-3A81-953F-4009D13DC3A2> /Applications/TapFormsMac5.app/Contents/Frameworks/FMDB.framework/Versions/A/FMDB
           0x102448000 -        0x102453ff3 +org.cocoapods.JLRoutes (2.1.0 - 1) <277B6589-A94E-37FD-B671-29FBCDA89013> /Applications/TapFormsMac5.app/Contents/Frameworks/JLRoutes.framework/Versions/A/JLRoutes
           0x10246e000 -        0x102473fff +org.cocoapods.NSString-RemoveEmoji (1.1.0 - 1) <2266C3D8-A069-37D0-B988-E5ECB592835D> /Applications/TapFormsMac5.app/Contents/Frameworks/NSString_RemoveEmoji.framework/Versions/A/NSString_RemoveEmoji
           0x102489000 -        0x102579fff +com.tapzapp.TFCoreMac (5.3.10 - 2) <EC2CD95E-EAB5-3441-AF3F-041D9F3853BB> /Applications/TapFormsMac5.app/Contents/Frameworks/TFCoreMac.framework/Versions/A/TFCoreMac
           0x1025e6000 -        0x10262efff +org.sparkle-project.Sparkle (1.18.1 842-gcc94d669 - 1.18.1) <BA4A210D-9B69-37B3-9D38-6B04DF3993E7> /Applications/TapFormsMac5.app/Contents/Frameworks/Sparkle.framework/Versions/A/Sparkle
           0x102673000 -        0x1026e7ff3 +com.couchbase.CouchbaseLiteListener (1.4.1 - 0.0.0) <D665B8D9-4C5C-3A89-8AAE-83889FB3B402> /Applications/TapFormsMac5.app/Contents/Frameworks/CouchbaseLiteListener.framework/Versions/A/CouchbaseLiteListener
           0x102728000 -        0x1027b3ff7 +com.paddle.Paddle (3.0.42 - 459) <8E6139BA-DECF-3E10-9418-7F9034CF7861> /Applications/TapFormsMac5.app/Contents/Frameworks/Paddle.framework/Versions/A/Paddle
           0x1027f2000 -        0x10295fff7 +com.dcg.Charts (3.4.0 - 1) <CE1116CA-A91B-3A93-B16C-E1F871B6561F> /Applications/TapFormsMac5.app/Contents/Frameworks/Charts.framework/Versions/A/Charts
           0x102a1a000 -        0x102c61ff7 +com.couchbase.CouchbaseLite (1.4.4 - 0.0.0) <A9350F38-D483-3902-BB20-7C6A305B87E4> /Applications/TapFormsMac5.app/Contents/Frameworks/CouchbaseLite.framework/Versions/A/CouchbaseLite
           0x102d73000 -        0x102d7fffb +com.kulakov.ShortcutRecorder (2.17 - 2.17) <E749A24C-BA9D-3C4C-B71D-B3E0A1D5A641> /Applications/TapFormsMac5.app/Contents/Frameworks/ShortcutRecorder.framework/Versions/A/ShortcutRecorder
           0x102d8f000 -        0x102da7fff +com.abbey-code.UnzipKit (1.9.5 - 1.9.5) <25E84D1E-EBDD-3D30-BEC0-2EF0FAC241C0> /Applications/TapFormsMac5.app/Contents/Frameworks/UnzipKit.framework/Versions/A/UnzipKit
           0x106957000 -        0x1069ccffb  com.apple.AddressBook.CardDAVPlugin (10.9 - 547) <5B78F2EA-5B20-359F-AA2F-D97BAA5DFAF7> /System/Library/Address Book Plug-Ins/CardDAVPlugin.sourcebundle/Contents/MacOS/CardDAVPlugin
           0x106a38000 -        0x106a39fff  com.apple.AddressBook.LocalSourceBundle (11.0 - 1894) <F871C073-3B26-3301-BC0F-99B96FA5E3A2> /System/Library/Address Book Plug-Ins/LocalSource.sourcebundle/Contents/MacOS/LocalSource
           0x106a3e000 -        0x106a42fff  com.apple.DirectoryServicesSource (11.0 - 1894) <090E6CE7-9F7C-3E77-A2A1-198978C9AAC7> /System/Library/Address Book Plug-Ins/DirectoryServices.sourcebundle/Contents/MacOS/DirectoryServices
           0x1078d4000 -        0x1078d7047  libobjc-trampolines.dylib (756.2) <5795A048-3940-3801-90CE-33D1B1AF81F4> /usr/lib/libobjc-trampolines.dylib
           0x111568000 -        0x1115d270f  dyld (655.1.1) <DFC3C4AF-6F97-3B34-B18D-7DCB23F2A83A> /usr/lib/dyld
        0x7fff45412000 -     0x7fff4576bfff  com.apple.RawCamera.bundle (8.15.0 - 1031.4.4) <AB6E8A8F-0BFE-37EE-A135-44ABA4FCB559> /System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera
        0x7fff4576e000 -     0x7fff4587afff  com.apple.AMDMTLBronzeDriver (2.11.20 - 2.1.1) <1D8E8E3B-88F4-35B1-8E83-AE74B558C26C> /System/Library/Extensions/AMDMTLBronzeDriver.bundle/Contents/MacOS/AMDMTLBronzeDriver
        0x7fff4b35d000 -     0x7fff4b68eff7  com.apple.driver.AppleIntelSKLGraphicsMTLDriver (12.10.12 - 12.1.0) <F3C4A632-1F56-37D8-B6DC-4F5940FD7D63> /System/Library/Extensions/AppleIntelSKLGraphicsMTLDriver.bundle/Contents/MacOS/AppleIntelSKLGraphicsMTLDriver
        0x7fff4ccea000 -     0x7fff4cec6ffb  com.apple.avfoundation (2.0 - 1550.4) <5854207B-6106-3DA4-80B6-36C42D042F26> /System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation
        0x7fff4cec7000 -     0x7fff4cf8cfff  com.apple.audio.AVFAudio (1.0 - ???) <D454A339-2FC6-3EF6-992F-D676046612DB> /System/Library/Frameworks/AVFoundation.framework/Versions/A/Frameworks/AVFAudio.framework/Versions/A/AVFAudio
        0x7fff4d094000 -     0x7fff4d094fff  com.apple.Accelerate (1.11 - Accelerate 1.11) <762942CB-CFC9-3A0C-9645-A56523A06426> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
        0x7fff4d095000 -     0x7fff4d0abff7  libCGInterfaces.dylib (506.22) <1B6C92D9-F4B8-37BA-9635-94C4A56098CE> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/Libraries/libCGInterfaces.dylib
        0x7fff4d0ac000 -     0x7fff4d745fef  com.apple.vImage (8.1 - ???) <53FA3611-894E-3158-A654-FBD2F70998FE> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
        0x7fff4d746000 -     0x7fff4d9bfff3  libBLAS.dylib (1243.200.4) <417CA0FC-B6CB-3FB3-ACBC-8914E3F62D20> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
        0x7fff4d9c0000 -     0x7fff4da32ffb  libBNNS.dylib (38.250.1) <538D12A2-9B9D-3E22-9896-F90F6E69C06E> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib
        0x7fff4da33000 -     0x7fff4dddcff3  libLAPACK.dylib (1243.200.4) <92175DF4-863A-3780-909A-A3E5C410F2E9> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
        0x7fff4dddd000 -     0x7fff4ddf2feb  libLinearAlgebra.dylib (1243.200.4) <CB671EE6-DEA1-391C-9B2B-AA09A46B4D7A> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
        0x7fff4ddf3000 -     0x7fff4ddf8ff3  libQuadrature.dylib (3.200.2) <1BAE7E22-2862-379F-B334-A3756067730F> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib
        0x7fff4ddf9000 -     0x7fff4de75ff3  libSparse.dylib (79.200.5) <E78B33D3-672A-3C53-B512-D3DDB2E9AC8D> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib
        0x7fff4de76000 -     0x7fff4de89fe3  libSparseBLAS.dylib (1243.200.4) <E9243341-DB77-37C1-97C5-3DFA00DD70FA> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
        0x7fff4de8a000 -     0x7fff4e071ff7  libvDSP.dylib (671.250.4) <7B110627-A9C1-3FB7-A077-0C7741BA25D8> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
        0x7fff4e072000 -     0x7fff4e125ff7  libvMisc.dylib (671.250.4) <D5BA4812-BFFC-3CD0-B382-905CD8555DA6> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
        0x7fff4e126000 -     0x7fff4e126fff  com.apple.Accelerate.vecLib (3.11 - vecLib 3.11) <74288115-EF61-30B6-843F-0593B31D4929> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
        0x7fff4e127000 -     0x7fff4e181fff  com.apple.Accounts (113 - 113) <251A1CB1-F972-3F60-8662-85459EAD6318> /System/Library/Frameworks/Accounts.framework/Versions/A/Accounts
        0x7fff4e184000 -     0x7fff4e2c7fff  com.apple.AddressBook.framework (11.0 - 1894) <3FFCAE6B-4CD2-3B8D-AE27-0A3693C9470F> /System/Library/Frameworks/AddressBook.framework/Versions/A/AddressBook
        0x7fff4e2c8000 -     0x7fff4f07dffb  com.apple.AppKit (6.9 - 1671.60.109) <EFB74848-E23F-3FC3-B167-BA1F960996CC> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
        0x7fff4f0cf000 -     0x7fff4f0cffff  com.apple.ApplicationServices (50.1 - 50.1) <84097DEB-E2FC-3901-8DD7-A670EA2274E0> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
        0x7fff4f0d0000 -     0x7fff4f13bfff  com.apple.ApplicationServices.ATS (377 - 453.11.2.2) <A258DA73-114B-3102-A056-4AAAD3CEB9DD> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
        0x7fff4f1d4000 -     0x7fff4f2ebfff  libFontParser.dylib (228.6.2.3) <3602D55B-3B9E-3B3A-A814-08C1244A8AE4> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
        0x7fff4f2ec000 -     0x7fff4f32efff  libFontRegistry.dylib (228.12.2.3) <2A56347B-2809-3407-A8B4-2AB88E484062> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
        0x7fff4f388000 -     0x7fff4f3bafff  libTrueTypeScaler.dylib (228.6.2.3) <7E4C5D9C-51AF-3EC1-8FA5-11CD4BEE477A> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libTrueTypeScaler.dylib
        0x7fff4f41f000 -     0x7fff4f423ff3  com.apple.ColorSyncLegacy (4.13.0 - 1) <C0D9E23C-ABA0-39DE-A4EB-5A41C5499056> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy
        0x7fff4f4be000 -     0x7fff4f510ff7  com.apple.HIServices (1.22 - 628) <2BE461FF-80B9-30D3-A574-AED5724B1C1B> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
        0x7fff4f511000 -     0x7fff4f520fff  com.apple.LangAnalysis (1.7.0 - 1.7.0) <F5617A2A-FEA6-3832-B5BA-C2111B98786F> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
        0x7fff4f521000 -     0x7fff4f56aff7  com.apple.print.framework.PrintCore (14.2 - 503.8) <57C2FE32-0E74-3079-B626-C2D52F2D2717> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
        0x7fff4f56b000 -     0x7fff4f5a4ff7  com.apple.QD (3.12 - 407.2) <28C7D39F-59C9-3314-BECC-67045487229C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
        0x7fff4f5a5000 -     0x7fff4f5b1fff  com.apple.speech.synthesis.framework (8.1.3 - 8.1.3) <5E7B9BD4-122B-3012-A044-3259C97E7509> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
        0x7fff4f5b2000 -     0x7fff4f829ff7  com.apple.audio.toolbox.AudioToolbox (1.14 - 1.14) <04F482F1-E1C1-3955-8A6C-8AA152AA06F3> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
        0x7fff4f82b000 -     0x7fff4f82bfff  com.apple.audio.units.AudioUnit (1.14 - 1.14) <ABC54269-002D-310D-9654-46CF960F863E> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
        0x7fff4fb84000 -     0x7fff4ff25fff  com.apple.CFNetwork (978.0.7 - 978.0.7) <B2133D0D-1399-3F17-80F0-313E3A241C89> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
        0x7fff4ff3a000 -     0x7fff4ff3afff  com.apple.Carbon (158 - 158) <56AD06AA-7BB4-3F0B-AEF7-9768D0BC1C98> /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
        0x7fff4ff3b000 -     0x7fff4ff3effb  com.apple.CommonPanels (1.2.6 - 98) <1CD6D56D-8EC7-3528-8CBC-FC69533519B5> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
        0x7fff4ff3f000 -     0x7fff50236fff  com.apple.HIToolbox (2.1.1 - 918.7) <13F69D4C-D19F-3E09-9231-1978D783A556> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
        0x7fff50237000 -     0x7fff5023aff3  com.apple.help (1.3.8 - 66) <A08517EB-8958-36C9-AEE0-1A8FEEACBE3F> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
        0x7fff5023b000 -     0x7fff50240ff7  com.apple.ImageCapture (9.0 - 1534.2) <DB063E87-ED8F-3E4E-A7E2-A6B45FA73EF7> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
        0x7fff50241000 -     0x7fff502d6ff3  com.apple.ink.framework (10.9 - 225) <7C7E9483-2E91-3DD3-B1E0-C238F42CA0DD> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
        0x7fff502d7000 -     0x7fff502efff7  com.apple.openscripting (1.7 - 179.1) <9B8C1ECC-5864-3E21-9149-863E884EA25C> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
        0x7fff5030f000 -     0x7fff50310ff7  com.apple.print.framework.Print (14.2 - 267.4) <A7A9D2A0-D4E0-35EF-A0F7-50521F707C33> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
        0x7fff50311000 -     0x7fff50313ff7  com.apple.securityhi (9.0 - 55006) <05717F77-7A7B-37E6-AB3E-03F063E9095B> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
        0x7fff50314000 -     0x7fff5031aff7  com.apple.speech.recognition.framework (6.0.3 - 6.0.3) <3CC050FB-EBCB-3087-8EA5-F378C8F99217> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
        0x7fff5031b000 -     0x7fff5043bfff  com.apple.cloudkit.CloudKit (736.232 - 736.232) <F643F4D4-7F23-32C3-84E1-7981BD45F64C> /System/Library/Frameworks/CloudKit.framework/Versions/A/CloudKit
        0x7fff5043c000 -     0x7fff5043cfff  com.apple.Cocoa (6.11 - 23) <C930D6CD-930B-3D1E-9F15-4AE6AFC13F26> /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
        0x7fff5043d000 -     0x7fff50449ffb  com.apple.Collaboration (81 - 81) <617DE98E-196A-3866-9E74-953D1E3BBED7> /System/Library/Frameworks/Collaboration.framework/Versions/A/Collaboration
        0x7fff5044a000 -     0x7fff50599ff7  com.apple.ColorSync (4.13.0 - 3345.6) <31648BB6-7239-3D0E-81B1-BCF51FEF557F> /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync
        0x7fff5059a000 -     0x7fff50682ff7  com.apple.contacts (1.0 - 2901) <A6734AF0-D8E6-32C7-B283-DF1E7627F0D3> /System/Library/Frameworks/Contacts.framework/Versions/A/Contacts
        0x7fff50683000 -     0x7fff50724ffb  com.apple.ContactsUI (11.0 - 1894) <8684DC88-2355-3E0B-AA46-0F54F54E1212> /System/Library/Frameworks/ContactsUI.framework/Versions/A/ContactsUI
        0x7fff50725000 -     0x7fff507abfff  com.apple.audio.CoreAudio (4.3.0 - 4.3.0) <1E8E64E6-0E58-375A-97F7-07CB4EE181AC> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
        0x7fff5080f000 -     0x7fff50839ffb  com.apple.CoreBluetooth (1.0 - 1) <A73F1709-DD18-3052-9F22-C0015278834B> /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth
        0x7fff5083a000 -     0x7fff50bbffef  com.apple.CoreData (120 - 866.6) <132CB39B-8D58-30FA-B8AD-49BFFF34B293> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
        0x7fff50bc0000 -     0x7fff50cb0ff7  com.apple.CoreDisplay (101.3 - 110.18) <0EB2A997-FCAD-3D17-B140-9829961E5327> /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay
        0x7fff50cb1000 -     0x7fff510f6ff7  com.apple.CoreFoundation (6.9 - 1575.22) <51040EEE-7C5D-3433-A271-86B47B0562BF> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
        0x7fff510f8000 -     0x7fff51787fff  com.apple.CoreGraphics (2.0 - 1265.9) <BC95B558-EF77-3A57-A0BC-11606C778991> /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
        0x7fff51789000 -     0x7fff51aa9fff  com.apple.CoreImage (14.4.0 - 750.0.140) <11026E39-D2FF-3CF6-8ACE-7BA293F9853E> /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage
        0x7fff51aaa000 -     0x7fff51b22fff  com.apple.corelocation (2245.16.14) <0F59F59B-AC14-3116-83C5-CF7BC57D9EB1> /System/Library/Frameworks/CoreLocation.framework/Versions/A/CoreLocation
        0x7fff51b7c000 -     0x7fff51da5fff  com.apple.CoreML (1.0 - 1) <9EC1FED2-BA47-307B-A326-43C4D05166E7> /System/Library/Frameworks/CoreML.framework/Versions/A/CoreML
        0x7fff51da6000 -     0x7fff51eaafff  com.apple.CoreMedia (1.0 - 2290.13) <A739B93D-23C2-3A34-8D61-6AC924B9634F> /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia
        0x7fff51eab000 -     0x7fff51f06fff  com.apple.CoreMediaIO (900.0 - 5050.1) <63944D63-D138-3774-BAB4-A95679469A43> /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/CoreMediaIO
        0x7fff51f07000 -     0x7fff51f07fff  com.apple.CoreServices (946 - 946) <2EB6117A-6389-311B-95A0-7DE32C5FCFE2> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
        0x7fff51f08000 -     0x7fff51f84ff7  com.apple.AE (773 - 773) <55AE7C9E-27C3-30E9-A047-3B92A6FD53B4> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
        0x7fff51f85000 -     0x7fff5225cfff  com.apple.CoreServices.CarbonCore (1178.33 - 1178.33) <CB87F0C7-2CD6-3983-8E32-B6A2EC925352> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
        0x7fff5225d000 -     0x7fff522a5ff7  com.apple.DictionaryServices (1.2 - 284.16.4) <746EB200-DC51-30AE-9CBC-608A7B4CC8DA> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
        0x7fff522a6000 -     0x7fff522aeffb  com.apple.CoreServices.FSEvents (1239.200.12 - 1239.200.12) <8406D379-8D33-3611-861B-7ABD26DB50D2> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
        0x7fff522af000 -     0x7fff52460ff7  com.apple.LaunchServices (946 - 946) <A0C91634-9410-38E8-BC11-7A5A369E6BA5> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
        0x7fff52461000 -     0x7fff524ffff7  com.apple.Metadata (10.7.0 - 1191.57) <BFFAED00-2560-318A-BB8F-4E7E5123EC61> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
        0x7fff52500000 -     0x7fff5254aff7  com.apple.CoreServices.OSServices (946 - 946) <20C4EEF8-D5AC-39A0-9B4A-78F88E3EFBCC> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
        0x7fff5254b000 -     0x7fff525b2ff7  com.apple.SearchKit (1.4.0 - 1.4.0) <DA08AA6F-A6F1-36C0-87F4-E26294E51A3A> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
        0x7fff525b3000 -     0x7fff525d4ff3  com.apple.coreservices.SharedFileList (71.28 - 71.28) <487A8464-729E-305A-B5D1-E3FE8EB9CFC5> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
        0x7fff525d5000 -     0x7fff52634ff3  com.apple.CoreSpotlight (1.0 - 231.48) <5EB621B3-AAF4-3110-8C34-EB4D64BE7412> /System/Library/Frameworks/CoreSpotlight.framework/Versions/A/CoreSpotlight
        0x7fff52818000 -     0x7fff528defff  com.apple.CoreTelephony (113 - 6833.1) <7027A48C-8701-3B33-896B-B151A851CDCB> /System/Library/Frameworks/CoreTelephony.framework/Versions/A/CoreTelephony
        0x7fff528df000 -     0x7fff52a41ff3  com.apple.CoreText (352.0 - 584.26.3.2) <59919B0C-CBD5-3877-8D6F-D6048F1E5F42> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
        0x7fff52a42000 -     0x7fff52a82ff3  com.apple.CoreVideo (1.8 - 281.4) <10CF8E52-07E3-382B-8091-2CEEEFFA69B4> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
        0x7fff52a83000 -     0x7fff52b12fff  com.apple.framework.CoreWLAN (13.0 - 1375.2) <BF4B29F7-FBC8-3299-98E8-C3F8C04B7C92> /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN
        0x7fff52c89000 -     0x7fff52c94ffb  com.apple.DirectoryService.Framework (10.14 - 207.200.4) <49B086F4-AFA2-3ABB-8D2E-CE253044C1C0> /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService
        0x7fff52c95000 -     0x7fff52d43fff  com.apple.DiscRecording (9.0.3 - 9030.4.5) <D7A28B57-C025-3D44-BB17-82243B7B91BC> /System/Library/Frameworks/DiscRecording.framework/Versions/A/DiscRecording
        0x7fff52d69000 -     0x7fff52d6effb  com.apple.DiskArbitration (2.7 - 2.7) <F481F2C0-884E-3265-8111-ABBEC93F0920> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
        0x7fff52d6f000 -     0x7fff52f0bfff  com.apple.ical.EventKit (3.0 - 809.5.1) <855805B1-A319-365E-A476-D61E5CE2A533> /System/Library/Frameworks/EventKit.framework/Versions/A/EventKit
        0x7fff52f34000 -     0x7fff532e1ffb  com.apple.Foundation (6.9 - 1575.22) <CDB9A3E1-41A5-36EC-A24E-94FBCC752D6A> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
        0x7fff53350000 -     0x7fff5337fffb  com.apple.GSS (4.0 - 2.0) <E2B90D08-3857-3155-9FCC-07D778988EC9> /System/Library/Frameworks/GSS.framework/Versions/A/GSS
        0x7fff5347f000 -     0x7fff53589fff  com.apple.Bluetooth (6.0.14 - 6.0.14d3) <C2D1A774-2390-363D-8215-BF51FFCB6CCA> /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth
        0x7fff535ec000 -     0x7fff5367bfff  com.apple.framework.IOKit (2.0.2 - 1483.260.4) <8A90F547-86EF-3DFB-92FE-0E2C0376DD84> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
        0x7fff5367d000 -     0x7fff5368cffb  com.apple.IOSurface (255.6.1 - 255.6.1) <85F85EBB-EA59-3A8B-B3EB-7C20F3CC77AE> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
        0x7fff5368d000 -     0x7fff536dfff3  com.apple.ImageCaptureCore (1.0 - 1534.2) <27942C51-8108-3ED9-B37E-7C365A31EC2D> /System/Library/Frameworks/ImageCaptureCore.framework/Versions/A/ImageCaptureCore
        0x7fff536e0000 -     0x7fff5386bfef  com.apple.ImageIO.framework (3.3.0 - 1850.2) <75E46A31-D87D-35CE-86A4-96A50971FDB2> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
        0x7fff5386c000 -     0x7fff53870ffb  libGIF.dylib (1850.2) <4774EBDF-583B-3DDD-A0E1-9F427CB6A074> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
        0x7fff53871000 -     0x7fff5394dfef  libJP2.dylib (1850.2) <697BB77F-A682-339F-8659-35432962432D> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
        0x7fff5394e000 -     0x7fff53973feb  libJPEG.dylib (1850.2) <171A8AC4-AADA-376F-9F2C-B9C978DB1007> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
        0x7fff53c36000 -     0x7fff53c5cfeb  libPng.dylib (1850.2) <FBCEE909-F573-3AD6-A45F-AF32612BF8A2> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
        0x7fff53c5d000 -     0x7fff53c5fffb  libRadiance.dylib (1850.2) <56907025-D5CE-3A9E-ACCB-A376C2599853> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
        0x7fff53c60000 -     0x7fff53cadfe7  libTIFF.dylib (1850.2) <F59557C9-C761-3E6F-85D1-0FBFFD53ED5C> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
        0x7fff53cc8000 -     0x7fff53fa5ff7  com.apple.Intents (1.0 - 1) <D022E832-CC69-3DB7-9FF4-90647589CF48> /System/Library/Frameworks/Intents.framework/Versions/A/Intents
        0x7fff53fa8000 -     0x7fff54e08fff  com.apple.JavaScriptCore (14607 - 14607.3.9) <9B7D9E8B-619D-34A1-8FA9-E23C0EA3CD02> /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore
        0x7fff54e20000 -     0x7fff54e39fff  com.apple.Kerberos (3.0 - 1) <DB1E0679-37E1-3B93-9789-32F63D660C3B> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
        0x7fff54e3a000 -     0x7fff54e6fff3  com.apple.LDAPFramework (2.4.28 - 194.5) <95DAD9EE-9B6F-3FF5-A5EF-F6672AD3CC55> /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
        0x7fff54ebc000 -     0x7fff54edafff  com.apple.CoreAuthentication.SharedUtils (1.0 - 425.270.3) <DDEAC106-D051-385A-9F74-CD9BE230D336> /System/Library/Frameworks/LocalAuthentication.framework/Support/SharedUtils.framework/Versions/A/SharedUtils
        0x7fff54edb000 -     0x7fff54eeffff  com.apple.LocalAuthentication (1.0 - 425.270.3) <23CD2E0C-5A3A-348D-986F-58F302E4FEA4> /System/Library/Frameworks/LocalAuthentication.framework/Versions/A/LocalAuthentication
        0x7fff54ef0000 -     0x7fff550f1ff7  com.apple.MapKit (1.0 - 1832.26.4.19.4) <8F01AE55-48C3-38C1-A6A2-11A390DB601A> /System/Library/Frameworks/MapKit.framework/Versions/A/MapKit
        0x7fff550f3000 -     0x7fff550fdfff  com.apple.MediaAccessibility (1.0 - 114.4) <76C449C5-DB45-3D7F-BFAD-3DACEF15DA21> /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility
        0x7fff550fe000 -     0x7fff55111ff7  com.apple.MediaLibrary (1.5.0 - 764) <7706B8BA-F809-3D63-A69A-8637A373D377> /System/Library/Frameworks/MediaLibrary.framework/Versions/A/MediaLibrary
        0x7fff551ad000 -     0x7fff55853fff  com.apple.MediaToolbox (1.0 - 2290.13) <71BB5D76-34CA-3A30-AECF-24BE29FCC275> /System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox
        0x7fff55855000 -     0x7fff558fdff7  com.apple.Metal (162.2 - 162.2) <FFF7DFF3-7C4E-32C6-A0B5-C356079D3B7C> /System/Library/Frameworks/Metal.framework/Versions/A/Metal
        0x7fff558ff000 -     0x7fff55918ff3  com.apple.MetalKit (1.0 - 113) <51CDE966-54A7-3556-971B-1173E9986BB8> /System/Library/Frameworks/MetalKit.framework/Versions/A/MetalKit
        0x7fff55919000 -     0x7fff55938ff7  com.apple.MetalPerformanceShaders.MPSCore (1.0 - 1) <44CE8362-E972-3697-AD6F-15BC863BAEB8> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSCore.framework/Versions/A/MPSCore
        0x7fff55939000 -     0x7fff559b5fe7  com.apple.MetalPerformanceShaders.MPSImage (1.0 - 1) <EE8440DA-66DF-3923-ABBC-E0543211C069> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSImage.framework/Versions/A/MPSImage
        0x7fff559b6000 -     0x7fff559ddfff  com.apple.MetalPerformanceShaders.MPSMatrix (1.0 - 1) <E64450DF-2B96-331E-B7F4-666E00571C70> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix
        0x7fff559de000 -     0x7fff55b09ff7  com.apple.MetalPerformanceShaders.MPSNeuralNetwork (1.0 - 1) <F2CF26B6-73F1-3644-8FE9-CDB9B2C4501F> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork
        0x7fff55b0a000 -     0x7fff55b24fff  com.apple.MetalPerformanceShaders.MPSRayIntersector (1.0 - 1) <B33A35C3-0393-366B-ACFB-F4BB6A5F7B4A> /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector
        0x7fff55b25000 -     0x7fff55b26ff7  com.apple.MetalPerformanceShaders.MetalPerformanceShaders (1.0 - 1) <69F14BCF-C5C5-3BF8-9C31-8F87D2D6130A> /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders
        0x7fff5691d000 -     0x7fff56929ff7  com.apple.NetFS (6.0 - 4.0) <E917806F-0607-3292-B2D6-A15404D61B99> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
        0x7fff5692a000 -     0x7fff56a67ffb  com.apple.Network (1.0 - 1) <F46AFEE5-A56E-3BD9-AC07-C5D6334B3572> /System/Library/Frameworks/Network.framework/Versions/A/Network
        0x7fff593c7000 -     0x7fff5941eff7  com.apple.opencl (2.15.3 - 2.15.3) <056BAD8A-23BC-3F74-9E2C-3AC81E7DEA5A> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
        0x7fff5941f000 -     0x7fff5943aff7  com.apple.CFOpenDirectory (10.14 - 207.200.4) <F03D84EB-49B2-3A00-9127-B9A269824026> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
        0x7fff5943b000 -     0x7fff59446ffb  com.apple.OpenDirectory (10.14 - 207.200.4) <A8020CEE-5B78-3581-A735-EA2833683F31> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
        0x7fff59d96000 -     0x7fff59d98fff  libCVMSPluginSupport.dylib (17.7.3) <8E051EA7-55B6-3DF1-9821-72C391DE953B> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
        0x7fff59d99000 -     0x7fff59d9eff3  libCoreFSCache.dylib (166.2) <222C2A4F-7E32-30F6-8459-2FAB98073A3D> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib
        0x7fff59d9f000 -     0x7fff59da3fff  libCoreVMClient.dylib (166.2) <6789ECD4-91DD-32EF-A1FD-F27D2344CD8B> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
        0x7fff59da4000 -     0x7fff59dacff7  libGFXShared.dylib (17.7.3) <8C50BF27-B525-3B23-B86C-F444ADF97851> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
        0x7fff59dad000 -     0x7fff59db8fff  libGL.dylib (17.7.3) <2AC457EA-1BD3-3C8E-AFAB-7EA6234EB749> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
        0x7fff59db9000 -     0x7fff59df3fef  libGLImage.dylib (17.7.3) <AA027AFA-C115-3861-89B2-0AE946838952> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
        0x7fff59f67000 -     0x7fff59fa5fff  libGLU.dylib (17.7.3) <CB3B0579-D9A2-3CA5-8942-0C8344FAD054> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
        0x7fff5a942000 -     0x7fff5a951ffb  com.apple.opengl (17.7.3 - 17.7.3) <94B5CF34-5BD6-3652-9A8C-E9C56E0A9FB4> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
        0x7fff5abb7000 -     0x7fff5abdfff3  com.apple.frameworks.preferencepanes (16.0 - 16.0) <6CE7B9C4-0A3E-3627-9309-6D0943DA9B92> /System/Library/Frameworks/PreferencePanes.framework/Versions/A/PreferencePanes
        0x7fff5acce000 -     0x7fff5ae17ff7  com.apple.QTKit (7.7.3 - 3040) <D42BB4BE-B347-3113-ACA4-3257A5E45F52> /System/Library/Frameworks/QTKit.framework/Versions/A/QTKit
        0x7fff5ae18000 -     0x7fff5b06cfff  com.apple.imageKit (3.0 - 1067) <4F398AF4-828E-3FC2-9E3D-4EE3F36F7619> /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/ImageKit.framework/Versions/A/ImageKit
        0x7fff5b06d000 -     0x7fff5b159fff  com.apple.PDFKit (1.0 - 745.3) <EF7A5FC1-017A-329E-BDAE-3D136CE28E64> /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/PDFKit.framework/Versions/A/PDFKit
        0x7fff5b15a000 -     0x7fff5b629ff7  com.apple.QuartzComposer (5.1 - 370) <9C59494E-8D09-359E-B457-AA893520984C> /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuartzComposer.framework/Versions/A/QuartzComposer
        0x7fff5b62a000 -     0x7fff5b650ff7  com.apple.quartzfilters (1.10.0 - 83.1) <1CABB0FA-A6DB-3DD5-A598-F298F081E04E> /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuartzFilters.framework/Versions/A/QuartzFilters
        0x7fff5b651000 -     0x7fff5b752ff7  com.apple.QuickLookUIFramework (5.0 - 775.6) <5660DDBA-2BE4-310A-9E81-370106EDB21D> /System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuickLookUI.framework/Versions/A/QuickLookUI
        0x7fff5b753000 -     0x7fff5b753fff  com.apple.quartzframework (1.5 - 23) <31783652-5E36-3773-8847-9FECFE2487F0> /System/Library/Frameworks/Quartz.framework/Versions/A/Quartz
        0x7fff5b754000 -     0x7fff5b9abff7  com.apple.QuartzCore (1.11 - 701.14) <33E846BE-1794-3186-9BF2-6ADF62C782A3> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
        0x7fff5b9ac000 -     0x7fff5ba03fff  com.apple.QuickLookFramework (5.0 - 775.6) <CB74C63F-E223-3783-9021-8E28091BCDA6> /System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook
        0x7fff5bbca000 -     0x7fff5bbe1ff7  com.apple.SafariServices.framework (14607 - 14607.3.9) <96DFC381-5242-3D06-B115-9367C79801C9> /System/Library/Frameworks/SafariServices.framework/Versions/A/SafariServices
        0x7fff5c1c7000 -     0x7fff5c1dffff  com.apple.ScriptingBridge (1.4 - 78) <DCF38614-C6E9-3EB1-88F9-985F247A57B9> /System/Library/Frameworks/ScriptingBridge.framework/Versions/A/ScriptingBridge
        0x7fff5c1e0000 -     0x7fff5c4e0fff  com.apple.security (7.0 - 58286.270.3.0.1) <DF7677A7-9765-3B6A-9D1C-3589145E4B65> /System/Library/Frameworks/Security.framework/Versions/A/Security
        0x7fff5c4e1000 -     0x7fff5c56dfff  com.apple.securityfoundation (6.0 - 55185.260.1) <1EE899E6-222A-3526-B505-B0D0B6FA042A> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
        0x7fff5c56e000 -     0x7fff5c59effb  com.apple.securityinterface (10.0 - 55109.200.8) <02B83641-2D21-3DB8-AAB8-6F8AAD0F6264> /System/Library/Frameworks/SecurityInterface.framework/Versions/A/SecurityInterface
        0x7fff5c59f000 -     0x7fff5c5a3fff  com.apple.xpc.ServiceManagement (1.0 - 1) <FCF7BABA-DDDD-3770-8DAC-7069850203C2> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
        0x7fff5c809000 -     0x7fff5c93bfff  com.apple.syncservices (8.1 - 727) <401142E8-99D9-3FCB-985B-B1A839B5CA42> /System/Library/Frameworks/SyncServices.framework/Versions/A/SyncServices
        0x7fff5c93c000 -     0x7fff5c9a9fff  com.apple.SystemConfiguration (1.17 - 1.17) <30C8327F-3EFF-3520-9C50-016F8B6B954F> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
        0x7fff5cb5a000 -     0x7fff5cb8bff7  com.apple.UserNotifications (1.0 - ???) <0E1968F2-CE32-327A-9434-E3B128B4ACBA> /System/Library/Frameworks/UserNotifications.framework/Versions/A/UserNotifications
        0x7fff5cc08000 -     0x7fff5cf69fff  com.apple.VideoToolbox (1.0 - 2290.13) <7FCB2FC0-EFB8-37C2-B0D3-60AE9FDFE230> /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox
        0x7fff5d23e000 -     0x7fff5d84aff7  libwebrtc.dylib (7607.3.9) <4D2A43AD-B95E-3CF7-8822-553411D3EF15> /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/Frameworks/libwebrtc.dylib
        0x7fff5d84b000 -     0x7fff5f1d1ff7  com.apple.WebCore (14607 - 14607.3.9) <F50B7FC8-60F1-3FC4-83E1-0065463B27E6> /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/WebCore
        0x7fff5f1d2000 -     0x7fff5f3c3ffb  com.apple.WebKitLegacy (14607 - 14607.3.9) <59707811-F21F-388C-A801-C51D32E99392> /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebKitLegacy.framework/Versions/A/WebKitLegacy
        0x7fff5f3c4000 -     0x7fff5f914ff7  com.apple.WebKit (14607 - 14607.3.9) <AE6029DD-0CED-3FEF-92D5-DB8D4F9757F9> /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit
        0x7fff5f9f6000 -     0x7fff5fb0bff3  com.apple.AOSKit (1.07 - 271) <1FFBC2D7-B176-3067-9582-882026894633> /System/Library/PrivateFrameworks/AOSKit.framework/Versions/A/AOSKit
        0x7fff5fb0c000 -     0x7fff5fb0cffb  com.apple.AOSMigrate (1.0 - 1) <73A3B195-C4D3-3C31-AE39-9B36853C09D6> /System/Library/PrivateFrameworks/AOSMigrate.framework/Versions/A/AOSMigrate
        0x7fff5fbe5000 -     0x7fff5fc8afeb  com.apple.APFS (1.0 - 1) <2D22485D-552D-3CB6-9FE1-38547597918F> /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS
        0x7fff60217000 -     0x7fff60221fff  com.apple.accessibility.AXCoreUtilities (1.0 - 1) <C97597AF-865F-3A33-A6EB-807EE9881521> /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities
        0x7fff603ef000 -     0x7fff6048affb  com.apple.accounts.AccountsDaemon (113 - 113) <0B9AA187-F2DE-320C-BBB0-E038E5C1991D> /System/Library/PrivateFrameworks/AccountsDaemon.framework/Versions/A/AccountsDaemon
        0x7fff60539000 -     0x7fff60683ff7  com.apple.AddressBook.core (1.0 - 1) <BAA3419D-2C62-3277-980D-11A9C51B1084> /System/Library/PrivateFrameworks/AddressBookCore.framework/Versions/A/AddressBookCore
        0x7fff6069f000 -     0x7fff606a0ff7  com.apple.AggregateDictionary (1.0 - 1) <A6AF8AC4-1F25-37C4-9157-A02E9C200926> /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary
        0x7fff60a5e000 -     0x7fff60ba1fff  com.apple.AnnotationKit (1.0 - 232.3.30) <A35C5450-FBA1-3E76-9F27-4ED0179AE6A6> /System/Library/PrivateFrameworks/AnnotationKit.framework/Versions/A/AnnotationKit
        0x7fff60ba2000 -     0x7fff60bbdff7  com.apple.AppContainer (4.0 - 360.270.2) <644409D7-6C7A-336F-BF4F-80E82FB48BE9> /System/Library/PrivateFrameworks/AppContainer.framework/Versions/A/AppContainer
        0x7fff60bbe000 -     0x7fff60bcbfff  com.apple.AppSandbox (4.0 - 360.270.2) <175BF1C6-8CB1-3AAA-A752-781E09DE3D8E> /System/Library/PrivateFrameworks/AppSandbox.framework/Versions/A/AppSandbox
        0x7fff60c16000 -     0x7fff60c7fffb  com.apple.AppSupport (1.0.0 - 29) <D94A14EC-88C4-3D53-915E-6552BE47FB00> /System/Library/PrivateFrameworks/AppSupport.framework/Versions/A/AppSupport
        0x7fff60c80000 -     0x7fff60ca0fff  com.apple.AppSupportUI (1.0 - ???) <8297F6CE-4216-356F-AC8B-588A183E5E99> /System/Library/PrivateFrameworks/AppSupportUI.framework/Versions/A/AppSupportUI
        0x7fff60ca1000 -     0x7fff60ccdff7  com.apple.framework.Apple80211 (13.0 - 1380.2) <16F093EF-370B-3B90-8DB4-E94624431D15> /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Apple80211
        0x7fff60cce000 -     0x7fff60df3ffb  com.apple.AppleAccount (1.0 - 1.0) <B1268352-D84E-3027-B997-0FECDBF5C63A> /System/Library/PrivateFrameworks/AppleAccount.framework/Versions/A/AppleAccount
        0x7fff60df5000 -     0x7fff60e04fc7  com.apple.AppleFSCompression (96.200.3 - 1.0) <3CF60CE8-976E-3CB8-959D-DD0948C1C2DE> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
        0x7fff60f00000 -     0x7fff60f0bfff  com.apple.AppleIDAuthSupport (1.0 - 1) <2E9D1398-DBE6-328B-ADDA-20FA5FAD7405> /System/Library/PrivateFrameworks/AppleIDAuthSupport.framework/Versions/A/AppleIDAuthSupport
        0x7fff60f0c000 -     0x7fff60f4bff3  com.apple.AppleIDSSOAuthentication (1.0 - 1) <0B1A4128-1939-3C9E-B5D9-77D4239FDBD4> /System/Library/PrivateFrameworks/AppleIDSSOAuthentication.framework/Versions/A/AppleIDSSOAuthentication
        0x7fff60f4c000 -     0x7fff60f95ff3  com.apple.AppleJPEG (1.0 - 1) <4C1F426B-7D77-3980-9633-7DBD8C666B9A> /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG
        0x7fff60f96000 -     0x7fff60fa6fff  com.apple.AppleLDAP (10.14 - 46.200.2) <DA9C0E8E-86D6-3CE8-8A12-B9C2254920A8> /System/Library/PrivateFrameworks/AppleLDAP.framework/Versions/A/AppleLDAP
        0x7fff60fa7000 -     0x7fff611c5fff  com.apple.AppleMediaServices (1.0 - 1) <FA98A7CE-F1B6-351C-95FB-F63447272AF2> /System/Library/PrivateFrameworks/AppleMediaServices.framework/Versions/A/AppleMediaServices
        0x7fff611c6000 -     0x7fff611e3fff  com.apple.aps.framework (4.0 - 4.0) <83FB4BD1-0C45-3CEF-8640-567DA5A300A7> /System/Library/PrivateFrameworks/ApplePushService.framework/Versions/A/ApplePushService
        0x7fff611e4000 -     0x7fff611e8ff7  com.apple.AppleSRP (5.0 - 1) <EDD16B2E-4F35-3E13-B389-CF77B3CAD4EB> /System/Library/PrivateFrameworks/AppleSRP.framework/Versions/A/AppleSRP
        0x7fff611e9000 -     0x7fff6120bfff  com.apple.applesauce (1.0 - ???) <F49107C7-3C51-3024-8EF1-C57643BE4F3B> /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce
        0x7fff612cb000 -     0x7fff612ceff7  com.apple.AppleSystemInfo (3.1.5 - 3.1.5) <A48BC6D4-224C-3A25-846B-4D06C53568AE> /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo
        0x7fff612cf000 -     0x7fff6131fff7  com.apple.AppleVAFramework (5.1.4 - 5.1.4) <3399D678-8741-3B70-B8D0-7C63C8ACF7DF> /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA
        0x7fff6136a000 -     0x7fff6137effb  com.apple.AssertionServices (1.0 - 1) <456E507A-4561-3628-9FBE-173ACE7429D8> /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices
        0x7fff6174d000 -     0x7fff61839ff7  com.apple.AuthKit (1.0 - 1) <2765ABE9-54F2-3E45-8A93-1261E251B90D> /System/Library/PrivateFrameworks/AuthKit.framework/Versions/A/AuthKit
        0x7fff619fb000 -     0x7fff61a03fff  com.apple.coreservices.BackgroundTaskManagement (1.0 - 57.1) <2A396FC0-7B79-3088-9A82-FB93C1181A57> /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement
        0x7fff61a04000 -     0x7fff61a99fff  com.apple.backup.framework (1.10.5 - ???) <4EEC51E2-AE4C-340A-B686-901810152C12> /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
        0x7fff61a9a000 -     0x7fff61b07ff3  com.apple.BaseBoard (360.28 - 360.28) <68FA8044-F3CD-3BC6-9DAB-27DACF52BFC0> /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard
        0x7fff61b10000 -     0x7fff61b16ffb  com.apple.BezelServicesFW (317.5 - 317.5) <25807B30-117A-33D9-93E6-48E8AE90BD63> /System/Library/PrivateFrameworks/BezelServices.framework/Versions/A/BezelServices
        0x7fff61b8d000 -     0x7fff61bc9ff3  com.apple.bom (14.0 - 197.6) <A99A6F9A-AFDE-3BC6-95CE-AA90B268B805> /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
        0x7fff61eb4000 -     0x7fff61f05fff  com.apple.CalDAV (8.0 - 265) <9CA2863A-11A3-3B66-A97A-B770C2B754F6> /System/Library/PrivateFrameworks/CalDAV.framework/Versions/A/CalDAV
        0x7fff62278000 -     0x7fff622a4ffb  com.apple.CalendarAgentLink (8.0 - 250) <4702E078-86DF-373F-BF2F-AB6230E19010> /System/Library/PrivateFrameworks/CalendarAgentLink.framework/Versions/A/CalendarAgentLink
        0x7fff622bd000 -     0x7fff62321fff  com.apple.CalendarFoundation (8.0 - 591.3.1) <5EA50731-E3C0-3675-B420-49F9DC19656C> /System/Library/PrivateFrameworks/CalendarFoundation.framework/Versions/A/CalendarFoundation
        0x7fff62348000 -     0x7fff6266cfff  com.apple.CalendarPersistence (8.0 - 505.4.2) <2B374C8D-D717-3157-9619-F09A9F70E689> /System/Library/PrivateFrameworks/CalendarPersistence.framework/Versions/A/CalendarPersistence
        0x7fff62965000 -     0x7fff629b4ff7  com.apple.ChunkingLibrary (201 - 201) <DFE16C42-24E6-386F-AC50-0058F61980A2> /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
        0x7fff62ace000 -     0x7fff62b53ff7  com.apple.CloudDocs (1.0 - 575.302) <524BC6E6-9AF7-3DBE-8FC5-BD35B7A94B55> /System/Library/PrivateFrameworks/CloudDocs.framework/Versions/A/CloudDocs
        0x7fff63765000 -     0x7fff63771ff7  com.apple.CommerceCore (1.0 - 708.5) <B5939A65-745F-3AB7-A212-EF140E148F42> /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Frameworks/CommerceCore.framework/Versions/A/CommerceCore
        0x7fff63772000 -     0x7fff6377bffb  com.apple.CommonAuth (4.0 - 2.0) <93335CB6-ABEB-3EC7-A040-8A667F40D5F3> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
        0x7fff6378f000 -     0x7fff637a4ffb  com.apple.commonutilities (8.0 - 900) <080E168B-21B7-3CCA-AB84-BB9911D18DAC> /System/Library/PrivateFrameworks/CommonUtilities.framework/Versions/A/CommonUtilities
        0x7fff637a5000 -     0x7fff637a9ff3  com.apple.communicationsfilter (10.0 - 1000) <FFB75307-AE51-3317-9D51-238392600A80> /System/Library/PrivateFrameworks/CommunicationsFilter.framework/Versions/A/CommunicationsFilter
        0x7fff639e3000 -     0x7fff63a1bffb  com.apple.contacts.ContactsAutocomplete (1.0 - 611) <A9116E49-3ECE-3FD5-B031-A7C8ED651B88> /System/Library/PrivateFrameworks/ContactsAutocomplete.framework/Versions/A/ContactsAutocomplete
        0x7fff63a2f000 -     0x7fff63a46fff  com.apple.contacts.donation (1.0 - 1) <24034D34-A2F8-3CD1-96C8-B454F510DF84> /System/Library/PrivateFrameworks/ContactsDonation.framework/Versions/A/ContactsDonation
        0x7fff63a4c000 -     0x7fff63aaeff3  com.apple.AddressBook.ContactsFoundation (8.0 - ???) <F5136318-4F71-37D7-A909-5005C698A354> /System/Library/PrivateFrameworks/ContactsFoundation.framework/Versions/A/ContactsFoundation
        0x7fff63aaf000 -     0x7fff63ad2ff3  com.apple.contacts.ContactsPersistence (1.0 - ???) <4082E8CF-5C89-3DE1-97BF-6434F3E03C16> /System/Library/PrivateFrameworks/ContactsPersistence.framework/Versions/A/ContactsPersistence
        0x7fff63ad3000 -     0x7fff63b26ffb  com.apple.Contacts.ContactsUICore (1.0 - 999.9.9) <166B9508-CD1B-3ED4-9E69-BBCABAE32C71> /System/Library/PrivateFrameworks/ContactsUICore.framework/Versions/A/ContactsUICore
        0x7fff63c14000 -     0x7fff63ff7fef  com.apple.CoreAUC (274.0.0 - 274.0.0) <C71F1581-E73B-3DA0-958B-E912C3FB3F23> /System/Library/PrivateFrameworks/CoreAUC.framework/Versions/A/CoreAUC
        0x7fff63ff8000 -     0x7fff64026ff7  com.apple.CoreAVCHD (6.0.0 - 6000.4.1) <A04A99B8-DAC5-36FC-BAC7-7431600C1F89> /System/Library/PrivateFrameworks/CoreAVCHD.framework/Versions/A/CoreAVCHD
        0x7fff64046000 -     0x7fff64064fff  com.apple.CoreAnalytics.CoreAnalytics (1.0 - 1) <5AFC8A18-30CA-3D29-A509-DF21AC4DB921> /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics
        0x7fff640bc000 -     0x7fff6411affb  com.apple.corebrightness (1.0 - 1) <61040CCD-0AFD-389F-87E8-0FD9D8C3BAE1> /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/A/CoreBrightness
        0x7fff641de000 -     0x7fff64250ff7  com.apple.coredav (1.0.1 - 347) <C5913C96-EE89-3E0E-AA9E-1C08256F5B2D> /System/Library/PrivateFrameworks/CoreDAV.framework/Versions/A/CoreDAV
        0x7fff64251000 -     0x7fff6425afff  com.apple.frameworks.CoreDaemon (1.3 - 1.3) <89BDACE6-32AA-3933-BD8C-A44650488873> /System/Library/PrivateFrameworks/CoreDaemon.framework/Versions/B/CoreDaemon
        0x7fff6425b000 -     0x7fff6441aff3  com.apple.CoreDuet (1.0 - 1) <E3224B54-3AA5-372E-A395-93E440AF9515> /System/Library/PrivateFrameworks/CoreDuet.framework/Versions/A/CoreDuet
        0x7fff6441b000 -     0x7fff6443bffb  com.apple.coreduetcontext (1.0 - 1) <2C299C6F-E6B1-3434-A66B-CD10960FE990> /System/Library/PrivateFrameworks/CoreDuetContext.framework/Versions/A/CoreDuetContext
        0x7fff6443c000 -     0x7fff6444cfff  com.apple.CoreDuetDaemonProtocol (1.0 - 1) <1C7F31B3-82DC-3A05-8506-EBF49EACF19C> /System/Library/PrivateFrameworks/CoreDuetDaemonProtocol.framework/Versions/A/CoreDuetDaemonProtocol
        0x7fff6444f000 -     0x7fff64451fff  com.apple.CoreDuetDebugLogging (1.0 - 1) <6C3C1B6C-56B0-34AE-8A2D-D19F3A486E47> /System/Library/PrivateFrameworks/CoreDuetDebugLogging.framework/Versions/A/CoreDuetDebugLogging
        0x7fff64454000 -     0x7fff64465ff7  com.apple.CoreEmoji (1.0 - 69.19.9) <228457B3-E191-356E-9A5B-3C0438D05FBA> /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji
        0x7fff6460e000 -     0x7fff646fdfff  com.apple.CoreHandwriting (161 - 1.2) <7CBB18C3-FE95-3352-9D67-B441E89AD10F> /System/Library/PrivateFrameworks/CoreHandwriting.framework/Versions/A/CoreHandwriting
        0x7fff648cf000 -     0x7fff648e5ffb  com.apple.CoreMediaAuthoring (2.2 - 959) <86089759-E920-37DB-A3BB-F5621C351E4A> /System/Library/PrivateFrameworks/CoreMediaAuthoring.framework/Versions/A/CoreMediaAuthoring
        0x7fff64a0f000 -     0x7fff64a75ff7  com.apple.CoreNLP (1.0 - 130.15.22) <27877820-17D0-3B02-8557-4014E876CCC7> /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP
        0x7fff64bdc000 -     0x7fff64be0ff7  com.apple.CoreOptimization (1.0 - 1) <1C724E01-E9FA-3AEE-BE4B-C4DB8EC0C812> /System/Library/PrivateFrameworks/CoreOptimization.framework/Versions/A/CoreOptimization
        0x7fff64be1000 -     0x7fff64c6dfff  com.apple.CorePDF (4.0 - 414) <E4ECDD15-34C0-30C2-AFA9-27C8EDAC3DB0> /System/Library/PrivateFrameworks/CorePDF.framework/Versions/A/CorePDF
        0x7fff64d22000 -     0x7fff64d2aff7  com.apple.CorePhoneNumbers (1.0 - 1) <11F97C7E-C183-305F-8E6C-9B374F50E26B> /System/Library/PrivateFrameworks/CorePhoneNumbers.framework/Versions/A/CorePhoneNumbers
        0x7fff64d2b000 -     0x7fff64d81ff7  com.apple.CorePrediction (1.0 - 1) <A66C8A6F-C3B2-3547-985D-C62C62F9FA48> /System/Library/PrivateFrameworks/CorePrediction.framework/Versions/A/CorePrediction
        0x7fff64da9000 -     0x7fff64db3ff7  com.apple.corerecents (1.0 - 1) <9066396F-6EF7-3A02-A368-9D916FE94500> /System/Library/PrivateFrameworks/CoreRecents.framework/Versions/A/CoreRecents
        0x7fff64ea6000 -     0x7fff64ed7ff3  com.apple.CoreServicesInternal (358 - 358) <DD6EF60D-048F-3186-83DA-EB191EDF48AE> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal
        0x7fff6529e000 -     0x7fff65322fff  com.apple.CoreSymbolication (10.2 - 64490.25.1) <28B2FF2D-3FDE-3A20-B343-341E5BD4E22F> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
        0x7fff653b2000 -     0x7fff654ddff7  com.apple.coreui (2.1 - 499.10) <A80F4B09-F940-346F-A9DF-4EFADD9220A8> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
        0x7fff654de000 -     0x7fff6567efff  com.apple.CoreUtils (5.9 - 590.16) <66CC50F7-766D-33E2-A388-4DE22840ADFB> /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils
        0x7fff656d2000 -     0x7fff65735ff7  com.apple.framework.CoreWiFi (13.0 - 1375.2) <CA4B835A-27AC-3FAB-9F44-E48548EA2442> /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi
        0x7fff65736000 -     0x7fff65747ff7  com.apple.CrashReporterSupport (10.13 - 938.26) <E93D84A6-891D-38EE-BB4F-E9CD681189B7> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
        0x7fff657d7000 -     0x7fff657e6fff  com.apple.framework.DFRFoundation (1.0 - 211.1) <E3F02F2A-2059-39CC-85DA-969676EB88EB> /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation
        0x7fff657e7000 -     0x7fff657ebff7  com.apple.DSExternalDisplay (3.1 - 380) <787B9748-B120-3453-B8FE-61D9E363A9E0> /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay
        0x7fff6582d000 -     0x7fff6586bff7  com.apple.datadetectors (5.0 - 390.2) <B6DEDE81-832C-3078-ACAF-767F01E9615D> /System/Library/PrivateFrameworks/DataDetectors.framework/Versions/A/DataDetectors
        0x7fff6586c000 -     0x7fff658e1ffb  com.apple.datadetectorscore (7.0 - 590.27) <06FB1A07-7AE6-3ADD-8E7E-41955FAB38E8> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
        0x7fff6592d000 -     0x7fff6596aff7  com.apple.DebugSymbols (190 - 190) <6F4FAACA-E06B-38AD-A0C2-14EA5408A231> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
        0x7fff6596b000 -     0x7fff65aa6ff7  com.apple.desktopservices (1.13.5 - ???) <265C0E94-B8BF-3F58-8D68-EA001EEA0B15> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
        0x7fff65b50000 -     0x7fff65b51ff7  com.apple.diagnosticlogcollection (10.0 - 1000) <3C6F41B0-DD03-373C-B423-63C1FA6174EC> /System/Library/PrivateFrameworks/DiagnosticLogCollection.framework/Versions/A/DiagnosticLogCollection
        0x7fff65cb2000 -     0x7fff65d78fff  com.apple.DiskManagement (12.1 - 1555.270.2) <EB207683-FBD6-3B74-A606-3FE22234372C> /System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/DiskManagement
        0x7fff65d79000 -     0x7fff65d7dffb  com.apple.DisplayServicesFW (3.1 - 380) <62041594-2A4C-3362-87EE-F8E8C8E5BEEC> /System/Library/PrivateFrameworks/DisplayServices.framework/Versions/A/DisplayServices
        0x7fff65e26000 -     0x7fff65e29ff3  com.apple.EFILogin (2.0 - 2) <210948F9-FD39-392D-8349-34985B3C751C> /System/Library/PrivateFrameworks/EFILogin.framework/Versions/A/EFILogin
        0x7fff66549000 -     0x7fff6655efff  com.apple.Engram (1.0 - 1) <F4A93313-F507-3F9A-AB1C-C18F2779B7CF> /System/Library/PrivateFrameworks/Engram.framework/Versions/A/Engram
        0x7fff6655f000 -     0x7fff66841ff7  com.apple.vision.EspressoFramework (1.0 - 120) <8B56D943-F87B-3A01-B7A4-19DE3312B61C> /System/Library/PrivateFrameworks/Espresso.framework/Versions/A/Espresso
        0x7fff66842000 -     0x7fff6689bff7  com.apple.ExchangeWebServices (8.0 - 309) <3173BA94-0C4B-39D0-8464-15CD0142E71F> /System/Library/PrivateFrameworks/ExchangeWebServices.framework/Versions/A/ExchangeWebServices
        0x7fff668d5000 -     0x7fff668f5ff3  com.apple.icloud.FMCore (1.0 - 1) <409ED286-A1A5-3D90-8557-631E7813BB93> /System/Library/PrivateFrameworks/FMCore.framework/Versions/A/FMCore
        0x7fff668f6000 -     0x7fff6690bfff  com.apple.icloud.FMCoreLite (1.0 - 1) <A147BAE2-36F8-3360-9235-3103A0C3D82C> /System/Library/PrivateFrameworks/FMCoreLite.framework/Versions/A/FMCoreLite
        0x7fff6690c000 -     0x7fff66911ff3  com.apple.icloud.FMCoreUI (1.0 - 1) <C8400C9A-8F82-33A8-BC26-62AAEBD1AAA5> /System/Library/PrivateFrameworks/FMCoreUI.framework/Versions/A/FMCoreUI
        0x7fff66912000 -     0x7fff6693fff3  com.apple.icloud.FMF (1.0 - 1) <A32278AA-53A1-3F4B-BCDD-0FFED3C61571> /System/Library/PrivateFrameworks/FMF.framework/Versions/A/FMF
        0x7fff66940000 -     0x7fff66953ff7  com.apple.icloud.FMFUI (1.0 - 1) <5D579B1B-093F-3E6F-A673-35D30B6CC0DB> /System/Library/PrivateFrameworks/FMFUI.framework/Versions/A/FMFUI
        0x7fff669ed000 -     0x7fff66e08fff  com.apple.vision.FaceCore (3.3.4 - 3.3.4) <A576E2DA-BF6F-3B18-8FEB-324E5C5FA9BD> /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
        0x7fff66e39000 -     0x7fff66ebeff7  com.apple.FileProvider (125.130 - 125.130) <D95A997E-33E6-3427-9A4B-B16756ACBA0B> /System/Library/PrivateFrameworks/FileProvider.framework/Versions/A/FileProvider
        0x7fff66ebf000 -     0x7fff66ecfffb  com.apple.icloud.FindMyDevice (1.0 - 1) <D5325A3F-56E8-3561-A00F-6386EBB0F1B1> /System/Library/PrivateFrameworks/FindMyDevice.framework/Versions/A/FindMyDevice
        0x7fff6a6bc000 -     0x7fff6a6bdfff  libmetal_timestamp.dylib (902.3.2) <05389463-AF2E-33E2-A14F-1416E4A30835> /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3902/Libraries/libmetal_timestamp.dylib
        0x7fff6bd5d000 -     0x7fff6bd62fff  com.apple.GPUWrangler (3.50.12 - 3.50.12) <6C820ED9-F306-3978-B5B8-432AD97BBDAF> /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler
        0x7fff6c0f0000 -     0x7fff6c114ff3  com.apple.GenerationalStorage (2.0 - 285.101) <84C2E52C-F2C6-3FF8-87E5-3C88A40D3881> /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
        0x7fff6c12d000 -     0x7fff6cb2cfff  com.apple.GeoServices (1.0 - 1364.26.4.19.6) <041715B5-D82F-31F6-9133-955A7A66025F> /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/GeoServices
        0x7fff6cb6e000 -     0x7fff6cb7dfff  com.apple.GraphVisualizer (1.0 - 5) <48D020B7-5938-3FAE-B468-E291AEE2C06F> /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer
        0x7fff6cb7e000 -     0x7fff6cb8bff7  com.apple.GraphicsServices (1.0 - 1.0) <56646B62-B331-31DC-80EB-7996DCAB6944> /System/Library/PrivateFrameworks/GraphicsServices.framework/Versions/A/GraphicsServices
        0x7fff6cce3000 -     0x7fff6cd57ffb  com.apple.Heimdal (4.0 - 2.0) <D97FCF19-EAD6-3E2F-BE88-F817E45CAE96> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
        0x7fff6cd58000 -     0x7fff6cd86fff  com.apple.HelpData (2.3 - 184.4) <22850610-29F8-3902-93A3-BBF403440185> /System/Library/PrivateFrameworks/HelpData.framework/Versions/A/HelpData
        0x7fff6d7a5000 -     0x7fff6d89eff7  com.apple.ids (10.0 - 1000) <4F434376-4C61-337C-94DA-A7DD812AD04A> /System/Library/PrivateFrameworks/IDS.framework/Versions/A/IDS
        0x7fff6d89f000 -     0x7fff6d9a2fff  com.apple.idsfoundation (10.0 - 1000) <2B598376-0B24-3AB5-8C0C-D5528C334295> /System/Library/PrivateFrameworks/IDSFoundation.framework/Versions/A/IDSFoundation
        0x7fff6df21000 -     0x7fff6df82fff  com.apple.imfoundation (10.0 - 1000) <098F3A98-2184-32EF-8EC9-87B892CD85CA> /System/Library/PrivateFrameworks/IMFoundation.framework/Versions/A/IMFoundation
        0x7fff6e053000 -     0x7fff6e05cfff  com.apple.IOAccelMemoryInfo (1.0 - 1) <EA04DC2A-F0C8-3471-9E59-BE8697050ADF> /System/Library/PrivateFrameworks/IOAccelMemoryInfo.framework/Versions/A/IOAccelMemoryInfo
        0x7fff6e05d000 -     0x7fff6e064ffb  com.apple.IOAccelerator (404.14 - 404.14) <11A50171-C8AE-3BBC-9FB9-2A3313FFBD31> /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator
        0x7fff6e067000 -     0x7fff6e067fff  com.apple.IOPlatformPluginFamily (1.0 - 1) <B9C1AE93-6BCB-32BA-BF47-ABD5808215CE> /System/Library/PrivateFrameworks/IOPlatformPluginFamily.framework/Versions/A/IOPlatformPluginFamily
        0x7fff6e068000 -     0x7fff6e080fff  com.apple.IOPresentment (1.0 - 42.6) <6DFD9A6E-BF95-3A27-89E7-ACAA9E30D90A> /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment
        0x7fff6e428000 -     0x7fff6e455ff7  com.apple.IconServices (379 - 379) <7BAD562D-4FA3-3E11-863C-1EEBE2406D2C> /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
        0x7fff6e462000 -     0x7fff6e467ffb  com.apple.incomingcallfilter (10.0 - 1000) <8380A1C2-7E10-3D36-B182-B7182DBE0E36> /System/Library/PrivateFrameworks/IncomingCallFilter.framework/Versions/A/IncomingCallFilter
        0x7fff6e575000 -     0x7fff6e57cff3  com.apple.IntentsFoundation (1.0 - 1) <635EC408-16CA-3E5D-82D6-957FFD7F4132> /System/Library/PrivateFrameworks/IntentsFoundation.framework/Versions/A/IntentsFoundation
        0x7fff6e57f000 -     0x7fff6e583ffb  com.apple.InternationalSupport (1.0 - 10.15.6) <6226A905-D055-321D-B665-5B0CC4798A74> /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport
        0x7fff6e587000 -     0x7fff6e5ecff3  com.apple.framework.internetaccounts (2.1 - 210) <510BE262-FA9B-38F5-8C0D-1B8AA207AE6F> /System/Library/PrivateFrameworks/InternetAccounts.framework/Versions/A/InternetAccounts
        0x7fff6e5ed000 -     0x7fff6e5faffb  com.apple.IntlPreferences (2.0 - 227.18) <1B5AFE5D-4D6F-3471-8F4D-256F5068093F> /System/Library/PrivateFrameworks/IntlPreferences.framework/Versions/A/IntlPreferences
        0x7fff6e692000 -     0x7fff6e69eff3  com.apple.KerberosHelper (4.0 - 1.0) <7B7A59D5-87BA-3892-A260-322B2419AFD7> /System/Library/PrivateFrameworks/KerberosHelper.framework/Versions/A/KerberosHelper
        0x7fff6e6e8000 -     0x7fff6e6faff3  com.apple.security.KeychainCircle.KeychainCircle (1.0 - 1) <30CFE05C-4108-3879-AFAA-5BB02CBE190B> /System/Library/PrivateFrameworks/KeychainCircle.framework/Versions/A/KeychainCircle
        0x7fff6e715000 -     0x7fff6e7f0ff7  com.apple.LanguageModeling (1.0 - 159.15.15) <3DE3CE61-542B-37B7-883E-4B9717CAC65F> /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
        0x7fff6e7f1000 -     0x7fff6e82dff7  com.apple.Lexicon-framework (1.0 - 33.15.10) <4B5E843E-2809-3E70-9560-9254E2656419> /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon
        0x7fff6e834000 -     0x7fff6e839fff  com.apple.LinguisticData (1.0 - 238.25) <F529B961-098C-3E4C-A3E9-9DA9BFA1B3F0> /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData
        0x7fff6e98b000 -     0x7fff6e9a4ff3  com.apple.LookupFramework (1.2 - 251) <50031B5A-F3D5-39CC-954A-B3AEAF52FB89> /System/Library/PrivateFrameworks/Lookup.framework/Versions/A/Lookup
        0x7fff6f057000 -     0x7fff6f05afff  com.apple.Mangrove (1.0 - 25) <537A5B2E-4C30-3CFD-8BDC-79F9A04AC327> /System/Library/PrivateFrameworks/Mangrove.framework/Versions/A/Mangrove
        0x7fff6f0de000 -     0x7fff6f0e0ff3  com.apple.marco (10.0 - 1000) <608B1000-1427-34B3-96B4-5B6079964E7F> /System/Library/PrivateFrameworks/Marco.framework/Versions/A/Marco
        0x7fff6f0e1000 -     0x7fff6f107ff3  com.apple.MarkupUI (1.0 - 232.3.30) <C6A452D8-CA97-3044-A025-8ED4B7264FE2> /System/Library/PrivateFrameworks/MarkupUI.framework/Versions/A/MarkupUI
        0x7fff6f16f000 -     0x7fff6f1a2ff7  com.apple.MediaKit (16 - 907) <5EE0E7DA-5ACC-33F3-9BF0-47A448C011A1> /System/Library/PrivateFrameworks/MediaKit.framework/Versions/A/MediaKit
        0x7fff6f52e000 -     0x7fff6f556ff7  com.apple.spotlight.metadata.utilities (1.0 - 1191.57) <38BB1FB7-3336-384C-B71F-4D0D402EB606> /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities
        0x7fff6f557000 -     0x7fff6f5e4ff7  com.apple.gpusw.MetalTools (1.0 - 1) <CBE2176A-8048-3A9C-AFE4-13973D44C704> /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools
        0x7fff6f5fb000 -     0x7fff6f614ffb  com.apple.MobileAssets (1.0 - 437.250.3) <8BE5B3A0-8F3A-3FAE-9AFF-32836300183C> /System/Library/PrivateFrameworks/MobileAsset.framework/Versions/A/MobileAsset
        0x7fff6f78f000 -     0x7fff6f7aaffb  com.apple.MobileKeyBag (2.0 - 1.0) <C7C5DD21-66DE-31D1-92D9-BBEEAAE156FB> /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag
        0x7fff6f7bd000 -     0x7fff6f832fff  com.apple.Montreal (1.0 - 42.15.9) <17BFD046-4362-3A76-A496-648D00FF3743> /System/Library/PrivateFrameworks/Montreal.framework/Versions/A/Montreal
        0x7fff6f833000 -     0x7fff6f85dffb  com.apple.MultitouchSupport.framework (2450.1 - 2450.1) <42A23EC9-64A7-31C7-BF33-DF4412ED8A3F> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
        0x7fff6f92d000 -     0x7fff6fa1dff7  com.apple.Navigation (1.0 - 1) <C8C4F16A-F800-3635-82EE-A278CA940E4F> /System/Library/PrivateFrameworks/Navigation.framework/Versions/A/Navigation
        0x7fff6fa99000 -     0x7fff6faa3fff  com.apple.NetAuth (6.2 - 6.2) <0D01BBE5-0269-310D-B148-D19DAE143DEB> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
        0x7fff701c3000 -     0x7fff701c5fff  com.apple.OAuth (25 - 25) <64DB58E3-25A4-3C8B-91FB-FACBA01C29B6> /System/Library/PrivateFrameworks/OAuth.framework/Versions/A/OAuth
        0x7fff70304000 -     0x7fff70355ff3  com.apple.OTSVG (1.0 - ???) <5BF1A9EB-2694-3267-9514-A4EB3BEF4081> /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG
        0x7fff713f9000 -     0x7fff714ecfff  com.apple.PencilKit (1.0 - 1) <79225726-6980-3680-AC0B-D8C5C5DB2224> /System/Library/PrivateFrameworks/PencilKit.framework/Versions/A/PencilKit
        0x7fff714ed000 -     0x7fff714fcff7  com.apple.PerformanceAnalysis (1.218.2 - 218.2) <65F3DB3E-6D4E-33A0-B510-EF768D323DAB> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
        0x7fff714fd000 -     0x7fff71526ff3  com.apple.persistentconnection (1.0 - 1.0) <9ECE64D9-8C5F-3FCE-8A46-29D7B3966920> /System/Library/PrivateFrameworks/PersistentConnection.framework/Versions/A/PersistentConnection
        0x7fff71527000 -     0x7fff71536ff3  com.apple.PersonaKit (1.0 - 1) <C1A422EC-FA35-367F-BBFE-24D12F7C7BA1> /System/Library/PrivateFrameworks/PersonaKit.framework/Versions/A/PersonaKit
        0x7fff71537000 -     0x7fff71544ffb  com.apple.PersonaUI (1.0 - 1) <EA8B7751-6B83-36BF-B5B4-547BE0C460D3> /System/Library/PrivateFrameworks/PersonaUI.framework/Versions/A/PersonaUI
        0x7fff71723000 -     0x7fff71723fff  com.apple.PhoneNumbers (1.0 - 1) <DBCEDE3B-B681-3F6C-89EC-36E4827A2AF9> /System/Library/PrivateFrameworks/PhoneNumbers.framework/Versions/A/PhoneNumbers
        0x7fff72edf000 -     0x7fff72f02ffb  com.apple.pluginkit.framework (1.0 - 1) <910C3AFE-7C46-3C34-B000-4ED92336B9FD> /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit
        0x7fff72f2d000 -     0x7fff72f3effb  com.apple.PowerLog (1.0 - 1) <2F41180A-BD8A-3323-87F0-9DC3FD8E1269> /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog
        0x7fff73339000 -     0x7fff7338dffb  com.apple.ProtectedCloudStorage (1.0 - 1) <53B3C1F3-BB97-379F-8CBA-8FDCDF085793> /System/Library/PrivateFrameworks/ProtectedCloudStorage.framework/Versions/A/ProtectedCloudStorage
        0x7fff7338e000 -     0x7fff733acff7  com.apple.ProtocolBuffer (1 - 263.2) <907D6C95-D050-31DE-99CA-16A5135BC6F9> /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer
        0x7fff7352a000 -     0x7fff7352dff3  com.apple.QuickLookNonBaseSystem (1.0 - 1) <69D0DD00-A3D2-3835-91F0-F33BD9D7D740> /System/Library/PrivateFrameworks/QuickLookNonBaseSystem.framework/Versions/A/QuickLookNonBaseSystem
        0x7fff7352e000 -     0x7fff73543ff3  com.apple.QuickLookThumbnailing (1.0 - 1) <B5E746AE-1DCB-3299-8626-10CCCBC2D5EE> /System/Library/PrivateFrameworks/QuickLookThumbnailing.framework/Versions/A/QuickLookThumbnailing
        0x7fff73544000 -     0x7fff73594fff  com.apple.ROCKit (27.6 - 27.6) <756C2253-E8B1-3C48-9945-DE8D6AD24DE2> /System/Library/PrivateFrameworks/ROCKit.framework/Versions/A/ROCKit
        0x7fff735e1000 -     0x7fff73659ffb  com.apple.Rapport (1.7 - 174.23) <90383EF2-A3AE-3006-98EC-2A1511BB6A53> /System/Library/PrivateFrameworks/Rapport.framework/Versions/A/Rapport
        0x7fff736d0000 -     0x7fff736dbfff  com.apple.xpc.RemoteServiceDiscovery (1.0 - 1336.261.2) <651F994E-21E1-359B-8FEA-6909CE9AAD56> /System/Library/PrivateFrameworks/RemoteServiceDiscovery.framework/Versions/A/RemoteServiceDiscovery
        0x7fff736ee000 -     0x7fff73710fff  com.apple.RemoteViewServices (2.0 - 128) <8FB0E4EB-DCBB-32E6-94C6-AA9BA9EE4CAC> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
        0x7fff73711000 -     0x7fff73724ff3  com.apple.xpc.RemoteXPC (1.0 - 1336.261.2) <E7B66B18-F5DF-3819-BA47-E35122BA09E8> /System/Library/PrivateFrameworks/RemoteXPC.framework/Versions/A/RemoteXPC
        0x7fff7444f000 -     0x7fff74498fff  com.apple.Safari.SafeBrowsing (14607 - 14607.3.9) <F4DA3E55-28AF-3406-8120-9B797197ABED> /System/Library/PrivateFrameworks/SafariSafeBrowsing.framework/Versions/A/SafariSafeBrowsing
        0x7fff74dbb000 -     0x7fff74dbeff7  com.apple.SecCodeWrapper (4.0 - 360.270.2) <6B331C0A-1A9D-3039-9FF6-89A49B04F846> /System/Library/PrivateFrameworks/SecCodeWrapper.framework/Versions/A/SecCodeWrapper
        0x7fff74f1a000 -     0x7fff75038fff  com.apple.Sharing (1288.62 - 1288.62) <48B1F247-7910-3C16-814C-B99DE231F7F0> /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
        0x7fff75039000 -     0x7fff75058ffb  com.apple.shortcut (2.16 - 101) <FA635B3A-8B45-3132-BB06-BD0398F03E12> /System/Library/PrivateFrameworks/Shortcut.framework/Versions/A/Shortcut
        0x7fff75059000 -     0x7fff7506bfff  com.apple.sidecar-core (1.0 - 38.2) <ECE7C76B-0BFE-378E-AE6D-F10D364F3F4C> /System/Library/PrivateFrameworks/SidecarCore.framework/Versions/A/SidecarCore
        0x7fff7506c000 -     0x7fff7507bff7  com.apple.sidecar-ui (1.0 - 38.2) <B2CF3906-E8F1-3B82-BF46-FFE89690FE73> /System/Library/PrivateFrameworks/SidecarUI.framework/Versions/A/SidecarUI
        0x7fff75e4c000 -     0x7fff760fbfff  com.apple.SkyLight (1.600.0 - 340.54) <90EB1C2E-B264-3EC4-AF7F-CDE7E7585746> /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight
        0x7fff7689e000 -     0x7fff768aafff  com.apple.SpeechRecognitionCore (5.0.21 - 5.0.21) <7A6A67DB-C813-328E-AAFB-D267A5B50B3D> /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore
        0x7fff7695c000 -     0x7fff76bbfff3  com.apple.spotlight.index (10.7.0 - 1191.57) <04DE70D5-D9C4-3886-A3DB-6E32040D69E3> /System/Library/PrivateFrameworks/SpotlightIndex.framework/Versions/A/SpotlightIndex
        0x7fff76c5d000 -     0x7fff76c64ff7  com.apple.StatsKit (1.0 - 1) <1E58400B-1122-3740-AADC-CAAFDFD25A9F> /System/Library/PrivateFrameworks/StatsKit.framework/Versions/A/StatsKit
        0x7fff76d26000 -     0x7fff76f15ff7  StoreServices (1445.0.8) <1AFB342A-4440-3C44-B070-440044699DCB> /System/Library/PrivateFrameworks/StoreServices.framework/Versions/A/StoreServices
        0x7fff76f49000 -     0x7fff76f85ff3  com.apple.StreamingZip (1.0 - 1) <046FAD5C-E0C5-3013-B1FE-24C018A0DDCF> /System/Library/PrivateFrameworks/StreamingZip.framework/Versions/A/StreamingZip
        0x7fff76ffb000 -     0x7fff77086fc7  com.apple.Symbolication (10.2 - 64490.38.1) <9FDCC98D-5B32-35AD-A9BF-94DF2B78507F> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
        0x7fff77087000 -     0x7fff7708fffb  com.apple.SymptomDiagnosticReporter (1.0 - 820.267.1) <DB68EC08-EC2D-35DC-8D34-B4A2C36A9DE9> /System/Library/PrivateFrameworks/SymptomDiagnosticReporter.framework/Versions/A/SymptomDiagnosticReporter
        0x7fff7755d000 -     0x7fff77569fff  com.apple.private.SystemPolicy (1.0 - 1) <9CDA85A3-875C-3615-8818-2DC73E9FFE8B> /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy
        0x7fff7756e000 -     0x7fff7757affb  com.apple.TCC (1.0 - 1) <73CF6FA9-44CE-30C9-887F-235940976585> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
        0x7fff77589000 -     0x7fff77643ff7  com.apple.TelephonyUtilities (1.0 - 1.0) <DE8A2CA7-9312-3C1E-8704-6E4EA0313CD9> /System/Library/PrivateFrameworks/TelephonyUtilities.framework/Versions/A/TelephonyUtilities
        0x7fff777e0000 -     0x7fff778a8ff3  com.apple.TextureIO (3.8.4 - 3.8.1) <7CEAC05A-D283-3D5A-B1E3-C849285FA0BF> /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO
        0x7fff77905000 -     0x7fff77920fff  com.apple.ToneKit (1.0 - 1) <84911F2C-394F-3FFF-8220-B51F581BB8E6> /System/Library/PrivateFrameworks/ToneKit.framework/Versions/A/ToneKit
        0x7fff77921000 -     0x7fff77946ff7  com.apple.ToneLibrary (1.0 - 1) <4D7D03EB-744F-3402-8C3E-B483A74BEF1E> /System/Library/PrivateFrameworks/ToneLibrary.framework/Versions/A/ToneLibrary
        0x7fff77965000 -     0x7fff77b1cffb  com.apple.UIFoundation (1.0 - 551.2) <917480B5-14BE-30E0-ABE6-9702336CC35A> /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation
        0x7fff77b6a000 -     0x7fff77b70ffb  com.apple.URLFormatting (59 - 59.46) <8FA3A00C-7BFF-33B9-95EA-A7FC04091D4D> /System/Library/PrivateFrameworks/URLFormatting.framework/Versions/A/URLFormatting
        0x7fff77d20000 -     0x7fff783c7ff7  com.apple.VectorKit (1.0 - 1360.25.12.18.4) <FD6BA025-6289-3D90-AAFD-FC5AF733A1D9> /System/Library/PrivateFrameworks/VectorKit.framework/Versions/A/VectorKit
        0x7fff78798000 -     0x7fff78871fff  com.apple.ViewBridge (401.1 - 401.1) <18144EC1-5DEF-369C-8EBA-2826E7142784> /System/Library/PrivateFrameworks/ViewBridge.framework/Versions/A/ViewBridge
        0x7fff78af2000 -     0x7fff78b55ffb  com.apple.WhitePagesFramework (10.7.0 - 141.0) <B0DF53FC-2E51-37E5-8409-97E05097929E> /System/Library/PrivateFrameworks/WhitePages.framework/Versions/A/WhitePages
        0x7fff78cb4000 -     0x7fff78f26ffb  libAWDSupportFramework.dylib (2131) <AC78D095-4D47-37DF-AE0D-8EEC7C2553F0> /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/Libraries/libAWDSupportFramework.dylib
        0x7fff78f27000 -     0x7fff78f38fff  libprotobuf-lite.dylib (2131) <297886A7-F889-38AA-B6F6-162598345EC4> /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/Libraries/libprotobuf-lite.dylib
        0x7fff78f39000 -     0x7fff78f93fff  libprotobuf.dylib (2131) <05141A5F-1870-3AA7-B339-6EB13E375BA4> /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/Libraries/libprotobuf.dylib
        0x7fff78f94000 -     0x7fff78fd5ff7  com.apple.awd (1.0 - 930.11) <652A1F08-52A3-36CC-8055-EF57143BED76> /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Versions/A/WirelessDiagnostics
        0x7fff79049000 -     0x7fff7904cfff  com.apple.dt.XCTTargetBootstrap (1.0 - 14490.66) <7AE3457F-AF40-3508-93FB-1D9E31EB1C9D> /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap
        0x7fff792dd000 -     0x7fff79312ffb  com.apple.iCalendar (7.0 - 287) <9AC1445F-A47E-3FA2-8765-125C48FEF78B> /System/Library/PrivateFrameworks/iCalendar.framework/Versions/A/iCalendar
        0x7fff7944d000 -     0x7fff7944fffb  com.apple.loginsupport (1.0 - 1) <3F8D6334-BCD6-36C1-BA20-CC8503A84375> /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
        0x7fff79450000 -     0x7fff79465fff  com.apple.login (3.0 - 3.0) <E168F05D-A5DF-3848-8686-DF5015EA4BA4> /System/Library/PrivateFrameworks/login.framework/Versions/A/login
        0x7fff7949c000 -     0x7fff794cdffb  com.apple.contacts.vCard (1.0 - ???) <651AD944-66CA-3408-818F-484E0F53A1DE> /System/Library/PrivateFrameworks/vCard.framework/Versions/A/vCard
        0x7fff79689000 -     0x7fff7969dffb  libAccessibility.dylib (2402.95) <6BC07631-25B1-3C31-A2CB-E5E477836A5E> /usr/lib/libAccessibility.dylib
        0x7fff79719000 -     0x7fff7974dfff  libCRFSuite.dylib (41.15.4) <406DAC06-0C77-3F90-878B-4D38F11F0256> /usr/lib/libCRFSuite.dylib
        0x7fff79750000 -     0x7fff7975aff7  libChineseTokenizer.dylib (28.15.3) <9B7F6109-3A5D-3641-9A7E-31D2239D73EE> /usr/lib/libChineseTokenizer.dylib
        0x7fff7975b000 -     0x7fff797e4fff  libCoreStorage.dylib (546.50.1) <8E643B27-7986-3351-B37E-038FB6794BF9> /usr/lib/libCoreStorage.dylib
        0x7fff797e8000 -     0x7fff797e9ffb  libDiagnosticMessagesClient.dylib (107) <A14D0819-0970-34CD-8680-80E4D7FE8C2C> /usr/lib/libDiagnosticMessagesClient.dylib
        0x7fff79820000 -     0x7fff79a77ff3  libFosl_dynamic.dylib (18.3.4) <1B5DD4E2-8AE0-315E-829E-D5BFCD264EA8> /usr/lib/libFosl_dynamic.dylib
        0x7fff79a97000 -     0x7fff79a9efff  libMatch.1.dylib (31.200.1) <EF8164CB-B599-39D9-9E73-4958A372DC0B> /usr/lib/libMatch.1.dylib
        0x7fff79ac8000 -     0x7fff79ae7fff  libMobileGestalt.dylib (645.270.1) <99A06C8A-97D6-383D-862C-F453BABB48A4> /usr/lib/libMobileGestalt.dylib
        0x7fff79ae8000 -     0x7fff79ae8fff  libOpenScriptingUtil.dylib (179.1) <4D603146-EDA5-3A74-9FF8-4F75D8BB9BC6> /usr/lib/libOpenScriptingUtil.dylib
        0x7fff79c28000 -     0x7fff79c29ffb  libSystem.B.dylib (1252.250.1) <B1006948-7AD0-3CA9-81E0-833F4DD6BFB4> /usr/lib/libSystem.B.dylib
        0x7fff79c2a000 -     0x7fff79ca4ff7  libTelephonyUtilDynamic.dylib (3705) <155194D3-2B24-3A5F-9C04-364E0D583C60> /usr/lib/libTelephonyUtilDynamic.dylib
        0x7fff79ca5000 -     0x7fff79ca6fff  libThaiTokenizer.dylib (2.15.1) <ADB37DC3-7D9B-3E73-A72A-BCC3433C937A> /usr/lib/libThaiTokenizer.dylib
        0x7fff79cb8000 -     0x7fff79cceffb  libapple_nghttp2.dylib (1.24.1) <6F04250A-6686-3FDC-9A8D-290C64B06502> /usr/lib/libapple_nghttp2.dylib
        0x7fff79ccf000 -     0x7fff79cf8ffb  libarchive.2.dylib (54.250.1) <47289946-8504-3966-9127-6CE39993DC2C> /usr/lib/libarchive.2.dylib
        0x7fff79cf9000 -     0x7fff79d78fff  libate.dylib (1.13.8) <92B44EDB-369D-3EE8-AEC5-61F8B9313DBF> /usr/lib/libate.dylib
        0x7fff79d7c000 -     0x7fff79d7cff3  libauto.dylib (187) <3E3780E1-96F3-3A22-91C5-92F9A5805518> /usr/lib/libauto.dylib
        0x7fff79d7d000 -     0x7fff79e4bfff  libboringssl.dylib (109.250.2) <8044BBB7-F6E0-36C1-95D1-9C2AB19CF94A> /usr/lib/libboringssl.dylib
        0x7fff79e4c000 -     0x7fff79e5cffb  libbsm.0.dylib (39.200.18) <CF381E0B-025B-364F-A83D-2527E03F1AA3> /usr/lib/libbsm.0.dylib
        0x7fff79e5d000 -     0x7fff79e6afff  libbz2.1.0.dylib (38.200.3) <272953A1-8D36-329B-BDDB-E887B347710F> /usr/lib/libbz2.1.0.dylib
        0x7fff79e6b000 -     0x7fff79ebeff7  libc++.1.dylib (400.9.4) <9A60A190-6C34-339F-BB3D-AACE942009A4> /usr/lib/libc++.1.dylib
        0x7fff79ebf000 -     0x7fff79ed4ff7  libc++abi.dylib (400.17) <38C09CED-9090-3719-90F3-04A2749F5428> /usr/lib/libc++abi.dylib
        0x7fff79ed5000 -     0x7fff79ed5ff3  libcharset.1.dylib (51.200.6) <2A27E064-314C-359C-93FC-8A9B06206174> /usr/lib/libcharset.1.dylib
        0x7fff79ed6000 -     0x7fff79ee6ffb  libcmph.dylib (6.15.1) <9C52B2FE-179F-32AC-B87E-2AFC49ABF817> /usr/lib/libcmph.dylib
        0x7fff79ee7000 -     0x7fff79effffb  libcompression.dylib (52.250.2) <7F4BB18C-1FB4-3825-8D8B-6E6B168774C6> /usr/lib/libcompression.dylib
        0x7fff7a174000 -     0x7fff7a18afff  libcoretls.dylib (155.220.1) <4C64BE3E-41E3-3020-8BB7-07E90C0C861C> /usr/lib/libcoretls.dylib
        0x7fff7a18b000 -     0x7fff7a18cff3  libcoretls_cfhelpers.dylib (155.220.1) <0959B3E9-6643-3589-8BB3-21D52CDF0EF1> /usr/lib/libcoretls_cfhelpers.dylib
        0x7fff7a625000 -     0x7fff7a630ff7  libcsfde.dylib (546.50.1) <7BAF8FCF-33A1-3C7C-8FEB-2020C8ED6063> /usr/lib/libcsfde.dylib
        0x7fff7a638000 -     0x7fff7a68eff3  libcups.2.dylib (462.12) <095619DC-9233-3937-9E50-5F10D917A40D> /usr/lib/libcups.2.dylib
        0x7fff7a7c2000 -     0x7fff7a7c2fff  libenergytrace.dylib (17.200.1) <80BB567A-FD18-3497-BF97-353F57D98CDD> /usr/lib/libenergytrace.dylib
        0x7fff7a7f4000 -     0x7fff7a7f9ff7  libgermantok.dylib (17.15.2) <E5F0F794-FF27-3D64-AE52-C78C6A84DD67> /usr/lib/libgermantok.dylib
        0x7fff7a7fa000 -     0x7fff7a7ffff7  libheimdal-asn1.dylib (520.270.1) <73F60D6F-76F8-35EF-9C86-9A81225EE4BE> /usr/lib/libheimdal-asn1.dylib
        0x7fff7a82a000 -     0x7fff7a91afff  libiconv.2.dylib (51.200.6) <2047C9B7-3F74-3A95-810D-2ED8F0475A99> /usr/lib/libiconv.2.dylib
        0x7fff7a91b000 -     0x7fff7ab7cffb  libicucore.A.dylib (62141.0.1) <A0D63918-76E9-3C1B-B255-46F4C1DA7FE8> /usr/lib/libicucore.A.dylib
        0x7fff7abc9000 -     0x7fff7abcafff  liblangid.dylib (128.15.1) <22D05C4F-769B-3075-ABCF-44A0EBACE028> /usr/lib/liblangid.dylib
        0x7fff7abcb000 -     0x7fff7abe3ff3  liblzma.5.dylib (10.200.3) <E1F4FD60-1CE4-37B9-AD95-29D348AF1AC0> /usr/lib/liblzma.5.dylib
        0x7fff7abfb000 -     0x7fff7ac9fff7  libmecab.1.0.0.dylib (779.24.1) <A8D0379B-85FA-3B3D-89ED-5CF2C3826AB2> /usr/lib/libmecab.1.0.0.dylib
        0x7fff7aca0000 -     0x7fff7aea4fff  libmecabra.dylib (779.24.1) <D71F71E0-30E2-3DB3-B636-7DE13D51FB4B> /usr/lib/libmecabra.dylib
        0x7fff7b07c000 -     0x7fff7b3cdff7  libnetwork.dylib (1229.250.15) <72C7E9E3-B2BE-3300-BE1B-64606222022C> /usr/lib/libnetwork.dylib
        0x7fff7b45f000 -     0x7fff7bbe4fdf  libobjc.A.dylib (756.2) <7C312627-43CB-3234-9324-4DEA92D59F50> /usr/lib/libobjc.A.dylib
        0x7fff7bbf6000 -     0x7fff7bbfaffb  libpam.2.dylib (22.200.1) <586CF87F-349C-393D-AEEB-FB75F94A5EB7> /usr/lib/libpam.2.dylib
        0x7fff7bbfd000 -     0x7fff7bc32fff  libpcap.A.dylib (79.250.1) <C0893641-7DFF-3A33-BDAE-190FF54837E8> /usr/lib/libpcap.A.dylib
        0x7fff7bd4b000 -     0x7fff7bd63ffb  libresolv.9.dylib (65.200.2) <893142A5-F153-3437-A22D-407EE542B5C5> /usr/lib/libresolv.9.dylib
        0x7fff7bd65000 -     0x7fff7bda0ff3  libsandbox.1.dylib (851.270.1) <04B924EF-2385-34DF-807E-93AAD9EF3AAB> /usr/lib/libsandbox.1.dylib
        0x7fff7bda1000 -     0x7fff7bdb3ff7  libsasl2.2.dylib (211) <10987614-6763-3B5D-9F28-91D121BB4924> /usr/lib/libsasl2.2.dylib
        0x7fff7bdb4000 -     0x7fff7bdb5ff7  libspindump.dylib (267.3) <A584E403-8C95-3841-9C16-E22664A5A63F> /usr/lib/libspindump.dylib
        0x7fff7bdb6000 -     0x7fff7bf93fff  libsqlite3.dylib (274.26) <6404BA3B-BCA4-301F-B2FE-8776105A2AA3> /usr/lib/libsqlite3.dylib
        0x7fff7c102000 -     0x7fff7c132ffb  libtidy.A.dylib (16.4) <6BDC3816-F222-33B6-848C-D8D5924E8959> /usr/lib/libtidy.A.dylib
        0x7fff7c14c000 -     0x7fff7c1abffb  libusrtcp.dylib (1229.250.15) <36BBD474-FAE5-366F-946D-16C5C4B4A792> /usr/lib/libusrtcp.dylib
        0x7fff7c1ac000 -     0x7fff7c1afff7  libutil.dylib (51.200.4) <CE9B18C9-66ED-32D4-9D29-01F8FCB467B0> /usr/lib/libutil.dylib
        0x7fff7c1b0000 -     0x7fff7c1bdfff  libxar.1.dylib (417.1) <39CCF46B-C81A-34B1-92A1-58C4E5DA846E> /usr/lib/libxar.1.dylib
        0x7fff7c1c2000 -     0x7fff7c2a4ff3  libxml2.2.dylib (32.10) <AA4E1B1F-0FDE-3274-9FA5-75446298D1AC> /usr/lib/libxml2.2.dylib
        0x7fff7c2a5000 -     0x7fff7c2cdff3  libxslt.1.dylib (16.5) <E330D3A2-E32B-378A-973E-A8D245C0F712> /usr/lib/libxslt.1.dylib
        0x7fff7c2ce000 -     0x7fff7c2e0ff7  libz.1.dylib (70.200.4) <B048FC1F-058F-3A08-A1FE-81D5308CB3E6> /usr/lib/libz.1.dylib
        0x7fff7c30e000 -     0x7fff7c30fffb  liblog_network.dylib (1229.250.15) <C9C042D5-C018-3FB6-AC50-F11F44F3D815> /usr/lib/log/liblog_network.dylib
        0x7fff7c38f000 -     0x7fff7c700ff7  libswiftCore.dylib (5.0 - 1001.8.63.13) <4FE40B7B-1413-3A25-959B-D78B78682D12> /usr/lib/swift/libswiftCore.dylib
        0x7fff7c70f000 -     0x7fff7c711ff3  libswiftCoreFoundation.dylib (??? - ???) <3192FF82-E322-3B09-805F-6AEB48C00478> /usr/lib/swift/libswiftCoreFoundation.dylib
        0x7fff7c712000 -     0x7fff7c720ff3  libswiftCoreGraphics.dylib (??? - ???) <FEFE340D-865B-3C8C-AF13-AB1DE8866C01> /usr/lib/swift/libswiftCoreGraphics.dylib
        0x7fff7c737000 -     0x7fff7c73dffb  libswiftDarwin.dylib (??? - ???) <FD515CE3-A057-36EC-A787-E78F773973F3> /usr/lib/swift/libswiftDarwin.dylib
        0x7fff7c73e000 -     0x7fff7c754fff  libswiftDispatch.dylib (??? - ???) <40AA9542-FE66-37F0-B0BE-70C8D057488C> /usr/lib/swift/libswiftDispatch.dylib
        0x7fff7c755000 -     0x7fff7c8e6ff7  libswiftFoundation.dylib (??? - ???) <A24C3092-3B6D-3680-945E-292A0D31436F> /usr/lib/swift/libswiftFoundation.dylib
        0x7fff7c8f5000 -     0x7fff7c8f7ff3  libswiftIOKit.dylib (??? - ???) <C7E2E0F9-D04C-348E-A5B6-DD59A9F40BDD> /usr/lib/swift/libswiftIOKit.dylib
        0x7fff7c94e000 -     0x7fff7c951ff7  libswiftObjectiveC.dylib (??? - ???) <A4201F26-A2B3-3F2A-8B0F-D17F166C26BC> /usr/lib/swift/libswiftObjectiveC.dylib
        0x7fff7cac4000 -     0x7fff7cac8ff3  libcache.dylib (81) <1987D1E1-DB11-3291-B12A-EBD55848E02D> /usr/lib/system/libcache.dylib
        0x7fff7cac9000 -     0x7fff7cad3ff3  libcommonCrypto.dylib (60118.250.2) <1765BB6E-6784-3653-B16B-CB839721DC9A> /usr/lib/system/libcommonCrypto.dylib
        0x7fff7cad4000 -     0x7fff7cadbff7  libcompiler_rt.dylib (63.4) <5212BA7B-B7EA-37B4-AF6E-AC4F507EDFB8> /usr/lib/system/libcompiler_rt.dylib
        0x7fff7cadc000 -     0x7fff7cae5ff7  libcopyfile.dylib (146.250.1) <98CD00CD-9B91-3B5C-A9DB-842638050FA8> /usr/lib/system/libcopyfile.dylib
        0x7fff7cae6000 -     0x7fff7cb6afc3  libcorecrypto.dylib (602.260.2) <01464D24-570C-3B83-9D18-467769E0FCDD> /usr/lib/system/libcorecrypto.dylib
        0x7fff7cbf1000 -     0x7fff7cc2aff7  libdispatch.dylib (1008.270.1) <97273678-E94C-3C8C-89F6-2E2020F4B43B> /usr/lib/system/libdispatch.dylib
        0x7fff7cc2b000 -     0x7fff7cc57ff7  libdyld.dylib (655.1.1) <002418CC-AD11-3D10-865B-015591D24E6C> /usr/lib/system/libdyld.dylib
        0x7fff7cc58000 -     0x7fff7cc58ffb  libkeymgr.dylib (30) <0D0F9CA2-8D5A-3273-8723-59987B5827F2> /usr/lib/system/libkeymgr.dylib
        0x7fff7cc59000 -     0x7fff7cc65ff3  libkxld.dylib (4903.271.2) <FBF128C8-D3F0-36B6-983A-A63B8A3E0E52> /usr/lib/system/libkxld.dylib
        0x7fff7cc66000 -     0x7fff7cc66ff7  liblaunch.dylib (1336.261.2) <2B07E27E-D404-3E98-9D28-BCA641E5C479> /usr/lib/system/liblaunch.dylib
        0x7fff7cc67000 -     0x7fff7cc6cfff  libmacho.dylib (927.0.3) <A377D608-77AB-3F6E-90F0-B4F251A5C12F> /usr/lib/system/libmacho.dylib
        0x7fff7cc6d000 -     0x7fff7cc6fffb  libquarantine.dylib (86.220.1) <6D0BC770-7348-3608-9254-F7FFBD347634> /usr/lib/system/libquarantine.dylib
        0x7fff7cc70000 -     0x7fff7cc71ff7  libremovefile.dylib (45.200.2) <9FBEB2FF-EEBE-31BC-BCFC-C71F8D0E99B6> /usr/lib/system/libremovefile.dylib
        0x7fff7cc72000 -     0x7fff7cc89ff3  libsystem_asl.dylib (356.200.4) <A62A7249-38B8-33FA-9875-F1852590796C> /usr/lib/system/libsystem_asl.dylib
        0x7fff7cc8a000 -     0x7fff7cc8aff7  libsystem_blocks.dylib (73) <A453E8EE-860D-3CED-B5DC-BE54E9DB4348> /usr/lib/system/libsystem_blocks.dylib
        0x7fff7cc8b000 -     0x7fff7cd12fff  libsystem_c.dylib (1272.250.1) <7EDACF78-2FA3-35B8-B051-D70475A35117> /usr/lib/system/libsystem_c.dylib
        0x7fff7cd13000 -     0x7fff7cd16ffb  libsystem_configuration.dylib (963.270.3) <2B4A836D-68A4-33E6-8D48-CD4486B03387> /usr/lib/system/libsystem_configuration.dylib
        0x7fff7cd17000 -     0x7fff7cd1aff7  libsystem_coreservices.dylib (66) <719F75A4-74C5-3BA6-A09E-0C5A3E5889D7> /usr/lib/system/libsystem_coreservices.dylib
        0x7fff7cd1b000 -     0x7fff7cd21fff  libsystem_darwin.dylib (1272.250.1) <EC9B39A5-9592-3577-8997-7DC721D20D8C> /usr/lib/system/libsystem_darwin.dylib
        0x7fff7cd22000 -     0x7fff7cd28ff7  libsystem_dnssd.dylib (878.270.2) <E9A5ACCF-E35F-3909-AF0A-2A37CD217276> /usr/lib/system/libsystem_dnssd.dylib
        0x7fff7cd29000 -     0x7fff7cd74ffb  libsystem_info.dylib (517.200.9) <D09D5AE0-2FDC-3A6D-93EC-729F931B1457> /usr/lib/system/libsystem_info.dylib
        0x7fff7cd75000 -     0x7fff7cd9dff7  libsystem_kernel.dylib (4903.271.2) <EA204E3C-870B-30DD-B4AF-D1BB66420D14> /usr/lib/system/libsystem_kernel.dylib
        0x7fff7cd9e000 -     0x7fff7cde9ff7  libsystem_m.dylib (3158.200.7) <F19B6DB7-014F-3820-831F-389CCDA06EF6> /usr/lib/system/libsystem_m.dylib
        0x7fff7cdea000 -     0x7fff7ce14fff  libsystem_malloc.dylib (166.270.1) <011F3AD0-8E6A-3A89-AE64-6E5F6840F30A> /usr/lib/system/libsystem_malloc.dylib
        0x7fff7ce15000 -     0x7fff7ce1fff7  libsystem_networkextension.dylib (767.250.2) <FF06F13A-AEFE-3A27-A073-910EF78AEA36> /usr/lib/system/libsystem_networkextension.dylib
        0x7fff7ce20000 -     0x7fff7ce27fff  libsystem_notify.dylib (172.200.21) <145B5CFC-CF73-33CE-BD3D-E8DDE268FFDE> /usr/lib/system/libsystem_notify.dylib
        0x7fff7ce28000 -     0x7fff7ce31fef  libsystem_platform.dylib (177.270.1) <9D1FE5E4-EB7D-3B3F-A8D1-A96D9CF1348C> /usr/lib/system/libsystem_platform.dylib
        0x7fff7ce32000 -     0x7fff7ce3cff7  libsystem_pthread.dylib (330.250.2) <2D5C08FF-484F-3D59-9132-CE1DCB3F76D7> /usr/lib/system/libsystem_pthread.dylib
        0x7fff7ce3d000 -     0x7fff7ce40ff7  libsystem_sandbox.dylib (851.270.1) <9494594B-5199-3186-82AB-5FF8BED6EE16> /usr/lib/system/libsystem_sandbox.dylib
        0x7fff7ce41000 -     0x7fff7ce43ff3  libsystem_secinit.dylib (30.260.2) <EF1EA47B-7B22-35E8-BD9B-F7003DCB96AE> /usr/lib/system/libsystem_secinit.dylib
        0x7fff7ce44000 -     0x7fff7ce4bff3  libsystem_symptoms.dylib (820.267.1) <03F1C2DD-0F5A-3D9D-88F6-B26C0F94EB52> /usr/lib/system/libsystem_symptoms.dylib
        0x7fff7ce4c000 -     0x7fff7ce61fff  libsystem_trace.dylib (906.260.1) <FC761C3B-5434-3A52-912D-F1B15FAA8EB2> /usr/lib/system/libsystem_trace.dylib
        0x7fff7ce63000 -     0x7fff7ce68ffb  libunwind.dylib (35.4) <24A97A67-F017-3CFC-B0D0-6BD0224B1336> /usr/lib/system/libunwind.dylib
        0x7fff7ce69000 -     0x7fff7ce98fff  libxpc.dylib (1336.261.2) <7DEE2300-6D8E-3C00-9C63-E3E80D56B0C4> /usr/lib/system/libxpc.dylib
    
    External Modification Summary:
      Calls made by other processes targeting this process:
        task_for_pid: 1
        thread_create: 0
        thread_set_state: 0
      Calls made by this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by all processes on this machine:
        task_for_pid: 19812
        thread_create: 0
        thread_set_state: 0
    
    VM Region Summary:
    ReadOnly portion of Libraries: Total=561.5M resident=0K(0%) swapped_out_or_unallocated=561.5M(100%)
    Writable regions: Total=1.9G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.9G(100%)
     
                                    VIRTUAL   REGION 
    REGION TYPE                        SIZE    COUNT (non-coalesced) 
    ===========                     =======  ======= 
    Accelerate framework               640K        4 
    Activity Tracing                   256K        1 
    CG backing stores                 3392K        4 
    CG image                          1260K       64 
    CG raster data                     248K       19 
    CoreAnimation                    247.3M      171 
    CoreData Object IDs               4100K        2 
    CoreGraphics                         8K        1 
    CoreImage                          368K       50 
    CoreUI image data                 5680K       54 
    CoreUI image file                  628K       11 
    Foundation                         236K        3 
    Image IO                           992K        7 
    JS JIT generated code              1.0G        3 
    Kernel Alloc Once                    8K        1 
    MALLOC                           271.9M      106 
    MALLOC guard page                   64K       14 
    MALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)
    Mach message                         8K        1 
    Memory Tag 242                      12K        1 
    Memory Tag 251                      12K        1 
    SQLite page cache                  256K        4 
    STACK GUARD                       56.1M       19 
    Stack                             17.1M       19 
    VM_ALLOCATE                        728K       30 
    WebKit Malloc                     8620K        7 
    __DATA                            54.2M      449 
    __FONT_DATA                          4K        1 
    __LINKEDIT                       224.8M       18 
    __TEXT                           336.7M      447 
    __UNICODE                          564K        1 
    libnetwork                         128K        2 
    mapped file                      116.3M       57 
    shared memory                      696K       14 
    ===========                     =======  ======= 
    TOTAL                              2.7G     1587 
    TOTAL, minus reserved VM space     2.3G     1587 
    
    #38298
    Sam Moffatt
    Participant

    Based on a reply I added on the time delay post I wrote a while back, I decided to clean up and better document the script.

    There are three functions:

    • delay – simple spin lock delay mechanism for blocking execution for duration milliseconds.
    • rateLimitedDelay – ensure that a script blocks for at least minTime milliseconds since the last execution tracked by key.
    • rateLimitedCallback – non-blocking method to execute callback no more frequently than minTime milliseconds since the last execution tracked by key.

    The first use case is pretty simple: call it and wait until the duration expires. The second one is for ensuring you don’t go through a code path too quickly but if you haven’t called it lately it will immediately call it. The third one is used to optionally execute callback if you haven’t executed it in the last minTime milliseconds which is useful for avoiding spamming log messages or other similar events. It enables you to put in a callback but if it’s recently executed to immediately skip it (it’s not blocking). I built this to support a REST progress interface for ensuring it didn’t post updates more frequently than once every few seconds.

    This script uses a pattern I’m adopting of including a simple test case at the end. If you execute the script directly, it’ll run the test case as a sample of how to run. This means when you import you need to also define a variable called PARENT_SCRIPT which is used to disable the test. Technically you can set PARENT_SCRIPT to any value but I use the format FORM NAME::SCRIPT NAME:

    var PARENT_SCRIPT = 'Products::Update SKUs for Product';
    document.getFormNamed('Script Manager').runScriptNamed('Rate Limiter');
    

    Test case:

    	console.log('Message 1 at ' + new Date());
    	rateLimitedDelay('test');
    	rateLimitedDelay('test');
    	rateLimitedCallback('callback', function() { console.log('Callback 1: ' + new Date()) }); 
    	console.log('Message 2 at ' + new Date());
    	delay(3000);
    	rateLimitedCallback('callback', function() { console.log('Callback 2: ' + new Date()) });
    	rateLimitedDelay('test');
    	console.log('Message 3 at ' + new Date());
    	delay(6000);
    	rateLimitedCallback('callback', function() { console.log('Callback 3: ' + new Date()) });
    	console.log('Message 4 at ' + new Date());
    	rateLimitedDelay('test');
    	console.log('Message 5 at ' + new Date());
    	rateLimitedCallback('callback', function() { console.log('Callback 4: ' + new Date()) });
    

    Here’s the full script:

    // ========== Rate Limiter Start ========== //
    // NAME: Rate Limiter
    // VERSION: 1.0.0
    // CHANGELOG:
    //   1.0.0: Initial release.
    /**
     * Rate Limiter module provides utilities to limit and delay
     * over time.
     */
    if (typeof rateLimiter === 'undefined')
    {
    
    	var rateLimiter = {};
    	
    	/**
    	 * Spin lock delay mechanism.
    	 *
    	 * This will block execution until the time limit.
    	 *
    	 * @param {integer} duration - The length of the delay in milliseconds.
    	 */ 
    	function delay(duration)
    	{
    		let now = new Date();
    		let future = now.getTime() + duration;
    		while((new Date()).getTime() < future) { }
    	}
    	
    	/**
    	 * Blocking rate limited delay mechanism.
    	 *
    	 * This will block a request until a minimum time has been elapsed.
    	 * If based on the last execution of the `key`, `minTime` milliseconds
    	 * have not elapsed, this will block until that time has elapsed.
    	 *
    	 * `key` is shared with rateLimitedCallback.
    	 *
    	 * @param {string}  key - The key to validate the last execution.
    	 * @param {integer} minTime - The minimum amount of time between execution.
    	 */
    	function rateLimitedDelay(key, minTime = 5000)
    	{
    		if (typeof rateLimiter[key] === 'undefined')
    		{
    			rateLimiter[key] = 0;
    		}
    		let now = new Date().getTime();
    		let nextExecution = rateLimiter[key] + minTime;
    		if (now < nextExecution)
    		{
    			delay(nextExecution - now);
    		}
    		rateLimiter[key] = new Date().getTime();
    	}
    
    	/** 
    	 * Non-blocking rate limited callback executor.
    	 *
    	 * This will execute `callback` only if `callback` hasn't been 
    	 * executed as `key` for at least `minTime` milliseconds since
    	 * the last execution. If it has been executed then it will not
    	 * execute this instance.
    	 *
    	 * `key` is shared with `rateLimitedDelay`.
    	 *
    	 * @param {string}   key - The key to validate the last execution.
    	 * @param {function} callback - Callback to execute.
    	 * @param {integer}  minTime - The minimum amount of time between executions.
    	 */
    	function rateLimitedCallback(key, callback, minTime = 5000)
    	{
    		if (typeof rateLimiter[key] === 'undefined')
    		{
    			rateLimiter[key] = 0;
    		}
    		let now = new Date().getTime();
    		let nextExecution = rateLimiter[key] + minTime;
    		if (now > nextExecution)
    		{
    			callback();
    			rateLimiter[key] = new Date().getTime();
    		}
    	}
    }
    
    // Tests
    if (typeof PARENT_SCRIPT === 'undefined')
    {
    	console.log('Message 1 at ' + new Date());
    	rateLimitedDelay('test');
    	rateLimitedDelay('test');
    	rateLimitedCallback('callback', function() { console.log('Callback 1: ' + new Date()) }); 
    	console.log('Message 2 at ' + new Date());
    	delay(3000);
    	rateLimitedCallback('callback', function() { console.log('Callback 2: ' + new Date()) });
    	rateLimitedDelay('test');
    	console.log('Message 3 at ' + new Date());
    	delay(6000);
    	rateLimitedCallback('callback', function() { console.log('Callback 3: ' + new Date()) });
    	console.log('Message 4 at ' + new Date());
    	rateLimitedDelay('test');
    	console.log('Message 5 at ' + new Date());
    	rateLimitedCallback('callback', function() { console.log('Callback 4: ' + new Date()) });	
    }
    // ========== Rate Limiter End ========== //
    
    #37439

    Topic: Get record by key

    in forum Script Talk
    Sam Moffatt
    Participant

    I had a situation where I wanted to automatically download a set of files from the web and store them as Tap Forms document. In my case I have two forms: one parent form that stores the URL I want to grab data from as a base and second form that I want put new records with more details keyed for me by source URL.

    It takes a few parameters to operate (the last three are optional):

    • formName: The name of the source form for the records; can also be a form ID (required).
    • keyFieldId: The field ID of the key field in the record (required).
    • keyValue: The value to match as the key (required).
    • createIfMissing: Control if a record is created if none is found (default: true).
    • earlyTermination: Control if function terminates as soon as a match is found (default: true).
    • alwaysScanOnMiss: Control if we should assume concurrent access (default: false)

    I use this with my Script Manager idiom, so I have something like this:

    document.getFormNamed('Script Manager').runScriptNamed('getLinkedRecord');
    let currentRecord = getRecordFromFormWithKey('Location Tracker', source_id, entry.href, true, false);
    

    The early termination option is interesting and how I’d advise using it is dependent upon your use case. If you set early termination, when the script is iterating through all of the records it will return the first match it finds. If you only expect to call this function once, maybe twice, then this will work fine for you because depending on your ordering you will avoid a full traversal of your recordset.

    If you are running this in a loop or some other construct where you expect to call the function multiple times then disabling early termination ensures that everything is indexed on the first pass. If you expect to have many cache hits, then this will improve performance significantly as subsequent calls will immediately return based on a direct lookup. Record creation is added as a method here so that newly created records can be immediately indexed in the system avoiding future cache misses.

    The worst case for this method is a cache miss. After the first scan of the records, it assumes no other concurrent access. If you don’t want this behaviour, there is another flag to always scan if a miss isn’t found and the form has already been scanned.

    Here’s the script:

    // ========== getRecordFromFormWithKey Start ========== //
    // NAME: Get Record From From With Key
    // VERSION: 1.0
    
    /**
     * Get a record from a form with a key field, optionally creating it if missing.
     * Note: assumes your key field is unique.
     *
     * formName           The name of the source form for the records (required).
     * keyFieldId         The field ID of the key field in the record (required).
     * keyValue           The value to match as the key (required).
     * createIfMissing    Control if a record is created if none is found (default: true).
     * earlyTermination   Control if function terminates as soon as a match is found (default: true).
     * alwaysScanOnMiss   Control if we should assume concurrent access (default: false)
     */
    function getRecordFromFormWithKey(formName, keyFieldId, keyValue, createIfMissing = true, earlyTermination = true, alwaysScanOnMiss = false)
    {
    	// Check if our basic parameters are set.
    	if (!formName || !keyFieldId || !keyValue)
    	{
    		throw new Error("Missing required parameters");
    	}
    	
    	// Determine the target form (check if we were given an ID or else assume a name)
    	let targetForm = undefined;
    	if (formName.match(/frm-/))
    	{
    		targetForm = document.getFormWithId(formName);
    	}
    	else
    	{
    		targetForm = document.getFormNamed(formName);
    	}
    
    	// Check if our global variable has been setup.
    	if (!indexedRecordIndex)
    	{
    		var indexedRecordIndex = {};	
    	}
    	
    	// Flag for if we've indexed this form already.
    	if (!indexedRecordState)
    	{
    		var indexedRecordState = {};
    	}
    
    	// Create a key for this form-field combination.
    	// Form+Field is the key.
    	let indexedRecordKey = targetForm.getId() + "_" + keyFieldId;
    
    	// Check to see if this particular link field has been setup.
    	if (!indexedRecordIndex[indexedRecordKey])
    	{
    		indexedRecordIndex[indexedRecordKey] = {};
    	}
    
    	
    	// Short circuit if we have an exact match.
    	if (indexedRecordIndex[indexedRecordKey][keyValue])
    	{
    		return indexedRecordIndex[indexedRecordKey][keyValue];
    	}
    	
    	// No immediate match, check to see if we should scan everything.
    	// alwaysScanOnMiss forces this code path each execution.
    	// The check to indexedRecordState is if this has been indexed.
    	if (alwaysScanOnMiss || !indexedRecordState[indexedRecordKey])
    	{	
    		// Brute force search :(
    		let records = targetForm.getRecords();
    
    		// Iterate through all of the records and look for a match.
    		for (currentRecord of records)
    		{
    			// Set up a reverse link for this value.
    			let recordKeyValue = currentRecord.getFieldValue(keyFieldId);
    			indexedRecordIndex[indexedRecordKey][recordKeyValue] = currentRecord;
    
    			// If this is a match and early termination is setup, return immediately.
    			if (earlyTermination && recordKeyValue == keyValue)
    			{
    				return currentRecord;
    			}
    		}
    		
    		// Flag this record-field as being indexed.
    		indexedRecordState[indexedRecordKey] = true;
    	}
    
    	// Check to see if we got a match here and return if the key exists.
    	if (indexedRecordIndex[indexedRecordKey][keyValue])
    	{
    		return indexedRecordIndex[indexedRecordKey][keyValue];
    	}
    	else if (createIfMissing)
    	{
    		// If createIfMissing is set, create a new record.
    		// Note: it's expected the caller will call document.saveAllChanges();
    		let newRecord = targetForm.addNewRecord();
    		// Set the key value to our search value.
    		newRecord.setFieldValue(keyFieldId, keyValue);
    		// Link this up to save us another lookup in future.
    		indexedRecordIndex[indexedRecordKey][keyValue] = newRecord;
    		// And now we return the new record. 
    		return newRecord;
    	}
    	
    	// If we didn't find anything, return undefined.
    	return undefined;
    }
    // ========== getRecordFromFormWithKey End ========== //
    
    #37397
    Sam Moffatt
    Participant

    I created a form called ‘Script Manager’ which I use to put form scripts and then you can load them like this:

    document.getFormNamed('Script Manager').runScriptNamed('Form Logger');
    

    I use this idiom for a bunch of sample scripts you can find on the forum.

    #37039
    Sam Moffatt
    Participant

    A long time ago, I created one checkbox to mark a particular state transition. A while later I ended up realising I need another checkbox because I messed up the first one and it could be ambiguous. So I decided to create a sort of flip flop where if you check one check box, it unchecks the other one.

    To solve this I created a new script field that watched the two fields and then used itself to store the historic state of these fields as a serialised JSON value. When it runs, it checks the values and then sees if the field changing is different to what it’s seen previously. It then decides if it wants to toggle the checkbox and returns a JSON string with the current field states to be stored for next time.

    To work this uses the Logger module and it also includes a reference to the Form Logger that I used to find the field ID of the script fields. The script is listed below:

    // Import the logger and output the header.
    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    logger.consoleHeader('Checkbox Flip Flop', 'Shipments');
    
    // Get the current values of the check boxes.
    var confirmed = record.getFieldValue('fld-2adb9ba8cdd048bbbb614d46b415ada5');
    var unverified = record.getFieldValue('fld-abdb319b7db74fc39812a94778c433cc');
    
    // Get the current value for this script field.
    var oldState = record.getFieldValue('fld-2cd0296ea0884c8cba3640d8e33f010b');
    
    // Create a copy of the new state for later.
    var newState = {'confirmed': confirmed, 'unverified': unverified};
    
    // This logs all of the script fields in the form using the form logger.
    document.getFormNamed('Script Manager').runScriptNamed('Form Logger');
    formLogger.dump({'type': ['script']});
    
    // For debugging, log the various states.
    logger.logMessage(<code>Current State: ${oldState}</code>);
    logger.logMessage('New State: ' + JSON.stringify(newState)); 
    
    // If we have an old state, we parse it out (otherwise it'd be null).
    if (oldState)
    {
    	oldState = JSON.parse(oldState);
    }
    else
    {
    	oldState = { 'unverified': false, 'confirmed': false };
    }
    
    // If the old state was unverified and not confirmed and this is confirmed...
    if (oldState['unverified'] && !oldState['confirmed'] && confirmed)
    {
    	// Update the unverified field to not be set.
    	logger.logMessage('Unsetting unverified flag since confirmed flag toggled');
    	record.setFieldValue('fld-abdb319b7db74fc39812a94778c433cc', false, false);
    }
    
    // If the old state was confirmed and not verified and this is now unverified...
    if (oldState['confirmed'] && !oldState['unverified'] && unverified)
    {
    	// Update the confirmed field to not be set.
    	logger.logMessage('Unsetting confirmed flag since verified flag toggled');
    	record.setFieldValue('fld-2adb9ba8cdd048bbbb614d46b415ada5', false, false);
    }
    
    // Save the changes to the database.
    document.saveAllChanges();
    
    // Turn the newState into a JSON string.
    var result = JSON.stringify(newState);
    logger.consoleFooter('Checkbox Flip Flop', 'Shipments');
    
    // Return the JSON string for the next execution run.
    result;
    

    There’s one issue with this in that the UI doesn’t seem to update properly when the checkbox state is changed. At some point I’ll turn it into a combobox and fix my fields but until then, I have some automation to keep my state consistent.

    #37038
    Sam Moffatt
    Participant

    I had a need to get the script field ID which isn’t readily available in the Script Editor and decided to do a quick form script so that I could pick it up later. If you’ve used my ‘Script Manager’ form convention, then just create a new form script in it called ‘Form Logger’.

    You can call it without arguments to get all fields dumped, here’s some sample calling code:

    document.getFormNamed('Script Manager').runScriptNamed('Form Logger');
    formLogger.dump()

    If you want to filter by type, you can specify the field type:

    document.getFormNamed('Script Manager').runScriptNamed('Form Logger');
    formLogger.dump({'type': ['script', 'text']});

    And this is it’s output in the console:

    Form Logger: Shipments
    Type Filter: ["script","text"]
    Layout: default
    fld-c487390743c947969cbe661cff596855: text	Tracking Number
    fld-0950c430cb0c41f79c51d43a544b366b: text	Carrier
    fld-7a29242731d9451092c92d8586dbc94a: script	Tracking Details
    fld-dddcdc15e1c44aa4a99bba6314dc7a07: script	Tracking URL Autocomplete
    fld-9bee4fd0919e4b439e7bed8d5a6c1053: script	Tracking Number Reformat
    fld-2cd0296ea0884c8cba3640d8e33f010b: script	Checkbox Flip Flop
    fld-a9a09a61a9e949199e92d47c02fd364c: text	Shipment Order ID
    fld-f7aba3b5ddd6430cb8e9a211e0086c84: script	Date Propagation
    fld-45c8f29ec3214fc5aacbba73e2de3142: script	Order ID FK

    *Note:* This won’t look as formatted in the console because it uses a proportional font.

    Here’s the full script, it’s pretty simple:

    // ========== Form Logger Start ========== //
    // NAME: Form Logger
    // VERSION: 1.0.1
    // CHANGELOG:
    //   1.0.1: Added support for custom form name and fix for "getId" rename.
    
    /**
     * Method to dump out the field ID's, type and names with the ability to filter by type.
     */
    if (formLogger == undefined)
    
    var formLogger = (function() {
    
    	return {
    	
    		dump: function({type = [], layout = 'default', formName = ''} = {})
    		{
    			let targetForm = form;
    			if (formName)
    			{
    				targetForm = document.getFormNamed(formName);
    			}
    
    			console.log('Form Logger: ' + targetForm.name);
    			console.log('Type Filter: ' + JSON.stringify(type));
    			console.log('Layout: ' + layout);
    	 		var fields = targetForm.getFields();
    
    			for (field in fields)
    			{
    				if (type.length == 0 || type.includes(fields[field].fieldType)) 
    				{
    					console.log(fields[field].getId() + ": " + fields[field].fieldType + "\t" + fields[field].name);
    				}
    			}
    		
    		}
    	}
    })();
    // ========== Form Logger End ========== //
    

    As you might gather, I want to have a layout additional filter but haven’t gotten there yet. Maybe in a later version.

    #36120
    Sam Moffatt
    Participant

    Is privacy and security the main reason for choosing CouchDB over iCloud?
    Do you recommend downloading the iOS version in the beginning or after you have all your forms build? What determines that decision?

    I started using Tap Forms with version 3 and followed the upgrade to 5. Version 3 did a lot of what I cared about and used iCloud to sync all of the documents around. iCloud was really slow with some of my attachment heavy documents (my main document is 6GB) which meant sync took forever to run and bulk changes even longer. I have an iMac at home that I set up essentially as a server using the P2P sync and then once CouchDB was added it became the CouchDB host. CouchDB gives me access to the innards of my TapForms documents to do interesting stuff like build a tree of my database structure, build my own more fine grained backup tooling and to integrate with tools like ElasticSearch and Kibana to do some graphing of the data.

    I had TapForms on both iOS and Mac at that point to replace a Bento based workflow and I think it’s been a great shift (except for layouts, Bento had iOS layouts which helps it there). I generally develop new forms on the Mac and then push them from there but I’m not afraid of building stuff on the fly on my phone too. You can build everything as you go and it’ll sync the structure to all of the devices.

    Are there a lot of differences in syntax between the Mac and iOS versions and do they work seamlessly with each other despite those differences?

    The two versions offer almost all of the same features, the only missing one on iOS is custom layouts. There are different user interactions that can make things a little more tedious on iOS but a lot of that is due to the smaller form factor. I’m sure there are a few other things missing but most of the time I don’t miss them (except for the oft requested custom layouts, which to get right on iOS will be a chunk of work as Bento only had custom layouts on iPad, not iPhone).

    Let’s talk form building and linking strategy for a minute. If you have a main topic, we’ll use medicinal herbs for example, :)

    I want to track: Broad categories and intricate details about each herb.

    1. History of each:
    Acquired it: When, where who from, how and why acquired: Grew it, Bought it, Wildcrafted it.
    Positive identification attributes of each herb.
    2. Culinary Information
    a. Edible parts
    b. Various possible preparations
    c. Nutritional information
    d. Recipes

    3. Growing Information for each herb, both recommended and actual and success rate of each method.

    4. Medicinal Information: Properties, Actions, Constituents, Various medicinal preparation possibilities .

    5. Work in Progress- Start, Strain, Bottle, Label, and Store

    6. Expenses: Assets, Supplies (consumable, Functional, Packaging)

    7. Inventory:
    Location,
    Container size and date,
    Amount on hand,
    Age and expiration date
    Consumable Supplies
    Macerating
    Ability to increase and decrease amount in each, broken down by preparation type:
    Tinctures,
    Infused Oils,
    Vinegars,
    Macerating
    Consumable Supplies,

    Looks like you’re well on your way to a database structure already :)

    My spreadsheets have become too long, too many, too time consuming and too redundant and added to that using Quicken to manage the expenses. So the broad end goal here is to greatly reduce the paperwork time and organization of it all by entering each piece of information about each herb ONCE and being able to, at a click, see any individual piece of information or all the information about a particular herb.

    What you’re looking for here is generally referred to as “third normal form” for a database. There are a few guides out there that explain it but functionally the idea is that you identify as precise a subset of the data and then give it a key. In TapForms, each record has it’s own generated key which you can then use to link.

    As far as data entry for new records goes, the more input boxes where necessary, multiple choice check boxes and radio buttons where possible and branching decisions via IF, Then, Else statements seems logical to me but I have no experience with databases so I am open to suggestions.

    That being said, design-wise, Is it better to have more or fewer forms?

    The determination I’d go with is what unique details does this form capture. I started off in Bento with a “Purchases” form that stored a bunch of details about the purchases I make and image attachments for reference. Within TapForms I’ve now morphed that into a much larger structure with a form that stores unique “Order” details (when purchased, where, how much, tax, discounts, etc), a line item “Order Item” form which then links back to my more detail orientated “Purchases” form. I also have “Shipments” which are linked from “Orders” and also “Purchases” because an order can have multiple shipments so all of those shipments are linked to the order and I sometimes link the individual purchases to shipments when orders are split shipped.

    Design wise you follow third normal form to reduce each form to it’s unique items and progress from there. As you can likely tell, I’ve done that progressively over time and I use the increasing amounts of automation in TapForms to be able to make some of that quicker whilst maintaining my legacy “Purchases” structure as well.

    For the forms that I do create, (all information revolving around each individual herb), should they all have a one to many link with inverse relationship checked? Or say, in the case of storage location and growing conditions, since they all have them, be linked as many to many? I am unclear as to what determinations to consider in the design phase. Is that determined by how you want to view the end results?

    When I look at my Purchases based document, I have two entry points: one from Orders and one from Purchases. Purchases is a relatively “flat” document with a lot of duplicated fields whilst “Orders” has what I started off as more normalised. Orders -> Order Items is 1:M, Order Items -> Purchases is M:M however I do some tricks. I use a calculation field to generate a composite key called “Purchase Key” that combines Marketplace, Store Name and Order ID which is in both “Orders” and “Purchases” which is used by a Link to Form JOIN field to link Purchases directly to Orders automatically as well. I didn’t build all of this in a day, it’s been evolving over years to get to where it is today. Just make sure you do a backup before majorly restructuring your database and also disable sync to prevent the changes propagating as you make them.

    Ideally, I imagine an opening screen asking me which herb I want to work with and letting me choose either from a list of Common name OR Latin name.

    Your entry point would be the herb names in those two forms, that’s your first document. Then you link to form into the rest of the data structures.

    Once chosen, it would ask me what a I want to do with the herb and show me the following choices:

    Acquire it,
    Grow it
    Process it – Dry it , Freeze it, Package it or Store it
    Work in Progress
    Start a Preparation –
    Strain a Preparation
    Build a value added product
    Research it
    Count it
    Find it – Finished product in storage or Macerating
    View Logs
    Daily Log
    Individual herb log
    Herb Identity Checklist

    Once chosen then launch into each aspect of those categories and store any input information in a record under that herb.

    Those mostly map into forms that makes sense. Acquire sounds like a form about where you got the herb, Grow it similarly. Preparations is a single form with some filters as is your logs (which I suspect is the original use case). You can use prompter to provide simpler UI interactions or you can just use links.

    Then there is the question of importing the past 8 years of data. Should I arrange the spreadsheet columns to match the new data records tables or design the new data entry to match the spreadsheet columns?

    Thoughts?

    This is actually the truly hard question of the lot because you only make this decision once. The rest you can evolve over time to add new fields, new forms, new links, etc. This one is truly a one time decision.

    The advantage of creating your TapForms structures to replicate your spreadsheets is that you might be able to continue to use TapForms in a not dissimilar way to how you use your spreadsheets today. That means you can leverage slightly more structured data entry to start getting everything better from a structure you know already. The disadvantage here is that you’ve likely got some amount of duplication in place today and this propagates it (not dissimilar to my own “Purchases” form). If you’re using any sort of automation, macros or formula in your spreadsheets then those would also need to be ported across before you can be fully productive. The other advantage of keeping it 1:1 early on is if you decide that TapForms isn’t the answer, then exporting the data back out again and reintegrating it into your spreadsheets will be easier.

    The advantage of building everything brand new in TapForms would be the ability to design out your structure in third normal form and have everything set up right from the beginning. You already have a strong idea of your data model (it’s there in your spreadsheet), you just need to go through and figure out the unique items that are duplicated and turn them into forms. The downside of this is that your spreadsheets aren’t in this format and to import your data will require a lot of massaging to get that to work. Instead of taking what you already have and immediately mapping it across and then going through to validate that all of the data loaded into TapForms correctly using it’s built in table view, you’re going to have to do that twice: once when converting your sheets into a form TapForms can import and a second time when you import it into TapForms. As with any data conversion activity, you want to make sure that you’ve got everything moved across accurately and the only way to trust that is to verify the transformed data. If you find records or entries in the first situation that got broken in transit, then it’s a 1:1 mapping to fix whilst if you find records mismatched here, you have to do the normalisation yourself.

    My leaning would be recreate the data in TapForms aligned to your current structure and then start to use the TapForms functionality to progressively make it better. Thinking back to my own “Orders” -> “Order Items” -> “Purchases” use case, I have a script in “Order Items” that takes the current record, looks up it’s parent “Orders” record and uses data in both of those to create a new “Purchases” record. Make sure you keep backups (TapForms makes it easy) and just progressively improve your data structure.

    Here’s the meat of the script that takes order items/orders and makes a new purchases record:

    function createDetailRecord()
    {
    	// The order ID linking field.
    	var order_id_fld = 'fld-c3a6725d7d9446da92bbb880ffe90a9e';
    
    	// Get the parent order field.
    	var order = record.getFieldValue(order_id_fld);
    
    	// Pull some details from this record (order item)
    	var title = record.getFieldValue('fld-39ca9564ef2347ac93f933bc9a2316ac');
    	var price = record.getFieldValue('fld-a2973999a60d4319baf0b4480d6f57a0');
    	var note = record.getFieldValue('fld-d0cfab9ec09d497294fbd8b5b52caf16');
    	var line_number = record.getFieldValue('fld-f95b68d488cb4b058bbf3de84e1a7c3b');
    
    	// Pull some other values across.
    	var purchase_date = order.getFieldValue('fld-bc2e4b152dee42ac9361539a6e37cb5d');
    	var marketplace = order.getFieldValue('fld-fa37906add2942c88bce3b500561c42d');
    	var order_id = order.getFieldValue('fld-8228040b4641449b96aabfaea15f1ac5');
    	var store_name = order.getFieldValue('fld-c153da2f9a504be4b6fee4b5b62a1c11');
    	var ship_date = order.getFieldValue('fld-6ab700ccc11d418fbd27d8899d00c7a9');
    	var delivery_date = order.getFieldValue('fld-4b1c4180dc1b4bb08b32d16fa60cae66');
    	var purchase_key = order.getFieldValue('fld-3e49aaa5bc32429c8f0f0f234878356d');
    
    	// Do something
    	// Details field names
    	var details_title_id = 'fld-0d0edd2552ea461e929f806a4e5552b5';
    	var details_price_id = 'fld-08129d71ab0f4fa4a2749456281fca07';
    	var details_notes_id = 'fld-bf19d52c18cb4f5198df191ef7902e1b';
    
    	var details_purchase_date_id = 'fld-ccbd9a8f51d34246bebfb31aa4e397dd';
    	var details_ship_date_id = 'fld-cb3a9886ac7f4ec487447801a3911a1a';
    	var details_received_date_id = 'fld-bb17d48e41c7423692ab586f6c884d05';
    
    	var details_order_id_id = 'fld-e3e66a0f2e5c4df7b9496f65355e0bcf';
    	var details_marketplace_id = 'fld-c163aba17ae64c4d93b5a53819a139dc';
    	var details_store_name_id = 'fld-3d98dc6cdcae4a88909c97c80dde7bfb';
    
    	var details_state_id = 'fld-9402f8c0d53c43b986fee4ebc3468929';
    
    	var details_shipping_tracking_number_id = 'fld-6ea45a9c141343628940bfbcfa38ee90';
    	var details_shipping_carrier_id = 'fld-12644a7a4ae24ed8a7926123832d3557';
    	
    	var details_purchase_key_id = 'fld-8be9b2c2603f458f8349082237c41964';
    	var details_order_line_number_id = 'fld-da763fa0946d4be79039b4e828cf85f4';
    
    	var data = {
    		// Order Item Details
    		[details_title_id]: title,
    		[details_price_id]: price,
    		[details_notes_id]: note,
    		[details_order_line_number_id]: line_number,
    		
    		// Order Details
    		[details_purchase_date_id]: purchase_date,
    		[details_ship_date_id]: ship_date,
    		[details_received_date_id]: delivery_date,
    		[details_order_id_id]: order_id,
    		[details_marketplace_id]: marketplace,
    		[details_store_name_id]: store_name,
    		[details_purchase_key_id]: purchase_key,
    	};
    
    	// If there is a delivery date, state is delivered.
    	if (delivery_date)
    	{
    		data[details_state_id] = "Delivered";
    	}
    	// If there is a ship date, state is shipped.
    	else if (ship_date)
    	{
    		data[details_state_id] = "Shipped";
    	}
    	// If we have no ship or delivery dates then it's purchased
    	else
    	{
    		data[details_state_id] = "Purchased";
    	}
    
    	var order_shipments_link = 'fld-db2fcdb4d79c466ea09671c47d2ae645';
    	var order_shipments_records = order.getFieldValue(order_shipments_link);
    
    	var shipments_tracking_number_id = 'fld-c487390743c947969cbe661cff596855';
    	var shipments_carrier_id = 'fld-0950c430cb0c41f79c51d43a544b366b';
    
    	var shipping_tracking_number = '';
    	var shipping_carrier = '';
    
    	for (var index = 0, count = order_shipments_records.length; index < count; index++)
    	{
    		if (shipping_tracking_number.length > 0)
    		{
    			shipping_tracking_number += " ";
    		}
    		
    		if (shipping_carrier.length > 0)
    		{
    			shipping_carrier += " ";
    		}
    	     
    	    shipping_tracking_number += order_shipments_records[index].getFieldValue(shipments_tracking_number_id);
    	    shipping_carrier += order_shipments_records[index].getFieldValue(shipments_carrier_id);
    	}
    
    	data[details_shipping_tracking_number_id] = shipping_tracking_number;
    	data[details_shipping_carrier_id] = shipping_carrier;
    
    	console.log(JSON.stringify(data));
    
    	// Last but not least push the new record.
    	var details_id = 'fld-ac04de32d98242b88333977c89526fc1';
    	var detailsRecord = record.addNewRecordToField(details_id);
    	detailsRecord.setFieldValues(data);
    	document.saveAllChanges();
    
    	return "Created child record for " + title;
    }

    And here’s the full document structure (using the build tree script) of my purchases document:

    Purchases: (frm-efc0199a2b1543f79e722383014533b0)
    	'Image 01' photo (fld-e631165b67374734a3b8f384708b5922)
    	'Title' text (fld-0d0edd2552ea461e929f806a4e5552b5)
    	'Subtitle' calc (fld-45ef928f87e24bcd93e6751c8c21a6cb)
    		Referenced Fields: 
    		 - State (fld-9402f8c0d53c43b986fee4ebc3468929)
    		 - Colour (fld-a8626656cc90455ea9336dd2488d4aef)
    		 - Category (fld-6fdd09891a8c4d73be1b24aa07d077be)
    	'State' text (fld-9402f8c0d53c43b986fee4ebc3468929)
    	'Previous State' text (fld-636a7a4671c14877b1b17ea1b579cef5)
    	'State Watcher' script (fld-45463af0b409465ea78ad7c498ee896d)
    	'Colour' text (fld-a8626656cc90455ea9336dd2488d4aef)
    	'Category' text (fld-6fdd09891a8c4d73be1b24aa07d077be)
    
    	=== 'Main' section (fld-76597ce17f924c25bbcb195df984331c) ===
    	'Date Created' date_created (fld-0d049abe706b41afb680ab9a1bf99d46)
    	'Date Modified' date_modified (fld-59a06347614e48e8bf547a855b781582)
    	'Purchase Date' date (fld-ccbd9a8f51d34246bebfb31aa4e397dd)
    	'Ship Date' date (fld-cb3a9886ac7f4ec487447801a3911a1a)
    	'Received Date' date (fld-bb17d48e41c7423692ab586f6c884d05)
    	'Last Worn' date (fld-c275ddef83824707b5fcccb5e0698768)
    	'Order ID' text (fld-e3e66a0f2e5c4df7b9496f65355e0bcf)
    	'Marketplace' text (fld-c163aba17ae64c4d93b5a53819a139dc)
    	'Store Name' text (fld-3d98dc6cdcae4a88909c97c80dde7bfb)
    	'Brand' text (fld-1e250019d7b249f282cc572814d3e71d)
    	'Source' web_site (fld-da9d866bf3ca4d47aade04a77efd7301)
    	'Source Scraper Script' script (fld-429e3e7ca20a49d38b26417e25e6db26)
    	'Item Key' text (fld-ae7379d699e9473aa2ab16a2a2f002d4)
    	'Price' number (fld-08129d71ab0f4fa4a2749456281fca07)
    	'Shipping Tracking Number' text (fld-6ea45a9c141343628940bfbcfa38ee90)
    	'Shipping Carrier' text (fld-12644a7a4ae24ed8a7926123832d3557)
    
    	=== 'Storage' section (fld-f99f779335f54b9cb0a4179a90bb97dd) ===
    	'Bag Barcode' text (fld-32d459f0b5fb4dc4974795c484832af1)
    	'Storage Box' text (fld-c08e3a9eb7784d7f8ee3a5576c0adffa)
    	'Attributes JSON' text (fld-f95fdbc7b2de4b6e8c3efb46c4c5452b)
    
    	=== 'Product Data' section (fld-5a42b3a215d947399c120078ea868672) ===
    	'Seller Category' text (fld-c89e0cb1479e4aa7bace4532320ab697)
    	'Title (Native)' text (fld-7b07b948fcee448daa06c41759e60233)
    	'Notes' note (fld-bf19d52c18cb4f5198df191ef7902e1b)
    	'Note Parser Script' script (fld-7ad209e1e70a4d53985fd229d122bcfd)
    	'Product Details' note (fld-f4e804c1869740a4bfd99a9adcfb3c49)
    	'Attributes' table (fld-6b2e26f53e6c4f0fb7ebc14400b4f118)
    		- 'Key' text (fld-1ff8c9d03e5e48beac09bdf639c0b286)
    		- 'Value' text (fld-6a145374b8774cfca13fdc0c1756d00f)
    		- 'Date Created' date_created (fld-ff31511cb4f54ce1b9f7ba85a8c0f43f)
    	'Attributes Extractor Script' script (fld-134d8663f295429e8e671e4e445e16d2)
    	'Variant Data' table (fld-eb212e705eb34e9ea5cc4386ea7a9b1f)
    		- 'Date Created' date_created (fld-482c2129901640299867923ced44ea01)
    		- 'Value' text (fld-e4ce093c1c22416192eb80554272d6cd)
    		- 'Key' text (fld-ecc1b1ede8414912a63ec144012fa9e9)
    	'Features' table (fld-1c20f096120845d98c2be64d2102c135)
    		- 'Feature Name' text (fld-0a478f6fce164226afab62946a3cec96)
    		- 'Feature Type' text (fld-84bd72ca7f354f8db68d469c427c25d0)
    
    	=== 'Attachments and Relationships' section (fld-339f3e44f6f142ddb5ceb1df699f494d) ===
    	'File Attachment' file (fld-c28b98cb3d8a43f98ee65503b30a6658)
    	'Order Items' from_form (fld-4862767002cf4aadad853e78dffb2eed) manyToMany 'Order Items' (frm-7a809372942a4031ae4bdf014f69e99b)
    	'Gallery' from_form (fld-41cea237bfa44135a788d09b2a390019) manyToMany 'Gallery Items' (frm-1dd95cbe70cc490c972487920317620c)
    	'Purchases' form (fld-2dfc5804be564f17bcc3c66fd1080121) manyToMany 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    	'Shipments' form (fld-263993691f544158a16dd13fdf633562) manyToMany 'Shipments' (frm-ac823b8717fb428fa48b65b0efa4a2c3)
    
    	=== 'Images' section (fld-642fef453ecb4d32b74d2e34993da182) ===
    	'Image 02' photo (fld-28b749eeaff24492a730e427364ca683)
    	'Image 03' photo (fld-1f0ae66bce7e4b63981b244e40ce4366)
    	'Image 04' photo (fld-3cf1f20172104500af3070b96da2528e)
    	'Image 05' photo (fld-0a8930a83d1f41b68012178ffe54d2ab)
    
    	=== 'Linking Metadata' section (fld-fd8627a7114a431bb9199bdc2bd67ad8) ===
    	'Order Line Number' number (fld-da763fa0946d4be79039b4e828cf85f4)
    	'Purchase Key' calc (fld-8be9b2c2603f458f8349082237c41964)
    		Referenced Fields: 
    		 - Marketplace (fld-c163aba17ae64c4d93b5a53819a139dc)
    		 - Store Name (fld-3d98dc6cdcae4a88909c97c80dde7bfb)
    		 - Order ID (fld-e3e66a0f2e5c4df7b9496f65355e0bcf)
    	'Shipment Key' calc (fld-7652273e8d02496f8f8ebc6c46d93230)
    		Referenced Fields: 
    		 - Shipping Carrier (fld-12644a7a4ae24ed8a7926123832d3557)
    		 - Shipping Tracking Number (fld-6ea45a9c141343628940bfbcfa38ee90)
    	'Modified Age' calc (fld-9e5bc8ce982c4a468c4b66cad92ecc5b)
    		Referenced Fields: 
    		 - Date Modified (fld-59a06347614e48e8bf547a855b781582)
    	'Purchase Age' calc (fld-9675f0fb104847f0a9705da74bb8bd1a)
    		Referenced Fields: 
    		 - Purchase Date (fld-ccbd9a8f51d34246bebfb31aa4e397dd)
    	'UUID' calc (fld-13790925689a4a189aee77b2c4d0fcb6)
    	'Sample Calc' calc (fld-cf5f7b65e683481696a7e864ab39b3e5)
    		Referenced Fields: 
    		 - Title (fld-0d0edd2552ea461e929f806a4e5552b5)
    		 - Order Items::Title (frm-7a809372942a4031ae4bdf014f69e99b::fld-39ca9564ef2347ac93f933bc9a2316ac via fld-4862767002cf4aadad853e78dffb2eed)
    		 - Variant Data::Key (frm-efc0199a2b1543f79e722383014533b0::fld-ecc1b1ede8414912a63ec144012fa9e9 via fld-eb212e705eb34e9ea5cc4386ea7a9b1f)
    		 - Purchases::Purchase Key (frm-efc0199a2b1543f79e722383014533b0::fld-8be9b2c2603f458f8349082237c41964 via fld-2dfc5804be564f17bcc3c66fd1080121)
    	'Orders' from_form (fld-7bdce35a95dc42d596861eedf729eb73) join 'Orders' (frm-6c5adbc73d9f498c978b637c60d19561)
    			 ON Purchases.Purchase Key == Orders.Purchase Key
    	'Sync Toggle' check_mark (fld-b784d5a9b3bf435b93b71a20baa4d983)
    
    Orders: (frm-6c5adbc73d9f498c978b637c60d19561)
    	'Purchase Date' date (fld-bc2e4b152dee42ac9361539a6e37cb5d)
    	'Marketplace' text (fld-fa37906add2942c88bce3b500561c42d)
    	'Order ID' text (fld-8228040b4641449b96aabfaea15f1ac5)
    	'Store Name' text (fld-c153da2f9a504be4b6fee4b5b62a1c11)
    	'Store Name (Alt)' text (fld-9d12d614867b49d78ad1b9a5958d9bcd)
    	'URL' web_site (fld-fc8fb7f30fe4459495600e4d396160c2)
    	'URL Parser' script (fld-868cd41df6754bed94f90174262373a0)
    	'Shipping Cost' number (fld-288cfa093d164eb79f0432c722c71ba4)
    	'Sales Tax' number (fld-42664ebbbe98429c902b8669551d0d6e)
    	'Order Cost' number (fld-acdbf6132877436d8f86d12a7a732a13)
    	'Order Cost (Items)' script (fld-34223ce7a81d49af8fcf34b498348760)
    	'Vouchers' number (fld-3242366818524c3cb6ac65851a49a599)
    	'Total Cost' calc (fld-a4f4eff5a667421fa84fb319bb3f9f30)
    		Referenced Fields: 
    		 - Order Cost (fld-acdbf6132877436d8f86d12a7a732a13)
    		 - Shipping Cost (fld-288cfa093d164eb79f0432c722c71ba4)
    		 - Sales Tax (fld-42664ebbbe98429c902b8669551d0d6e)
    		 - Vouchers (fld-3242366818524c3cb6ac65851a49a599)
    	'Currency' text (fld-a069572060fe46daa4f151f7b4ff84cc)
    	'USD Total' number (fld-568f8cf940824f70bd12d2d5bf8091f2)
    	'Payment Method' text (fld-84341c7fc70f43f29bdc277a879a3d6f)
    	'Statement Entry' text (fld-f18af4bc1ed047f2a4820c6bfe507688)
    	'Note' note (fld-eb7bbf4f816844739549ae82b19ea8eb)
    	'Shipping Address' note (fld-d85b9118ea0346bea2b29c337c68bc60)
    	'Ship Date' date (fld-6ab700ccc11d418fbd27d8899d00c7a9)
    	'Delivery Date' date (fld-4b1c4180dc1b4bb08b32d16fa60cae66)
    	'Order Item' form (fld-9db0c7698499435ab6b18b7eb420e0ae) toMany 'Order Items' (frm-7a809372942a4031ae4bdf014f69e99b)
    	'Shipments' form (fld-db2fcdb4d79c466ea09671c47d2ae645) manyToMany 'Shipments' (frm-ac823b8717fb428fa48b65b0efa4a2c3)
    	'Purchases' form (fld-07c0ec05287a48c9a67b64d816007518) join 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    			 ON Orders.Purchase Key == Purchases.Purchase Key
    
    	=== 'Calcs' section (fld-41cdc6a954524c05b9ec9e04c878f150) ===
    	'Alternate Order ID' text (fld-e0cc0e4c813848d6bb1dbe7fb5574c4a)
    	'Alternate Order ID Autocomplete Script' script (fld-75daa7631d7d4a10821b7cdd1df43104)
    	'USD Autopopulate Script' script (fld-89d9508a06594cf7bc5f4409699b796d)
    	'Shipping/Delivery Autopropagate Script' script (fld-544b7acca8b64e98b78bef29cdc6ac2c)
    	'Purchase Key' calc (fld-3e49aaa5bc32429c8f0f0f234878356d)
    		Referenced Fields: 
    		 - Marketplace (fld-fa37906add2942c88bce3b500561c42d)
    		 - Store Name (fld-c153da2f9a504be4b6fee4b5b62a1c11)
    		 - Order ID (fld-8228040b4641449b96aabfaea15f1ac5)
    	'USD Total Calc' number (fld-a50be30e2a974dee84a68195ffac913f)
    	'Aggregate Shipping Tracking Numbers' script (fld-7e8c8aa428304e53b9a559b6e6651d94)
    	'AutoURL' script (fld-b658ac413ef04b298d57121cc1206f82)
    
    Order Items: (frm-7a809372942a4031ae4bdf014f69e99b)
    	'Title' text (fld-39ca9564ef2347ac93f933bc9a2316ac)
    	'Title (Native)' text (fld-ef385456de924ee2ade8db3fec9415c7)
    	'Transaction ID' text (fld-9330e89b024e40cc86f541dc4c3fe686)
    	'Price' number (fld-a2973999a60d4319baf0b4480d6f57a0)
    	'Quantity' number (fld-39379cdff743496f9a1ccbdc1ae56297)
    	'Line Number' number (fld-f95b68d488cb4b058bbf3de84e1a7c3b)
    	'Total Price' script (fld-a2339a503f3d458ebfc0f9e7aa831017)
    	'Note' note (fld-d0cfab9ec09d497294fbd8b5b52caf16)
    	'Note Parser' script (fld-f1a20232b9ab4286b790fa57c4c4b0cc)
    	'Details' form (fld-ac04de32d98242b88333977c89526fc1) manyToMany 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    	'Order' from_form (fld-c3a6725d7d9446da92bbb880ffe90a9e) toOne 'Orders' (frm-6c5adbc73d9f498c978b637c60d19561)
    	'Shipments' from_form (fld-0489f6c24c50466f9348313584893941) toOne 'Shipments' (frm-ac823b8717fb428fa48b65b0efa4a2c3)
    	'Gallery' from_form (fld-6ffd4369da0b418fb790a975f69a0ab2) manyToMany 'Gallery Items' (frm-1dd95cbe70cc490c972487920317620c)
    	'Default Values' script (fld-7c7222480794423a844685e6bd5954ab)
    	'Date Created' date_created (fld-6dcd45dd73a4463ca21378bf4ea48c69)
    	'Date Modified' date_modified (fld-b97807466ad044d0a646e06017db8ea1)
    
    Script Manager: (frm-a311565fe3614c5ca97a3942a2973450)
    	'Installed Version' calc (fld-c45a76a8b28b4546821f0a76d6076621) - calculation field missing formula!
    	'Source' calc (fld-6ecd7dbcad784799b651945616fc4e26) - calculation field missing formula!
    	'Enable Updates?' check_mark (fld-077d7d4c5619419abb25c7e513e61697)
    
    Shipments: (frm-ac823b8717fb428fa48b65b0efa4a2c3)
    	'Tracking Number' text (fld-c487390743c947969cbe661cff596855)
    	'Carrier' text (fld-0950c430cb0c41f79c51d43a544b366b)
    	'Tracking Details' script (fld-7a29242731d9451092c92d8586dbc94a)
    	'Alternate Tracking Numbers' table (fld-cf8718051bea4cc2aba0069ae76f32b7)
    		- 'Carrier' text (fld-193ef28f49c04c73affcfbba09001524)
    		- 'Tracking Number' text (fld-7342203d8f36415191bf8419fb6f70dc)
    		- 'Notes' text (fld-82a805c52d3c4408a775a3fc04bdc19f)
    		- 'Tracking URL' web_site (fld-de244f5ddb5d4f4ba86f218d7c0bf141)
    	'Tracking URL' web_site (fld-83e7a9bd104e495fb48de1da74b00c43)
    	'Tracking URL Autocomplete' script (fld-dddcdc15e1c44aa4a99bba6314dc7a07)
    	'Shipping Date' date (fld-1aa32f17e059424fb4e24bf894b34fdf)
    	'Received Date' date (fld-e3e3539ee04f4cc7971c7098c572104d)
    	'Unverified' check_mark (fld-abdb319b7db74fc39812a94778c433cc)
    	'Note' note (fld-b6352a3e22ca4a7d966cf4a216a7c135)
    	'ZIP Code' number (fld-4f73faa8937446a0a3b24e6dd4624d6b)
    
    	=== 'Join Fields' section (fld-42dce0fcedce4368b334ab72b765e7e3) ===
    	'Date Propagation' script (fld-f7aba3b5ddd6430cb8e9a211e0086c84)
    	'Order Item' form (fld-f3c8f85d6dd14c2f8199d050ad7fc5f9) toMany 'Order Items' (frm-7a809372942a4031ae4bdf014f69e99b)
    	'Purchases Join' form (fld-5c4a2d1aadad4005a82d424216d1bb7b) join 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    			 ON Shipments.Shipment Key == Purchases.Shipment Key
    	'Shipping Events' table (fld-1ed7b8bddb8a463fa10b94ac11d64ecd)
    		- 'Date / Time' date_time (fld-6d279f9411c8497d9f6dcd2d74c01ef6)
    		- 'Location' text (fld-93730ed5a3ab41749b972d17c8c6880f)
    		- 'Message' text (fld-c861230085ab4b46ac05feab59a5add0)
    	'Shipment Key' calc (fld-201444109af7460d831ce21a96087e13)
    		Referenced Fields: 
    		 - Carrier (fld-0950c430cb0c41f79c51d43a544b366b)
    		 - Tracking Number (fld-c487390743c947969cbe661cff596855)
    	'Date Created' date_created (fld-8b02c9de87d240dba0aa9b774a5deca1)
    	'Purchases' from_form (fld-691985f25f2c4ce8b36dcc112a3ae600) manyToMany 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    	'Orders' from_form (fld-6ee418159c264ff5bb1b5da1fde43e2f) manyToMany 'Orders' (frm-6c5adbc73d9f498c978b637c60d19561)
    
    Gallery Items: (frm-1dd95cbe70cc490c972487920317620c)
    	'Image' photo (fld-66620a6542a14b4eb3df98aa19f0afac)
    	'Title' text (fld-c4919a9d54c142b78eaf0fef3cc91e73)
    	'Keywords' text (fld-de6f53f4658f4321a77377f6bb9a736c)
    	'Source' web_site (fld-c32969738e4c4ab7947c53054c82bef8)
    	'Source Scraper Script' script (fld-0a45936b78e847fe8aeb2da089ac3fae)
    	'Purchases' form (fld-c5ae0e2263334e07ab558734ba6f4f9c) manyToMany 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    	'Order Items' form (fld-c352a2dfa2884fb7ab9f380a08860ba3) manyToMany 'Order Items' (frm-7a809372942a4031ae4bdf014f69e99b)
    	'Date Created' date_created (fld-721df5a648de40a194a40bb8ab7d1946)
    	'Date Modified' date_modified (fld-4655757bd1824f70ad42fc558776f65b)
    	'Notes' note (fld-f6ce1405bd7a435080c03f8b0598c9f5)
    	'File Attachment' file (fld-b2f3efd087fb4d5f853309ef79ab3d31)
    	'Metadata' table (fld-7ccfc47e23194d6b8856632dabb3097d)
    		- 'Value' text (fld-4bf84f891e544ba6a03c56d1978ef4b2)
    		- 'Date Created' date_created (fld-8369762f3c7b410ab7f5c92dd87f132c)
    		- 'Key' text (fld-d5e45b1c9a184aaeb26622a7eae3ca8f)
    	'Extended Metadata' text (fld-b8e7d09b55384e45a9922bf652e05f96)
    
    Desirable Acquisitions: (frm-20f8844810bb4884a22ab1a3c0e143a4)
    	'Name' text (fld-bdd887ce763243bc847afdf6f2549f52)
    	'Notes' note (fld-c3920264a1b54927831a8984de7ea984)
    	'State' text (fld-9cebaa1a64254c4ba4bd064eeeb72a81)
    	'Date Created' date_created (fld-361ec793242e40b38657d9563681dab9)
    	'Date Modified' date_modified (fld-6845c7dbbeaf4ac9915cee48b00c5f72)
    	'Photo' photo (fld-b9ad86e8707c460885002b828b8dadc1)
    	'Web Site' web_site (fld-e0b4c7a6bb82474297b38e2ccc1fe39a)
    	'Acquisition Samples' form (fld-2eb1061b9fce4dd5a5508896c22c3784) toMany 'Acquisition Samples' (frm-34193fbd729f498194bff2d11bec5de0)
    	'Purchases' form (fld-3314dab138a14046862da7dc3700e11c) manyToMany 'Purchases' (frm-efc0199a2b1543f79e722383014533b0)
    	'File Attachment' file (fld-0287b866efa0428d9dc417d7531b39c3)
    
    Acquisition Samples: (frm-34193fbd729f498194bff2d11bec5de0)
    	'Title' text (fld-e2f18890c0344e82a6486704ea65f527)
    	'Notes' note (fld-ad2c2752eefb4d4eb96220ff1b042ad9)
    	'Source' web_site (fld-25b14dc7565d40a1b58121554ba8a4aa)
    	'Price' number (fld-72464af6aea84a3d8e26a8c17f39738f)
    	'Pictures' photo (fld-265e6017684547fb8cb0a891a89e35c8)
    	'Desirable Acquisitions' from_form (fld-6b1b4faa00094613a1ce44c582393d36) toOne 'Desirable Acquisitions' (frm-20f8844810bb4884a22ab1a3c0e143a4)
    	'File Attachment' file (fld-c59caf13ff1941acbc700b281feb7a72)
    
    #36010
    Sam Moffatt
    Participant

    This is another one of my convenience functions that adds rows to a table if a given key/value pair are missing. This does mean that you can have duplicate ‘keys’ with different values and this is intentional. The use case is for picking up attributes from external sites like eBay or AliExpress that have this sort of attribute or variant data available to hand. This is another one in my ‘Script Manager’ form which I’m going to attach for reference as well. It includes the four modules I’ve posted for the logger, the currency conversion, setIfEmpty and this addToTableIfMissing function.

    // ========== addToTableIfMissing Start ========== //
    // NAME: addToTableIfMissing
    // VERSION: 1.0.1
    // CHANGELOG:
    //      1.0.1: Add support for specifying a custom record to use.
    
    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    
    /**
     * Add's a key/value pair to a table if and only if it's missing.
     *
     * If you have a key that exists already but with a different value,
     * then this will add another table row for 
     *
     * fieldId:			The field ID of the table field.
     * keyField:		The field ID of the key field in the table field.
     * key:				The value of the key field to check against.
     * valueField:		The field ID of the value field in the table field.
     * value:			The value of the value field to check against.
     *
     * return: Empty return value in all cases.
     */
    function addToTableIfMissing(fieldId, keyField, key, valueField, value, currentRecord)
    {
    	if (!currentRecord)
    	{
    		currentRecord = record;
    	}
    	logger.logMessage(<code>Adding to ${fieldId} with ${key} and ${value}</code>);
    
    	var table = currentRecord.getFieldValue(fieldId);
    	for (var index = 0, count = table.length; index < count; index++)
    	{
         	var targetKey = table[index].getFieldValue(keyField);
         	var targetValue = table[index].getFieldValue(valueField);
    
    		if (targetKey == key && targetValue == value)
    		{
    			logger.logMessage(<code>Found existing value for ${fieldId} with ${key} and ${value}</code>);
    			return;
    		}
    	}
    
    	var newRecord = currentRecord.addNewRecordToField(fieldId);
    	newRecord.setFieldValue(keyField, key);
    	newRecord.setFieldValue(valueField, value);
    	return;
    }
    // ========== addToTableIfMissing End ========== //
    

    Here’s a sample of one of the note parsers that I use to take key/value summary data and turn it into something mildly useful. Most of the heavy lifting is done by a PHP script that I run locally to process and extract the data, this script is just handling the response data:

    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    document.getFormNamed('Script Manager').runScriptNamed('setIfEmpty');
    document.getFormNamed('Script Manager').runScriptNamed('addToTableIfMissing');
    
    function noteParser()
    {
    	var note_id = 'fld-bf19d52c18cb4f5198df191ef7902e1b';
    	var notes = record.getFieldValue(note_id);
    	
    	if (!notes)
    	{
    		return "Notes field empty";
    	}
    
    	var result = Utils.postContentToUrlWithContentType(notes, "http://localhost/~pasamio/research/scrape/extract_note.php", "text/plain");
    
       if (!result)
       {
          return "no result returned from web service";
       }
       
    
    	if ("title" in result.fields)
    	{
    		setIfEmpty(record, 'fld-0d0edd2552ea461e929f806a4e5552b5', result.fields.title, null);
    	}
    
    	if ("price" in result.fields)
    	{
    		setIfEmpty(record, 'fld-08129d71ab0f4fa4a2749456281fca07', result.fields.price, null);
    	}
    
    	if ("brand" in result.fields)
    	{
    		setIfEmpty(record, 'fld-1e250019d7b249f282cc572814d3e71d', result.fields.brand, null);
    	}
    	
    	if ("itemkey" in result.fields)
    	{
    		setIfEmpty(record, 'fld-ae7379d699e9473aa2ab16a2a2f002d4', result.fields.itemkey, null);
    	}
    
    	if ("colour" in result.fields)
    	{
    		setIfEmpty(record, 'fld-a8626656cc90455ea9336dd2488d4aef', result.fields.colour, null);
    	}
    	
    	if ("category" in result.fields)
    	{
    		setIfEmpty(record, 'fld-6fdd09891a8c4d73be1b24aa07d077be', result.fields.category, null);
    	}
    	
    	var variant_data_id = 'fld-eb212e705eb34e9ea5cc4386ea7a9b1f';
    	var key_id = 'fld-ecc1b1ede8414912a63ec144012fa9e9';
    	var value_id = 'fld-e4ce093c1c22416192eb80554272d6cd';
    
    	if (result.data)
    	{
    		for(datum in result.data)
    		{
    			addToTableIfMissing(variant_data_id, key_id, datum, value_id, result.data[datum])
    		}
    	}
    
    	document.saveAllChanges();
    	
    	return result;
    }
    
    logger.consoleHeader('Note Parser', 'Purchases');
    var result = noteParser();
    logger.consoleFooter('Note Parser', 'Purchases');
    
    JSON.stringify(result);
    

    I quite often use JSON.stringify to take an object and turn it into JSON that is stored in the field. This helps with debugging and seeing the contents of the execution after it has run. This used to be more necessary before the console was added but is still useful to have a durable copy of the last execution.

    Attachments:
    You must be logged in to view attached files.
    #36007

    Topic: setIfEmpty Script

    in forum Script Talk
    Sam Moffatt
    Participant

    This is a script that will only set a field value if it is currently set to an empty value or is set to a specified default value. This is useful for blindly setting a value on a field without having to do the check work yourself.

    If you use my ‘Script Manager’ form, I call this one ‘setIfEmpty’ and you load it as:

    document.getFormNamed('Script Manager').runScriptNamed('setIfEmpty');

    // ========== setIfEmpty Start ========== //
    // NAME: setIfEmpty
    // VERSION: 1.0
    /**
     * Set a field if it is currently empty or matches the default value.
     *
     * target: 			The record to use (TFFormEntry object)
     * fieldId:			The field ID (e.g. <code>fld-hash</code>) to set.
     * value:			The value to set in the field.
     * defaultValue:	The default value of the field.
     *
     * return: boolean true if set or boolean false if unset.
     */
    function setIfEmpty(target, fieldId, value, defaultValue)
    {
    	var current = target.getFieldValue(fieldId);
    	if ((!current || current == defaultValue) && current != value)
    	{
    		console.log('setIfEmpty passed for ' + fieldId + ', setting to: ' + value);
    		target.setFieldValue(fieldId, value);
    		return true;
    	}
    	else
    	{
    		console.log('setIfEmpty failed for ' + fieldId + ', skipping.');
    		return false;
    	}
    }
    // ========== setIfEmpty End ========== //
    

    Simple example of how to use it:

    setIfEmpty(record, 'fld-39ca9564ef2347ac93f933bc9a2316ac', result.fields.title, null);
    setIfEmpty(record, 'fld-39379cdff743496f9a1ccbdc1ae56297', result.fields.quantity, 1);

    The first has a default of null (TapForms’ default default value) and the second has a default of 1 which obviously is a configured value for a number field.

    #36005
    Sam Moffatt
    Participant

    Every so often I buy something that isn’t directly in USD and want to have a quick way of converting it back to USD. I ended up using a free currency converter API which requires a simple registration to get an API key (replace the string PUT_YOUR_API_KEY_HERE with the API key they assign you). Apart from that it has a reasonably generous amount of requests (100 an hour).

    Here’s the script, intended to be saved as a form script named ‘Currency Converter’ in a form named ‘Script Manager’ similar to the logger module:

    // ========== convertCurrency Start ========== //
    // NAME: Convert Currency
    // VERSION: 1.1
    // CHANGES:
    //  1.1: Add options for different API, update to v7.
    
    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    
    /**
     * Convert from one currency to another using a free web serive.
     *
     * source_currency: 		The source currency to convert from (e.g. CAD).
     * destination_currency:	The destination currency to convert into (e.g. USD).
     * amount:					The amount in the source currency to convert into destination currency.
     *
     * return: float value of converted currecny or false on error.
     */
    function convertCurrency(source_currency, destination_currency, amount)
    {
    	var services = { "free" : "https://free.currconv.com", 
    						"prepaid": "https://prepaid.currconv.com",
    						"premium": "https://api.currconv.com"
    					};
    					
    	var apiKey = 'PUT_YOUR_API_KEY_HERE';
    	var currency_key = source_currency + "_" + destination_currency;
    	var url = `${services['free']}/api/v7/convert?compact=ultra&apiKey=${apiKey}&q=${currency_key}`;
    	
    	logger.logMessage(`Requesting from URL: ${url}`);
    
    	// Make the request.
    	var forex = Utils.getJsonFromUrl(url);
    			
    	// Check the response matches.
    	if (forex && forex[currency_key])
    	{
    		logger.logMessage(`Conversion for ${source_currency} to ${destination_currency} is ${forex[currency_key]}`);
    		return forex[currency_key] * amount;
    	}
    	else
    	{
    		logger.logMessage("Unknown response received from URL: " + JSON.stringify(forex));
    		return false;
    	}
    }
    // ========== convertCurrency End ========== //
    

    That one is simple: put in the currency you start with and the currency you want to land in and the amount. The API could do the amount calculation itself but I find it interesting to see what the raw value is and handle the multiplication in my own code.

    In my case this is then connected to a field script that looks at a total field and a currency field to populate a USD total field. It’s a little more complicated because I do some math to get the total (shipping fee, taxes and total cost).

    Simple example:

    document.getFormNamed('Script Manager').runScriptNamed('Currency Converter');
    convertCurrency('CAD', 'USD', '123.45');
    
    Sam Moffatt
    Participant

    When I moved the shipment tracking numbers out of the “Orders” form into their own dedicated form called “Shipments”, I ran into a problem: using TapForms’ built in barcode scanner would return the shipment record not the order record. To work around this, I use a script field to aggregate all of the tracking numbers together into the “Orders” record in a field creatively named “Aggregate Shipping Tracking Numbers”.

    This script iterates through child records and is based on the “child records loop” snippet that comes out of the box with TapForms. It uses the logger for fencing the output so that it’s easy to track down.

    It returns a space concatenated result and if you look in your console, you’ll see output like this:

    ==================================================================
    Start "Aggregate Shipping Tracking Numbers (Orders)" script execution at Sun Jul 21 2019 10:45:41 GMT-0700 (PDT)
    ==================================================================
    
    Sun Jul 21 2019 10:45:41 GMT-0700 (PDT)	Adding tracking number: EN012345678JP
    Sun Jul 21 2019 10:45:41 GMT-0700 (PDT)	Combined tracking numbers: EN012345678JP
    
    ==================================================================
    End "Aggregate Shipping Tracking Numbers (Orders)" script execution at Sun Jul 21 2019 10:45:41 GMT-0700 (PDT)
    ==================================================================
    

    Here’s the script, you’ll need the logger module I’ve mentioned previously.

    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    
    function recordsLoop() {
       var retval = [];
    	var shipments = record.getFieldValue('fld-db2fcdb4d79c466ea09671c47d2ae645');
    	for (var index = 0, count = shipments.length; index < count; index++){
         	var tracking_number = shipments[index].getFieldValue('fld-7a29242731d9451092c92d8586dbc94a');
         	logger.logMessage(<code>Adding tracking number: ${tracking_number}</code>);
    
    		if (tracking_number) {
    			retval.push(tracking_number);
    		}
    	}
    	return retval.join(' ');
    }
    
    logger.consoleHeader('Aggregate Shipping Tracking Numbers', 'Orders');
    result = recordsLoop();
    logger.logMessage('Combined tracking numbers: ' + result);
    logger.consoleFooter('Aggregate Shipping Tracking Numbers', 'Orders');
    result;
    
    #35991

    Topic: Logger Module

    in forum Script Talk
    Sam Moffatt
    Participant

    As I’ve built field scripts, one of the challenges ended up being figuring out which field is running at which time when you have multiple fields and potentially multiple forms. Below is a logger module that I use to help me keep track with timestamps and headers. You can import this script and a few others by using my “Script Manager” form.

    Here’s a sample output showing re-entrant behaviour (the script field triggered itself to run):

    ==================================================================
    Start "Shipping/Delivery Autopropagate (Orders)" script execution at Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)
    ==================================================================
    
    Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)	One shipment detected, validating shipment data
    Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)	shipping date set in shipment but not in order, updating order
    ==================================================================
    Start "Shipping/Delivery Autopropagate (Orders)" script execution at Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)
    ==================================================================
    
    Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)	One shipment detected, validating shipment data
    
    ==================================================================
    End "Shipping/Delivery Autopropagate (Orders)" script execution at Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)
    ==================================================================
    
    ==================================================================
    End "Shipping/Delivery Autopropagate (Orders)" script execution at Sun Jul 21 2019 10:22:46 GMT-0700 (PDT)
    ==================================================================
    

    Screenshot with less wrapping:

    Console screenshot

    There are two parts that I find useful, the first is the separators which look like this:

    logger.consoleHeader('Shipping/Delivery Autopropagate', 'Orders');
    var result = propagateDates();
    logger.consoleFooter('Shipping/Delivery Autopropagate', Orders');
    result;
    

    This creates the header and footer lines in the format you see in the example above. The other part is the logger lines:

    logger.logMessage("One shipment detected, validating shipment data");
    

    This then adds the timestamp and also stores the log messages temporarily.

    Because I don’t want to copy and paste this all of the time, I have a form called “Script Manager” where I create form scripts that I put in like this (creatively called “Logger”). This means that I can import this with a single line when I want to use it:

    document.getFormNamed('Script Manager').runScriptNamed('Logger');
    

    Here’s the module:

    {
    // ========== Logger Start ========== //
    // NAME: Logger
    // VERSION: 1.0.2
    /**
     * Logger module provides some extra utility functions for logging data.
     * This adds some useful functions for integrating with the console and
     *   for building script fields.
     */
    if (logger == undefined)
    
    var logger = (function() {
    	var logdata = "";
    	return {
    		/**
    		 * Log a message
    		 *
    		 * Takes a <code>message</code> and adds it to the internal <code>logdata</code> variable
    		 *   and also logs it to the console with a timestamp.
    		 */
    		logMessage: function(message)
    			{
    				logdata += message + "\r\n";
    				console.log(new Date() + '\t' + message)
    			},
    
    		/**
    		 * Log an error
    		 *
    		 * Takes a <code>message</code> and <code>error</code> object and then formats into an error
    		 *   via <code>logMessage</code>.
    		 */
    		logError: function(error)
    			{
    				this.logMessage(<code>Caught error: &quot;${error}&quot; at ${error.line}, ${error.column}</code>);
    			},
    
    		/**
    		 * Get the internal log buffer
    		 *
    		 * Returns the raw log buffer to output elsewhere.
    		 */
    		getLog: function()
    			{
    				return logdata;
    			},
    
    		/**
    		 * Clear the internal log buffer
    		 *
    		 * Resets the buffer to an empty string.
    		 */
    		clearLog: function()
    			{
    				logdata = "";
    			},
    
    		/**
    		 * Utility function to print a header when the script starts with optional form name
    		 */
    		consoleHeader: function(scriptName, formName = "")
    			{
    				var label = scriptName + (formName ? <code>(${formName})</code> : '');
    				console.log('==================================================================');
    				console.log('Start "' + label + '" script execution at ' + new Date());
    				console.log('==================================================================\n');
    			},
    
    		/**
    		 * Utility function to print a footer when the script ends with optional form name
    		 */
    		consoleFooter: function(scriptName, formName = "")
    			{
    				var label = scriptName + (formName ? <code>(${formName})</code> : '');
    				console.log('\n==================================================================');
    				console.log('End "' + label + '" script execution at ' + new Date());
    				console.log('==================================================================\n');
    			}
    	}
    })();
    }
    // ========== Logger End ========== //
    
    Attachments:
    You must be logged in to view attached files.
    Ian Heath
    Participant

    Is there a way to use the share/send-to option on iOS Safari to pass information to Tap Forms? What I’m thinking is some sort of bookmark manager functionality so I’d want to pass the URL and title into a predetermined database. Alternatively would this be possible via a Safari bookmark with some Javascript in it, like I’ve seen for other bookmarklet functionality in the past?

Viewing 15 results - 46 through 60 (of 64 total)
 
Apple, the Apple logo, iPad, iPhone, and iPod touch are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc.