@dan-uni/dan-any 0.9.8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +255 -242
- package/dist/index.min.js +260 -247
- package/dist/index.umd.min.js +306 -283
- package/dist/src/index.d.ts +18 -8
- package/dist/src/proto/gen/danuni_pb.d.ts +2 -2
- package/package.json +5 -5
- package/src/ass-gen/ass/dialogue.ts +4 -4
- package/src/index.ts +182 -132
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +4 -4
- package/src/proto/src/danuni.proto +1 -1
- package/src/utils/dm-gen.ts +16 -19
package/dist/index.js
CHANGED
|
@@ -60,11 +60,11 @@ __webpack_require__.d(dm_gen_namespaceObject, {
|
|
|
60
60
|
Pools: ()=>dm_gen_Pools,
|
|
61
61
|
UniDM: ()=>UniDM
|
|
62
62
|
});
|
|
63
|
-
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.
|
|
63
|
+
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.0","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
64
64
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
65
65
|
const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
|
|
66
66
|
const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
|
|
67
|
-
const file_danuni = /*@__PURE__*/ fileDesc("
|
|
67
|
+
const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
|
|
68
68
|
file_google_protobuf_timestamp
|
|
69
69
|
]);
|
|
70
70
|
const DanmakuReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_danuni, 2);
|
|
@@ -309,6 +309,7 @@ class UniDM {
|
|
|
309
309
|
return this.options.dmid(this);
|
|
310
310
|
}
|
|
311
311
|
isSameAs(dan, options) {
|
|
312
|
+
if (this === dan) return true;
|
|
312
313
|
if (4 === this.mode || 4 === dan.mode) return false;
|
|
313
314
|
if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
|
|
314
315
|
const isSame = (k)=>this[k] === dan[k];
|
|
@@ -322,26 +323,22 @@ class UniDM {
|
|
|
322
323
|
return checks;
|
|
323
324
|
}
|
|
324
325
|
minify() {
|
|
325
|
-
const def = UniDM
|
|
326
|
-
const dan = UniDM.create(this);
|
|
327
|
-
const shouldKeep = (key, value)=>{
|
|
328
|
-
if ('SOID' === key) return true;
|
|
329
|
-
if (null == value) return false;
|
|
330
|
-
if (value === def[key]) return false;
|
|
331
|
-
if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
|
|
332
|
-
if ('extraStr' === key && '{}' === value) return false;
|
|
333
|
-
return true;
|
|
334
|
-
};
|
|
326
|
+
const def = new UniDM();
|
|
335
327
|
const result = {
|
|
336
|
-
SOID:
|
|
328
|
+
SOID: this.SOID
|
|
337
329
|
};
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
330
|
+
if (this.progress !== def.progress) result.progress = this.progress;
|
|
331
|
+
if (this.mode !== def.mode) result.mode = this.mode;
|
|
332
|
+
if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
|
|
333
|
+
if (this.color !== def.color) result.color = this.color;
|
|
334
|
+
if (this.senderID !== def.senderID) result.senderID = this.senderID;
|
|
335
|
+
if (this.content !== def.content) result.content = this.content;
|
|
336
|
+
if (this.weight !== def.weight) result.weight = this.weight;
|
|
337
|
+
if (this.pool !== def.pool) result.pool = this.pool;
|
|
338
|
+
if (this.attr.length > 0) result.attr = this.attr;
|
|
339
|
+
if (void 0 !== this.platform) result.platform = this.platform;
|
|
340
|
+
if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
|
|
341
|
+
if (void 0 !== this.DMID) result.DMID = this.DMID;
|
|
345
342
|
return result;
|
|
346
343
|
}
|
|
347
344
|
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
@@ -893,46 +890,91 @@ class UniPool {
|
|
|
893
890
|
return fn(this);
|
|
894
891
|
}
|
|
895
892
|
get shared() {
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
893
|
+
if (0 === this.dans.length) return {};
|
|
894
|
+
const keys = [
|
|
895
|
+
'SOID',
|
|
896
|
+
'senderID',
|
|
897
|
+
'platform',
|
|
898
|
+
'pool',
|
|
899
|
+
'mode',
|
|
900
|
+
'color'
|
|
901
|
+
];
|
|
902
|
+
const result = {};
|
|
903
|
+
for (const key of keys){
|
|
904
|
+
const sharedVal = this.getShared(key);
|
|
905
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
906
|
+
}
|
|
907
|
+
return result;
|
|
905
908
|
}
|
|
906
909
|
getShared(key) {
|
|
907
|
-
|
|
908
|
-
|
|
910
|
+
if (0 === this.dans.length) return;
|
|
911
|
+
const firstVal = this.dans[0][key];
|
|
912
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
913
|
+
return firstVal;
|
|
909
914
|
}
|
|
910
915
|
getStat(key) {
|
|
911
|
-
const
|
|
912
|
-
const
|
|
913
|
-
const
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
count: 1
|
|
918
|
-
});
|
|
919
|
-
return stat;
|
|
920
|
-
}, default_stat);
|
|
921
|
-
return stats;
|
|
916
|
+
const statMap = new Map();
|
|
917
|
+
for (const dan of this.dans){
|
|
918
|
+
const val = dan[key];
|
|
919
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
920
|
+
}
|
|
921
|
+
return statMap;
|
|
922
922
|
}
|
|
923
923
|
getMost(key) {
|
|
924
|
-
|
|
924
|
+
const stats = this.getStat(key);
|
|
925
|
+
if (0 === stats.size) return {
|
|
926
|
+
val: void 0,
|
|
927
|
+
count: 0
|
|
928
|
+
};
|
|
929
|
+
let mostVal;
|
|
930
|
+
let maxCount = 0;
|
|
931
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
932
|
+
maxCount = count;
|
|
933
|
+
mostVal = val;
|
|
934
|
+
}
|
|
935
|
+
return {
|
|
936
|
+
val: mostVal,
|
|
937
|
+
count: maxCount
|
|
938
|
+
};
|
|
925
939
|
}
|
|
926
940
|
get most() {
|
|
941
|
+
const keys = [
|
|
942
|
+
'mode',
|
|
943
|
+
'fontsize',
|
|
944
|
+
'color',
|
|
945
|
+
'senderID',
|
|
946
|
+
'content',
|
|
947
|
+
'weight',
|
|
948
|
+
'pool',
|
|
949
|
+
'platform'
|
|
950
|
+
];
|
|
951
|
+
const statMaps = new Map();
|
|
952
|
+
for (const dan of this.dans)for (const key of keys){
|
|
953
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
954
|
+
const statMap = statMaps.get(key);
|
|
955
|
+
const val = dan[key];
|
|
956
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
957
|
+
}
|
|
958
|
+
const result = {};
|
|
959
|
+
for (const key of keys){
|
|
960
|
+
const statMap = statMaps.get(key);
|
|
961
|
+
let mostVal;
|
|
962
|
+
let maxCount = 0;
|
|
963
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
964
|
+
maxCount = count;
|
|
965
|
+
mostVal = val;
|
|
966
|
+
}
|
|
967
|
+
result[key] = mostVal;
|
|
968
|
+
}
|
|
927
969
|
return {
|
|
928
|
-
mode:
|
|
929
|
-
fontsize:
|
|
930
|
-
color:
|
|
931
|
-
senderID:
|
|
932
|
-
content:
|
|
933
|
-
weight:
|
|
934
|
-
pool:
|
|
935
|
-
platform:
|
|
970
|
+
mode: result.mode,
|
|
971
|
+
fontsize: result.fontsize,
|
|
972
|
+
color: result.color,
|
|
973
|
+
senderID: result.senderID,
|
|
974
|
+
content: result.content,
|
|
975
|
+
weight: result.weight,
|
|
976
|
+
pool: result.pool,
|
|
977
|
+
platform: result.platform
|
|
936
978
|
};
|
|
937
979
|
}
|
|
938
980
|
static create(options) {
|
|
@@ -960,7 +1002,7 @@ class UniPool {
|
|
|
960
1002
|
return this;
|
|
961
1003
|
}
|
|
962
1004
|
split(key) {
|
|
963
|
-
if (this.
|
|
1005
|
+
if (this.getShared(key)) return [
|
|
964
1006
|
this
|
|
965
1007
|
];
|
|
966
1008
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -982,44 +1024,27 @@ class UniPool {
|
|
|
982
1024
|
this.options.dedupe = false;
|
|
983
1025
|
}
|
|
984
1026
|
merge(lifetime = 0) {
|
|
985
|
-
if (!this.
|
|
1027
|
+
if (!this.getShared('SOID')) {
|
|
986
1028
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
987
1029
|
return this;
|
|
988
1030
|
}
|
|
989
1031
|
if (lifetime <= 0) return this;
|
|
990
|
-
const
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
'platform'
|
|
996
|
-
].map((k)=>danmaku[k]).join('|');
|
|
1032
|
+
const result = [];
|
|
1033
|
+
const cache = {};
|
|
1034
|
+
const mergeObj = {};
|
|
1035
|
+
for (const danmaku of this.dans){
|
|
1036
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
997
1037
|
const cached = cache[key];
|
|
998
|
-
|
|
999
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
1038
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
1000
1039
|
skipDanuniMerge: true
|
|
1001
1040
|
})) {
|
|
1002
|
-
|
|
1003
|
-
senders.
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
count: senders.length,
|
|
1008
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
1009
|
-
senders,
|
|
1010
|
-
taolu_count: senders.length,
|
|
1011
|
-
taolu_senders: senders
|
|
1012
|
-
};
|
|
1013
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
1041
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
1042
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
1043
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
1044
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
1045
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
1014
1046
|
cache[key] = danmaku;
|
|
1015
|
-
|
|
1016
|
-
return [
|
|
1017
|
-
result,
|
|
1018
|
-
cache,
|
|
1019
|
-
mergeObj
|
|
1020
|
-
];
|
|
1021
|
-
}
|
|
1022
|
-
{
|
|
1047
|
+
} else {
|
|
1023
1048
|
mergeObj[key] = {
|
|
1024
1049
|
count: 1,
|
|
1025
1050
|
duration: 0,
|
|
@@ -1032,55 +1057,31 @@ class UniPool {
|
|
|
1032
1057
|
]
|
|
1033
1058
|
};
|
|
1034
1059
|
cache[key] = danmaku;
|
|
1035
|
-
const extra = danmaku.extra;
|
|
1036
|
-
extra.danuni = extra.danuni || {};
|
|
1037
|
-
extra.danuni.merge = mergeObj[key];
|
|
1038
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
1039
1060
|
result.push(danmaku);
|
|
1040
|
-
return [
|
|
1041
|
-
result,
|
|
1042
|
-
cache,
|
|
1043
|
-
mergeObj
|
|
1044
|
-
];
|
|
1045
1061
|
}
|
|
1046
|
-
}
|
|
1047
|
-
|
|
1048
|
-
{}
|
|
1049
|
-
{}
|
|
1050
|
-
]);
|
|
1051
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
1052
|
-
result.forEach((danmaku, i)=>{
|
|
1053
|
-
const key = [
|
|
1054
|
-
'content',
|
|
1055
|
-
'mode',
|
|
1056
|
-
'platform',
|
|
1057
|
-
'pool'
|
|
1058
|
-
].map((k)=>danmaku[k]).join('|');
|
|
1059
|
-
const extra = result[i].extra;
|
|
1062
|
+
}
|
|
1063
|
+
for (const danmaku of result){
|
|
1064
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
1060
1065
|
const mergeData = mergeObj[key];
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
}
|
|
1067
|
-
});
|
|
1068
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
1069
|
-
const updatedExtra = {
|
|
1070
|
-
...extra
|
|
1071
|
-
};
|
|
1072
|
-
if (updatedExtra.danuni) {
|
|
1073
|
-
delete updatedExtra.danuni.merge;
|
|
1074
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
1075
|
-
}
|
|
1076
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
|
|
1077
|
-
} else {
|
|
1078
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
1079
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
1066
|
+
const extra = danmaku.extra;
|
|
1067
|
+
if (mergeData.count > 1) {
|
|
1068
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
1069
|
+
if (danmaku.attr) {
|
|
1070
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
1071
|
+
} else danmaku.attr = [
|
|
1080
1072
|
dm_gen_DMAttr.Protect
|
|
1081
1073
|
];
|
|
1074
|
+
extra.danuni = extra.danuni || {};
|
|
1075
|
+
extra.danuni.merge = mergeData;
|
|
1076
|
+
danmaku.extraStr = src_JSON.stringify(extra);
|
|
1077
|
+
} else {
|
|
1078
|
+
if (extra.danuni?.merge) {
|
|
1079
|
+
delete extra.danuni.merge;
|
|
1080
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
1081
|
+
}
|
|
1082
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
|
|
1082
1083
|
}
|
|
1083
|
-
}
|
|
1084
|
+
}
|
|
1084
1085
|
return new UniPool(result, this.options, this.info);
|
|
1085
1086
|
}
|
|
1086
1087
|
minify() {
|
|
@@ -1103,14 +1104,18 @@ class UniPool {
|
|
|
1103
1104
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
1104
1105
|
fmt: 'artplayer.json'
|
|
1105
1106
|
};
|
|
1106
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
1107
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
1107
1108
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
1108
1109
|
fmt: 'ddplay.json'
|
|
1109
1110
|
};
|
|
1110
|
-
else if (json
|
|
1111
|
+
else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
|
|
1111
1112
|
pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
1112
1113
|
fmt: 'dplayer.json'
|
|
1113
1114
|
};
|
|
1115
|
+
else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
|
|
1116
|
+
pool: this.fromBiliUp(json, options),
|
|
1117
|
+
fmt: 'bili.up.json'
|
|
1118
|
+
};
|
|
1114
1119
|
} catch {}
|
|
1115
1120
|
};
|
|
1116
1121
|
const parseStr = (file)=>{
|
|
@@ -1278,7 +1283,7 @@ class UniPool {
|
|
|
1278
1283
|
source: 'k-v',
|
|
1279
1284
|
danuni: {
|
|
1280
1285
|
...DanUniConvertTipTemplate,
|
|
1281
|
-
data: this.
|
|
1286
|
+
data: this.getShared('SOID')
|
|
1282
1287
|
},
|
|
1283
1288
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
1284
1289
|
}
|
|
@@ -1417,7 +1422,7 @@ class UniPool {
|
|
|
1417
1422
|
substyle: {}
|
|
1418
1423
|
};
|
|
1419
1424
|
const finalOptions = options ?? defaultOptions;
|
|
1420
|
-
const fn = this.
|
|
1425
|
+
const fn = this.getShared('SOID');
|
|
1421
1426
|
return generateASS(this, {
|
|
1422
1427
|
filename: fn,
|
|
1423
1428
|
title: fn,
|
|
@@ -1626,10 +1631,10 @@ const formatTime = (seconds)=>{
|
|
|
1626
1631
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
1627
1632
|
};
|
|
1628
1633
|
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
1629
|
-
const scrollCommand = ({ start, end, top })
|
|
1630
|
-
const fixCommand = ({ top, left })
|
|
1631
|
-
const colorCommand = (color)
|
|
1632
|
-
const borderColorCommand = (color)
|
|
1634
|
+
const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
|
|
1635
|
+
const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
|
|
1636
|
+
const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
|
|
1637
|
+
const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
|
|
1633
1638
|
const dialogue = (danmaku, config)=>{
|
|
1634
1639
|
const { fontSizeType, content, time } = danmaku;
|
|
1635
1640
|
const { scrollTime, fixTime } = config;
|
|
@@ -1894,46 +1899,91 @@ class src_UniPool {
|
|
|
1894
1899
|
return fn(this);
|
|
1895
1900
|
}
|
|
1896
1901
|
get shared() {
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1902
|
+
if (0 === this.dans.length) return {};
|
|
1903
|
+
const keys = [
|
|
1904
|
+
'SOID',
|
|
1905
|
+
'senderID',
|
|
1906
|
+
'platform',
|
|
1907
|
+
'pool',
|
|
1908
|
+
'mode',
|
|
1909
|
+
'color'
|
|
1910
|
+
];
|
|
1911
|
+
const result = {};
|
|
1912
|
+
for (const key of keys){
|
|
1913
|
+
const sharedVal = this.getShared(key);
|
|
1914
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
1915
|
+
}
|
|
1916
|
+
return result;
|
|
1906
1917
|
}
|
|
1907
1918
|
getShared(key) {
|
|
1908
|
-
|
|
1909
|
-
|
|
1919
|
+
if (0 === this.dans.length) return;
|
|
1920
|
+
const firstVal = this.dans[0][key];
|
|
1921
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
1922
|
+
return firstVal;
|
|
1910
1923
|
}
|
|
1911
1924
|
getStat(key) {
|
|
1912
|
-
const
|
|
1913
|
-
const
|
|
1914
|
-
const
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
count: 1
|
|
1919
|
-
});
|
|
1920
|
-
return stat;
|
|
1921
|
-
}, default_stat);
|
|
1922
|
-
return stats;
|
|
1925
|
+
const statMap = new Map();
|
|
1926
|
+
for (const dan of this.dans){
|
|
1927
|
+
const val = dan[key];
|
|
1928
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
1929
|
+
}
|
|
1930
|
+
return statMap;
|
|
1923
1931
|
}
|
|
1924
1932
|
getMost(key) {
|
|
1925
|
-
|
|
1933
|
+
const stats = this.getStat(key);
|
|
1934
|
+
if (0 === stats.size) return {
|
|
1935
|
+
val: void 0,
|
|
1936
|
+
count: 0
|
|
1937
|
+
};
|
|
1938
|
+
let mostVal;
|
|
1939
|
+
let maxCount = 0;
|
|
1940
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
1941
|
+
maxCount = count;
|
|
1942
|
+
mostVal = val;
|
|
1943
|
+
}
|
|
1944
|
+
return {
|
|
1945
|
+
val: mostVal,
|
|
1946
|
+
count: maxCount
|
|
1947
|
+
};
|
|
1926
1948
|
}
|
|
1927
1949
|
get most() {
|
|
1950
|
+
const keys = [
|
|
1951
|
+
'mode',
|
|
1952
|
+
'fontsize',
|
|
1953
|
+
'color',
|
|
1954
|
+
'senderID',
|
|
1955
|
+
'content',
|
|
1956
|
+
'weight',
|
|
1957
|
+
'pool',
|
|
1958
|
+
'platform'
|
|
1959
|
+
];
|
|
1960
|
+
const statMaps = new Map();
|
|
1961
|
+
for (const dan of this.dans)for (const key of keys){
|
|
1962
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
1963
|
+
const statMap = statMaps.get(key);
|
|
1964
|
+
const val = dan[key];
|
|
1965
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
1966
|
+
}
|
|
1967
|
+
const result = {};
|
|
1968
|
+
for (const key of keys){
|
|
1969
|
+
const statMap = statMaps.get(key);
|
|
1970
|
+
let mostVal;
|
|
1971
|
+
let maxCount = 0;
|
|
1972
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
1973
|
+
maxCount = count;
|
|
1974
|
+
mostVal = val;
|
|
1975
|
+
}
|
|
1976
|
+
result[key] = mostVal;
|
|
1977
|
+
}
|
|
1928
1978
|
return {
|
|
1929
|
-
mode:
|
|
1930
|
-
fontsize:
|
|
1931
|
-
color:
|
|
1932
|
-
senderID:
|
|
1933
|
-
content:
|
|
1934
|
-
weight:
|
|
1935
|
-
pool:
|
|
1936
|
-
platform:
|
|
1979
|
+
mode: result.mode,
|
|
1980
|
+
fontsize: result.fontsize,
|
|
1981
|
+
color: result.color,
|
|
1982
|
+
senderID: result.senderID,
|
|
1983
|
+
content: result.content,
|
|
1984
|
+
weight: result.weight,
|
|
1985
|
+
pool: result.pool,
|
|
1986
|
+
platform: result.platform
|
|
1937
1987
|
};
|
|
1938
1988
|
}
|
|
1939
1989
|
static create(options) {
|
|
@@ -1961,7 +2011,7 @@ class src_UniPool {
|
|
|
1961
2011
|
return this;
|
|
1962
2012
|
}
|
|
1963
2013
|
split(key) {
|
|
1964
|
-
if (this.
|
|
2014
|
+
if (this.getShared(key)) return [
|
|
1965
2015
|
this
|
|
1966
2016
|
];
|
|
1967
2017
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -1983,44 +2033,27 @@ class src_UniPool {
|
|
|
1983
2033
|
this.options.dedupe = false;
|
|
1984
2034
|
}
|
|
1985
2035
|
merge(lifetime = 0) {
|
|
1986
|
-
if (!this.
|
|
2036
|
+
if (!this.getShared('SOID')) {
|
|
1987
2037
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
1988
2038
|
return this;
|
|
1989
2039
|
}
|
|
1990
2040
|
if (lifetime <= 0) return this;
|
|
1991
|
-
const
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
'platform'
|
|
1997
|
-
].map((k)=>danmaku[k]).join('|');
|
|
2041
|
+
const result = [];
|
|
2042
|
+
const cache = {};
|
|
2043
|
+
const mergeObj = {};
|
|
2044
|
+
for (const danmaku of this.dans){
|
|
2045
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
1998
2046
|
const cached = cache[key];
|
|
1999
|
-
|
|
2000
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
2047
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
2001
2048
|
skipDanuniMerge: true
|
|
2002
2049
|
})) {
|
|
2003
|
-
|
|
2004
|
-
senders.
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
count: senders.length,
|
|
2009
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
2010
|
-
senders,
|
|
2011
|
-
taolu_count: senders.length,
|
|
2012
|
-
taolu_senders: senders
|
|
2013
|
-
};
|
|
2014
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
2050
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
2051
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
2052
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
2053
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
2054
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
2015
2055
|
cache[key] = danmaku;
|
|
2016
|
-
|
|
2017
|
-
return [
|
|
2018
|
-
result,
|
|
2019
|
-
cache,
|
|
2020
|
-
mergeObj
|
|
2021
|
-
];
|
|
2022
|
-
}
|
|
2023
|
-
{
|
|
2056
|
+
} else {
|
|
2024
2057
|
mergeObj[key] = {
|
|
2025
2058
|
count: 1,
|
|
2026
2059
|
duration: 0,
|
|
@@ -2033,55 +2066,31 @@ class src_UniPool {
|
|
|
2033
2066
|
]
|
|
2034
2067
|
};
|
|
2035
2068
|
cache[key] = danmaku;
|
|
2036
|
-
const extra = danmaku.extra;
|
|
2037
|
-
extra.danuni = extra.danuni || {};
|
|
2038
|
-
extra.danuni.merge = mergeObj[key];
|
|
2039
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
2040
2069
|
result.push(danmaku);
|
|
2041
|
-
return [
|
|
2042
|
-
result,
|
|
2043
|
-
cache,
|
|
2044
|
-
mergeObj
|
|
2045
|
-
];
|
|
2046
2070
|
}
|
|
2047
|
-
}
|
|
2048
|
-
|
|
2049
|
-
{}
|
|
2050
|
-
{}
|
|
2051
|
-
]);
|
|
2052
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
2053
|
-
result.forEach((danmaku, i)=>{
|
|
2054
|
-
const key = [
|
|
2055
|
-
'content',
|
|
2056
|
-
'mode',
|
|
2057
|
-
'platform',
|
|
2058
|
-
'pool'
|
|
2059
|
-
].map((k)=>danmaku[k]).join('|');
|
|
2060
|
-
const extra = result[i].extra;
|
|
2071
|
+
}
|
|
2072
|
+
for (const danmaku of result){
|
|
2073
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
2061
2074
|
const mergeData = mergeObj[key];
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
}
|
|
2068
|
-
});
|
|
2069
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
2070
|
-
const updatedExtra = {
|
|
2071
|
-
...extra
|
|
2072
|
-
};
|
|
2073
|
-
if (updatedExtra.danuni) {
|
|
2074
|
-
delete updatedExtra.danuni.merge;
|
|
2075
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
2076
|
-
}
|
|
2077
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
|
|
2078
|
-
} else {
|
|
2079
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
2080
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
2075
|
+
const extra = danmaku.extra;
|
|
2076
|
+
if (mergeData.count > 1) {
|
|
2077
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
2078
|
+
if (danmaku.attr) {
|
|
2079
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
2080
|
+
} else danmaku.attr = [
|
|
2081
2081
|
dm_gen_DMAttr.Protect
|
|
2082
2082
|
];
|
|
2083
|
+
extra.danuni = extra.danuni || {};
|
|
2084
|
+
extra.danuni.merge = mergeData;
|
|
2085
|
+
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
2086
|
+
} else {
|
|
2087
|
+
if (extra.danuni?.merge) {
|
|
2088
|
+
delete extra.danuni.merge;
|
|
2089
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
2090
|
+
}
|
|
2091
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON_0.stringify(extra) : void 0;
|
|
2083
2092
|
}
|
|
2084
|
-
}
|
|
2093
|
+
}
|
|
2085
2094
|
return new src_UniPool(result, this.options, this.info);
|
|
2086
2095
|
}
|
|
2087
2096
|
minify() {
|
|
@@ -2104,14 +2113,18 @@ class src_UniPool {
|
|
|
2104
2113
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
2105
2114
|
fmt: 'artplayer.json'
|
|
2106
2115
|
};
|
|
2107
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
2116
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
2108
2117
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
2109
2118
|
fmt: 'ddplay.json'
|
|
2110
2119
|
};
|
|
2111
|
-
else if (json
|
|
2120
|
+
else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
|
|
2112
2121
|
pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
2113
2122
|
fmt: 'dplayer.json'
|
|
2114
2123
|
};
|
|
2124
|
+
else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
|
|
2125
|
+
pool: this.fromBiliUp(json, options),
|
|
2126
|
+
fmt: 'bili.up.json'
|
|
2127
|
+
};
|
|
2115
2128
|
} catch {}
|
|
2116
2129
|
};
|
|
2117
2130
|
const parseStr = (file)=>{
|
|
@@ -2279,7 +2292,7 @@ class src_UniPool {
|
|
|
2279
2292
|
source: 'k-v',
|
|
2280
2293
|
danuni: {
|
|
2281
2294
|
...src_DanUniConvertTipTemplate,
|
|
2282
|
-
data: this.
|
|
2295
|
+
data: this.getShared('SOID')
|
|
2283
2296
|
},
|
|
2284
2297
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
2285
2298
|
}
|
|
@@ -2418,7 +2431,7 @@ class src_UniPool {
|
|
|
2418
2431
|
substyle: {}
|
|
2419
2432
|
};
|
|
2420
2433
|
const finalOptions = options ?? defaultOptions;
|
|
2421
|
-
const fn = this.
|
|
2434
|
+
const fn = this.getShared('SOID');
|
|
2422
2435
|
return generateASS(this, {
|
|
2423
2436
|
filename: fn,
|
|
2424
2437
|
title: fn,
|