strip html from description
This commit is contained in:
@@ -16,7 +16,7 @@ setup:
|
|||||||
--region us-east-1
|
--region us-east-1
|
||||||
awslocal ssm put-parameter \
|
awslocal ssm put-parameter \
|
||||||
--name /rss-nostr-lambda/last-run-time \
|
--name /rss-nostr-lambda/last-run-time \
|
||||||
--value "2023-11-24T00:00:00Z" \
|
--value "2023-11-23T14:46:56Z" \
|
||||||
--overwrite
|
--overwrite
|
||||||
rm handler.zip
|
rm handler.zip
|
||||||
|
|
||||||
@@ -25,7 +25,15 @@ invoke:
|
|||||||
--region us-east-1 \
|
--region us-east-1 \
|
||||||
--function-name rss-nostr-lambda \
|
--function-name rss-nostr-lambda \
|
||||||
--cli-binary-format raw-in-base64-out \
|
--cli-binary-format raw-in-base64-out \
|
||||||
--payload '{"dryRun":true,"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1wp68lflspznnmelmjh5ktflyv6c4ljf8xrlkey0w8yqr4305awcs8wyakj","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
--payload '{"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1eg458xl7d3eywld94rpfx8daa6h2hqfqxylmk43dz6ep8q388e2sfe4thg","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
||||||
|
response.json
|
||||||
|
|
||||||
|
invoke-dryrun:
|
||||||
|
awslocal lambda invoke \
|
||||||
|
--region us-east-1 \
|
||||||
|
--function-name rss-nostr-lambda \
|
||||||
|
--cli-binary-format raw-in-base64-out \
|
||||||
|
--payload '{"dryRun":true,"feedUrl":"https://nitter.1d4.us/culturaltutor/rss","nostrNsec":"nsec1eg458xl7d3eywld94rpfx8daa6h2hqfqxylmk43dz6ep8q388e2sfe4thg","lastRunTimeParam":"/rss-nostr-lambda/last-run-time"}' \
|
||||||
response.json
|
response.json
|
||||||
|
|
||||||
recreate:
|
recreate:
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ const toHexString = nsec => {
|
|||||||
}, '');
|
}, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const htmlToAscii = html => {
|
||||||
|
let ascii = html
|
||||||
|
ascii = ascii.replaceAll("<p>", "")
|
||||||
|
ascii = ascii.replaceAll("</p>", "")
|
||||||
|
ascii = ascii.replaceAll("<br>", "")
|
||||||
|
ascii = ascii.replaceAll("<img src=\"", "")
|
||||||
|
ascii = ascii.replaceAll("\" style=\"max-width:250px;\" />", "")
|
||||||
|
return ascii
|
||||||
|
}
|
||||||
|
|
||||||
export const handler = async (event) => {
|
export const handler = async (event) => {
|
||||||
const region = process.env.AWS_REGION || "us-east-1"
|
const region = process.env.AWS_REGION || "us-east-1"
|
||||||
@@ -39,19 +48,18 @@ export const handler = async (event) => {
|
|||||||
const ssmGetCommand = new GetParameterCommand(params);
|
const ssmGetCommand = new GetParameterCommand(params);
|
||||||
|
|
||||||
let since = new Date()
|
let since = new Date()
|
||||||
ssmClient.send(ssmGetCommand)
|
await ssmClient.send(ssmGetCommand)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
console.log("Using since date:", data.Parameter.Value)
|
|
||||||
since = data.Parameter.Value
|
since = data.Parameter.Value
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.error(err)
|
console.dir(err)
|
||||||
response.errors.push(err)
|
response.errors.push(err)
|
||||||
return response
|
return response
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
if (feed === "") {
|
if (feed === "") {
|
||||||
console.error("feedUrl was not set.")
|
console.dir("feedUrl was not set.")
|
||||||
return {
|
return {
|
||||||
statusCode: 400,
|
statusCode: 400,
|
||||||
body: "feedUrl must be provided in payload."
|
body: "feedUrl must be provided in payload."
|
||||||
@@ -59,54 +67,49 @@ export const handler = async (event) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const ndk = new NDK({
|
const ndk = new NDK({
|
||||||
signer: new NDKPrivateKeySigner(privkey),
|
|
||||||
explicitRelayUrls: [
|
explicitRelayUrls: [
|
||||||
"wss://nostr.mom",
|
"wss://nostr.mom",
|
||||||
"wss://nostr.snort.social",
|
"wss://nostr.snort.social",
|
||||||
"wss://nostr.lol"
|
"wss://nostr.lol"
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
const user = await ndk.signer.user()
|
|
||||||
|
|
||||||
for (let url of user.relayUrls) {
|
|
||||||
ndk.pool.relays.push(url)
|
|
||||||
}
|
|
||||||
|
|
||||||
await ndk.connect(6000).catch(err => {
|
await ndk.connect(6000).catch(err => {
|
||||||
console.error(err)
|
console.dir(err)
|
||||||
response.errors.push ("failed to connect to relay", err)
|
response.errors.push("failed to connect to relay", err)
|
||||||
})
|
})
|
||||||
|
|
||||||
let rss = await extract(feed)
|
const signer = new NDKPrivateKeySigner(privkey)
|
||||||
|
ndk.signer = signer
|
||||||
|
|
||||||
|
let rss = await extract(feed, { descriptionMaxLen: 0, normalization: false })
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.error(err.error);
|
console.dir(err);
|
||||||
return response
|
return response
|
||||||
})
|
})
|
||||||
|
|
||||||
let filtered = rss.entries.filter(item => moment(item.published).isAfter(since))
|
let filtered = rss.item.filter(item => moment(item.published).isAfter(since))
|
||||||
response.totalItems = filtered.length
|
response.totalItems = filtered.length
|
||||||
|
|
||||||
for (let item of filtered) {
|
for (let item of filtered) {
|
||||||
let ndkEvent = new NDKEvent(ndk, {
|
let ndkEvent = new NDKEvent(ndk, {
|
||||||
kind: 1,
|
kind: 1,
|
||||||
pubkey: user.hexpubkey,
|
pubkey: ndk.signer.user().hexpubkey,
|
||||||
content: `${item.description}\n${item.link}`,
|
content: htmlToAscii(item.description),
|
||||||
created_at: Math.floor(Date.now() / 1000),
|
created_at: Math.floor(Date.now() / 1000),
|
||||||
})
|
})
|
||||||
|
|
||||||
if (dryrun) {
|
if (dryrun) {
|
||||||
|
console.dir(ndkEvent)
|
||||||
response.successes++
|
response.successes++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
await ndkEvent.publish()
|
try {
|
||||||
.then(() => {
|
await ndkEvent.sign(ndk.signer)
|
||||||
|
const published = await ndkEvent.publish()
|
||||||
|
if (published) {
|
||||||
response.successes++
|
response.successes++
|
||||||
}).catch(err => {
|
|
||||||
console.error(err)
|
|
||||||
response.errors.push(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
params.Name = lastRunTimeParam
|
params.Name = lastRunTimeParam
|
||||||
params.Value = new Date().toISOString()
|
params.Value = new Date().toISOString()
|
||||||
@@ -114,12 +117,19 @@ export const handler = async (event) => {
|
|||||||
params.Overwrite = true
|
params.Overwrite = true
|
||||||
|
|
||||||
const ssmPutCommand = new PutParameterCommand(params)
|
const ssmPutCommand = new PutParameterCommand(params)
|
||||||
ssmClient.send(ssmPutCommand)
|
await ssmClient.send(ssmPutCommand)
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.error(err)
|
console.dir(err)
|
||||||
response.errors.push(err)
|
response.errors.push(err)
|
||||||
return response
|
return response
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.dir(e)
|
||||||
|
response.errors.push(e)
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|||||||
+60
-71
@@ -624,6 +624,28 @@
|
|||||||
"url": "https://paulmillr.com/funding/"
|
"url": "https://paulmillr.com/funding/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@noble/curves": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@noble/hashes": "1.3.1"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://paulmillr.com/funding/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@noble/curves/node_modules/@noble/hashes": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://paulmillr.com/funding/"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@noble/hashes": {
|
"node_modules/@noble/hashes": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
|
||||||
@@ -647,40 +669,23 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@nostr-dev-kit/ndk": {
|
"node_modules/@nostr-dev-kit/ndk": {
|
||||||
"version": "2.0.5",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.1.1.tgz",
|
||||||
"integrity": "sha512-EvVr43y+4N9lMSZIIe5V8jFWYlKTVkMyyJfbgRaDGCGiBZAm9iy0wcO2Yi+W57awOAlvr3mjT5fAwG9RDb6HSA==",
|
"integrity": "sha512-sMD4re3QVpSVMzoyvJAFiftPxJBXkhjRInrK5DcjhSkkPTlJhI+oiVXCpcvCJ3PHT5PilhDgKkg3LyOvv135UQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noble/hashes": "^1.3.1",
|
"@noble/hashes": "^1.3.1",
|
||||||
"@noble/secp256k1": "^2.0.0",
|
"@noble/secp256k1": "^2.0.0",
|
||||||
"@scure/base": "^1.1.1",
|
"@scure/base": "^1.1.1",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"eventemitter3": "^5.0.1",
|
|
||||||
"light-bolt11-decoder": "^3.0.0",
|
"light-bolt11-decoder": "^3.0.0",
|
||||||
"node-fetch": "^3.3.1",
|
"node-fetch": "^3.3.1",
|
||||||
"nostr-tools": "^1.15.0",
|
"nostr-tools": "^1.15.0",
|
||||||
|
"tseep": "^1.1.1",
|
||||||
"typescript-lru-cache": "^2.0.0",
|
"typescript-lru-cache": "^2.0.0",
|
||||||
"utf8-buffer": "^1.0.0",
|
"utf8-buffer": "^1.0.0",
|
||||||
"websocket-polyfill": "^0.0.3"
|
"websocket-polyfill": "^0.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@nostr-dev-kit/ndk/node_modules/node-fetch": {
|
|
||||||
"version": "3.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
|
||||||
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
|
||||||
"dependencies": {
|
|
||||||
"data-uri-to-buffer": "^4.0.0",
|
|
||||||
"fetch-blob": "^3.1.4",
|
|
||||||
"formdata-polyfill": "^4.0.10"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/node-fetch"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@scure/base": {
|
"node_modules/@scure/base": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
|
||||||
@@ -702,28 +707,6 @@
|
|||||||
"url": "https://paulmillr.com/funding/"
|
"url": "https://paulmillr.com/funding/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scure/bip32/node_modules/@noble/curves": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
|
||||||
"dependencies": {
|
|
||||||
"@noble/hashes": "1.3.1"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://paulmillr.com/funding/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@scure/bip32/node_modules/@noble/hashes": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
|
||||||
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://paulmillr.com/funding/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@scure/bip39": {
|
"node_modules/@scure/bip39": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
|
||||||
@@ -1291,6 +1274,25 @@
|
|||||||
"node-fetch": "^2.6.12"
|
"node-fetch": "^2.6.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cross-fetch/node_modules/node-fetch": {
|
||||||
|
"version": "2.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||||
|
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||||
|
"dependencies": {
|
||||||
|
"whatwg-url": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "4.x || >=6.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"encoding": "^0.1.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"encoding": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/d": {
|
"node_modules/d": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
||||||
@@ -1357,11 +1359,6 @@
|
|||||||
"ext": "^1.1.2"
|
"ext": "^1.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eventemitter3": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
|
|
||||||
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
|
|
||||||
},
|
|
||||||
"node_modules/ext": {
|
"node_modules/ext": {
|
||||||
"version": "1.7.0",
|
"version": "1.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
||||||
@@ -1505,22 +1502,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.7.0",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
||||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"whatwg-url": "^5.0.0"
|
"data-uri-to-buffer": "^4.0.0",
|
||||||
|
"fetch-blob": "^3.1.4",
|
||||||
|
"formdata-polyfill": "^4.0.10"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "4.x || >=6.0.0"
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"funding": {
|
||||||
"encoding": "^0.1.0"
|
"type": "opencollective",
|
||||||
},
|
"url": "https://opencollective.com/node-fetch"
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"encoding": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-gyp-build": {
|
"node_modules/node-gyp-build": {
|
||||||
@@ -1554,17 +1549,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/nostr-tools/node_modules/@noble/curves": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
|
||||||
"dependencies": {
|
|
||||||
"@noble/hashes": "1.3.1"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://paulmillr.com/funding/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/nostr-tools/node_modules/@noble/hashes": {
|
"node_modules/nostr-tools/node_modules/@noble/hashes": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||||
@@ -1597,6 +1581,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/tseep": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tseep/-/tseep-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-deBIcIlXUMlr3xaN0UEochqjU/zXGaZGPqHPd1rxo4w6DklBdRM6WQQtsk7bekIF+qY6QTeen3nE6OA7BxL9rg=="
|
||||||
|
},
|
||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||||
|
|||||||
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Generated
Vendored
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user