{"_id":"custom-error-instance","_rev":"437817","name":"custom-error-instance","description":"Create custom JavaScript errors that also match instanceof.","dist-tags":{"latest":"2.1.2"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"time":{"modified":"2021-08-05T06:23:05.000Z","created":"2016-01-12T23:35:22.717Z","2.1.2":"2020-04-27T15:00:11.860Z","2.1.1":"2016-01-21T18:29:30.625Z","2.1.0":"2016-01-21T18:27:57.026Z","2.0.2":"2016-01-20T22:36:43.114Z","2.0.1":"2016-01-20T20:08:52.566Z","2.0.0":"2016-01-20T20:04:47.264Z","1.1.1":"2016-01-13T23:39:45.957Z","1.1.0":"2016-01-13T23:38:30.498Z","1.0.0":"2016-01-12T23:35:22.717Z"},"users":{"gi60s":true},"author":{"name":"James Speirs"},"repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"versions":{"2.1.2":{"name":"custom-error-instance","version":"2.1.2","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{},"gitHead":"d3f7f509f901401650c1164b52bb75c1707850d8","_id":"custom-error-instance@2.1.2","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"shasum":"dbf463ce4f12567421cc99efd2dd3fa9845a917b","size":6670,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.1.2.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/custom-error-instance_2.1.2_1587999611656_0.6544276986659563"},"_hasShrinkwrap":false,"publish_time":1587999611860,"_cnpm_publish_time":1587999611860},"2.1.1":{"name":"custom-error-instance","version":"2.1.1","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{},"gitHead":"ad9f038b4a0b829e3eedd65c5a2e559039f3c4b2","_id":"custom-error-instance@2.1.1","scripts":{},"_shasum":"3cf6391487a6629a6247eb0ca0ce00081b7e361a","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"3cf6391487a6629a6247eb0ca0ce00081b7e361a","size":7781,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.1.1.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1453400970625,"_cnpm_publish_time":1453400970625,"_hasShrinkwrap":false},"2.1.0":{"name":"custom-error-instance","version":"2.1.0","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{},"gitHead":"b66ae81ed1ef6d829f196c6ce9daa0c994ab4d26","_id":"custom-error-instance@2.1.0","scripts":{},"_shasum":"30bf23a5b8cff46b9861f4bf2f3690b46284f6fd","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"30bf23a5b8cff46b9861f4bf2f3690b46284f6fd","size":7785,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.1.0.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1453400877026,"_cnpm_publish_time":1453400877026,"_hasShrinkwrap":false},"2.0.2":{"name":"custom-error-instance","version":"2.0.2","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{},"gitHead":"972d78c991f8cfb31de77eaa1431296df76ab88a","_id":"custom-error-instance@2.0.2","scripts":{},"_shasum":"07e79867370e021bfb2873bec30c2edfac8c21f9","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"07e79867370e021bfb2873bec30c2edfac8c21f9","size":6564,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.0.2.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1453329403114,"_cnpm_publish_time":1453329403114,"_hasShrinkwrap":false},"2.0.1":{"name":"custom-error-instance","version":"2.0.1","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{"object-schemata":"^1.0.0"},"gitHead":"650b9f42fb0e7d4c2a20a6623e00d835a08c4af9","_id":"custom-error-instance@2.0.1","scripts":{},"_shasum":"cced41a1ea32a6d59690e0e7c1fe9763109555cb","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"cced41a1ea32a6d59690e0e7c1fe9763109555cb","size":6898,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.0.1.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1453320532566,"_cnpm_publish_time":1453320532566,"_hasShrinkwrap":false},"2.0.0":{"name":"custom-error-instance","version":"2.0.0","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{"object-schemata":"^1.0.0"},"gitHead":"4de860e31dc79bf54fd6604b97378b1e8a1a3872","_id":"custom-error-instance@2.0.0","scripts":{},"_shasum":"319f037482816d7a7d446a9fce6700b10b051112","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"319f037482816d7a7d446a9fce6700b10b051112","size":6890,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-2.0.0.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1453320287264,"_cnpm_publish_time":1453320287264,"_hasShrinkwrap":false},"1.1.1":{"name":"custom-error-instance","version":"1.1.1","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{"object-schemata":"^1.0.0"},"gitHead":"c2e0154bc06ac8da8eb4e06b6a08a01334354ab4","_id":"custom-error-instance@1.1.1","scripts":{},"_shasum":"ee1c982d12a684bfed2ee99e802f9f417908c72b","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"ee1c982d12a684bfed2ee99e802f9f417908c72b","size":6703,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-1.1.1.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1452728385957,"_cnpm_publish_time":1452728385957,"_hasShrinkwrap":false},"1.1.0":{"name":"custom-error-instance","version":"1.1.0","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{"object-schemata":"^1.0.0"},"gitHead":"5016e494fa9f1091cc27abe97e915ed746edb9d9","_id":"custom-error-instance@1.1.0","scripts":{},"_shasum":"6baa0d3a845756c1c53f7d77d61e0ef99b11df8e","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"6baa0d3a845756c1c53f7d77d61e0ef99b11df8e","size":6693,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-1.1.0.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1452728310498,"_cnpm_publish_time":1452728310498,"_hasShrinkwrap":false},"1.0.0":{"name":"custom-error-instance","version":"1.0.0","description":"Create custom JavaScript errors that also match instanceof.","main":"index.js","repository":{"type":"git","url":"git+https://github.com/Gi60s/custom-error-instance.git"},"keywords":["error","custom","custom-error","instance","instanceof"],"author":{"name":"James Speirs"},"license":"ISC","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","devDependencies":{"chai":"^3.4.1"},"dependencies":{"object-schemata":"^1.0.0"},"gitHead":"30691459284f915dc2294abb2cc8835f79aef767","_id":"custom-error-instance@1.0.0","scripts":{},"_shasum":"bb06155a6ae34791b24118dd64260eebf11c5efc","_from":".","_npmVersion":"3.5.2","_nodeVersion":"4.1.2","_npmUser":{"name":"gi60s","email":"james.speirs@gmail.com"},"dist":{"shasum":"bb06155a6ae34791b24118dd64260eebf11c5efc","size":4793,"noattachment":false,"key":"/custom-error-instance/-/custom-error-instance-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/custom-error-instance/download/custom-error-instance-1.0.0.tgz"},"maintainers":[{"name":"gi60s","email":"james.speirs@gmail.com"}],"directories":{},"publish_time":1452641722717,"_cnpm_publish_time":1452641722717,"_hasShrinkwrap":false}},"readme":"# custom-error-instance\n\n## Why?\n\nErrors are thrown when your code enters a state of instability, but depending on the error you may want to handle it differently. This module provides a way for you to define distinctive errors so that you can respond to them accordingly. See the *practical example* section for an example.\n\n## About\n\nProduce custom JavaScript errors that:\n\n - Integrate seamlessly with NodeJS' existing Error implementation.\n - Extend the Error object without altering it.\n - Create an inheritance hierarchy of custom errors and sub custom errors.\n - Have instanceof types and instance constructor names.\n - Accept additional properties.\n - Produce custom error output.\n - Will produce a stack trace of the length you specify.\n - Plugable, create your own error instance generators.\n\n## Install\n\n```sh\nnpm install custom-error-instance\n```\n\n## Basic Example\n\n```js\nvar CustomError = require('custom-error-instance');\nvar e;\n\n// define a custom error with a default message\nvar Parent = CustomError('ParentError', { message: 'Parent error' });\n\n// define a custom error that inherits from the Parent custom error\nvar Child = CustomError('ChildError', Parent, { message: 'Child error' });\n\n// create an error instance that uses defaults\ne = Parent();\nconsole.log(e.toString());          // \"ParentError: Parent error\"\nconsole.log(e.message);             // \"Parent error\"\nconsole.log(e.name);                // \"ParentError\"\nconsole.log(e.constructor.name);    // \"ParentError\"\nconsole.log(e instanceof Parent);   // true\nconsole.log(e instanceof Error);    // true\n\n// create an error instance that overwrites the default message\ne = Parent('Hello');\nconsole.log(e.toString());          // \"ParentError: Hello\"\nconsole.log(e.message);             // \"Hello\"\nconsole.log(e.name);                // \"ParentError\"\nconsole.log(e.constructor.name);    // \"ParentError\"\nconsole.log(e instanceof Parent);   // true\nconsole.log(e instanceof Error);    // true\n\n// create an error instance that overwrites the default message and defines a code\ne = Parent({ message: 'Hello', code: 'XYZ' });\nconsole.log(e.toString());          // \"ParentError XYZ: Hello\"\nconsole.log(e.message);             // \"Hello\"\nconsole.log(e.name);                // \"ParentError\"\nconsole.log(e.constructor.name);    // \"ParentError\"\nconsole.log(e instanceof Parent);   // true\nconsole.log(e instanceof Error);    // true\n\n// create an error instance of the Child custom error\ne = Child();\nconsole.log(e.toString());          // \"ParentError: Child error\"\nconsole.log(e.message);             // \"Child error\"\nconsole.log(e.name);                // \"ChildError\"\nconsole.log(e.constructor.name);    // \"ChildError\"\nconsole.log(e instanceof Child);    // true\nconsole.log(e instanceof Parent);   // true\nconsole.log(e instanceof Error);    // true\n```\n\n## Practical Example\n\n```js\nvar CustomError = require('custom-error-instance');\nvar store = {};\n\nvar Err = CustomError('MapError');\nErr.inuse = CustomError(Err, { message: 'The specified key is already in use.', code: 'INUSE' });\n\nfunction add(key, value) {\n    if (Math.random() < .3) throw new Err('Random Error');\n    if (store.hasOwnProperty(key)) throw new Err.inuse();\n    store[key] = value;\n}\n\ntry {\n    add('x', 1);\n    add('x', 2);\n} catch (e) {\n    if (e instanceof Err.inuse) {\n        console.error(e.toString());        // \"MapError INUSE: The specified key is already in use.\"\n    } else if (e instanceof Err) {\n        console.error('Unexpected ' + e);   // \"Unexpected MapError: Random Error\"\n    } else {\n        throw e;\n    }\n}\n```\n\n## API\n\nThis module has just one function that is used to produce custom error constructors.\n\n#### CustomError ( [ name ] [, parent ] [, properties ] [, factory ] )\n\nCall this function to create a custom error constructor function.\n\n**Parameters**\n\n- **name** - an optional string that defines the name for the error. This name is also applied to the constructor name property. Defaults to `'Error'` or the name of the parent custom error.\n- **parent** - an optional constructor function to inherit from. This function must be the `Error` function or a custom error constructor. Defaults to `Error`.\n- **properties** - an optional object with properties and values that will be merged with any properties provided when an instance is created from this custom error constructor. Defaults to `{}`\n- **factory** - an optional function to call to modify the properties of the custom error instance. If not provided and this constructor's parent is `Error` then the root factory will be used.\n\n**Returns** a constructor function.\n\n## Constructor Function\n\nDefining a custom error returns a constructor function. You call the constructor to generate an `Error` instance.\n\n```js\nvar myErrConstructor = CustomError('MyErr', { message: 'Error occurred' });\nthrow new myErrConstructor();\n```\n\nThe constructor function takes two optional parameters:\n\n1. **message** - This can be a string to fill the message property with or it can be an object that defines properties. Any properties defined here will overwrite properties specified when the constructor was being created by the `CustomError` function.\n2. **config** - A configuration that can modify the behavior of the factory.\n\n## Factories\n\nA factory is used for modify the Error instance as it is being generated. By default the *root factory* will be applied to CustomError's that inherit directly from `Error`, but it is possible to specify the factory to call when you define a CustomError. When a factory is called, it is called with `this` being the `Error` or CustomError instance. The factory should modify `this` to make it into its desired state.\n\nWhen a factory function is called it receives these parameters:\n\n1. **properties** - The merged properties object (merging properties defined through CustomError inheritance with those provided when calling the constructor to create the instance).\n2. **configuration** - An object that contains instructions for the factories to know how to run.\n3. **factory** - An object with properties to call the factory functions defined at CustomError.factory. These functions, when called, will automatically scope the factory call to `this` and will automatically include the **factory** parameter as the third parameter.\n \n### CustomError.factory\n\nThis object contains predefined factories that you can use to modify errors to some common formats. You can add, remove, or modify the functions on this object to define your own factory store.\n\nHere are some of the defined factories that are already on the CustomError.factory object:\n\n#### CustomError.factory.expectReceive\n\nThis factory calls the root factory and then appends to the current message string details about what was expected and what was recieved. In the following example the message and code are defined as defaults when we define the constructor. When the `Error` instance is created we define what was expected and what was received. The result is a nice and descriptive error message.\n\n```js\nvar InvalidError = CustomError('InvalidError', { message: 'Invalid value.', code: 'EINVLD' }, CustomError.factory.expectReceive);\nvar e = new Err({ expected: 'a string', received: 5 });\nconsole.log(e.toString());         // \"InvalidError EINVLD: Invalid value. Expected a string. Received: 5\"\n```\n\n#### CustomError.factory.root\n\nNote: If a CustomError is being defined without specifying a factory and its parent is `Error` then the default root will be used. The root factory does the following:\n\n1) Copies properties and their values onto the instance.\n2) Generates a stack trace and stores it on the instance.\n3) Creates message getter and setter on the instance.\n4) Creates code getter and setter on the instance.\n\nThe configuration parameter for the factory takes the following properties:\n\n- **rootOnly** - Set this to false to allow the root factory to run on CustomErrors that are not at the root (inheriting directly from `Error`). Defaults to `true`.\n- **stackLength** - Specify the length of the stack trace for this error instance. Defaults to `10`.\n\n## Inheritance\n\nIf a constructor is generated with a parent specified then the child constructor will inherit the default properties of the parent and will merge those with any properties that it defines. If the child constructor defines a factory too, then the parent's factory will be run before running the child's factory.\n\n## Examples\n\n**Example 1: Common Usage**\n\n```js\nvar CustomError = require('custom-error-instance');\nvar MyErr = CustomError('MyError', { message: 'Default message' });\n\nconsole.log(new MyError().toString());                                      // \"MyError: Default Message\";\nconsole.log(new MyError('Oops').toString());                                // \"MyError: Oops\";\nconsole.log(new MyError({ message: 'Oops', code: 'EOOP' }).toString());     // \"MyError EOOP: Oops\"\n```\n\n**Example 2: Child Custom Error**\n\nChild custom errors inherit properties and the factories from their parent custom error.\n\n```js\nvar CustomError = require('custom-error-instance');\nvar MyErr = CustomError('MyError', { message: 'Parent message' });\nvar ChildError = CustomError('ChildError', MyErr, { message: 'Child message');\nvar e = new ChildError();\n\nconsole.log(e.message);                         // \"Child message\";\nconsole.log(e instanceof ChildError);           // true\nconsole.log(e instanceof MyErr);                // true, through inheritance\nconsole.log(e instanceof Error);                // true, through inheritance\nconsole.log(e.constructor.name);                // \"ChildError\"\n```\n\n**Example 3: Default Properties**\n\n```js\nvar CustomError = require('custom-error-instance');\nvar MyError = CustomError('MyError', { code: 'EMY', foo: 'bar' });\n\nvar e = new MyError('Oops');\nconsole.log(e.message);         // \"Oops\"\nconsole.log(e.code);            // 'EMY'\nconsole.log(e.foo);             // \"bar\"\n```\n\n**Example 4: Overwrite Default Properties**\n\n```js\nvar CustomError = require('custom-error-instance');\nvar MyError = CustomError('MyError', { code: 'EMY', foo: 'bar' });\n\nvar e = new MyError({ message: 'Oops', code: 'FOO' });\nconsole.log(e.message);                             // \"Oops\"\nconsole.log(e.code);                                // 'FOO'\nconsole.log(e.foo);                                 // \"bar\"\n```\n\n**Example 5: Custom Factory**\n\nEvery factory receives three parameters: 1) the properties object, 2) a configuration that should be used to modify the behavior of the factory, and 3) an object with properties to call the factories defined at CustomError.factory. If a custom error inherits from another custom error then all factories in the inheritance chain are called, starting at the topmost parent. The factory function is called with the scope of the error instance.\n\n```js\nvar CustomError = require('custom-error-instance');\nvar MyError = CustomError('MyError', function(properties, config, factory) {\n    factory.root(properties, config);\n    this.properties = properties;\n});\nvar e = new MyError('Oops');\nconsole.log(e.properties.message);         // \"Oops\"\n```","_attachments":{},"homepage":"https://github.com/Gi60s/custom-error-instance#readme","bugs":{"url":"https://github.com/Gi60s/custom-error-instance/issues"},"license":"ISC"}