angular-three-soba 2.0.0-beta.40 → 2.0.0-beta.41
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.
|
@@ -83,7 +83,7 @@ export class NgtsHtmlWrapper {
|
|
|
83
83
|
this.htmlInputs = injectNgtsHtmlInputs();
|
|
84
84
|
this.store = injectNgtStore();
|
|
85
85
|
this.gl = this.store.select('gl');
|
|
86
|
-
this.connected = this.store.select('events', 'connected'
|
|
86
|
+
this.connected = this.store.select('events', 'connected');
|
|
87
87
|
this.viewport = this.store.select('viewport');
|
|
88
88
|
this.scene = this.store.select('scene');
|
|
89
89
|
this.camera = this.store.select('camera');
|
|
@@ -475,4 +475,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
|
|
|
475
475
|
type: ViewChild,
|
|
476
476
|
args: ['renderAnchor', { read: ViewContainerRef }]
|
|
477
477
|
}] } });
|
|
478
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2h0bWwvaHRtbC13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUU5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUUvQixNQUFNLFVBQVUsd0JBQXdCLENBQ3ZDLEVBQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLElBQXVDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJ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LEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFWCxRQUFRO3NCQUF6QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDRSxRQUFRO3NCQUF6QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDdUIsWUFBWTtzQkFBbEUsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEVtYmVkZGVkVmlld1JlZixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NvbnRhaW5lclJlZixcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSFRNTCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RTdG9yZSwgaXMsIHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RzSHRtbElucHV0cyB9IGZyb20gJy4vaHRtbCc7XG5cbmNvbnN0IHYxID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHYyID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHYzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbihcblx0ZWw6IFRIUkVFLk9iamVjdDNELFxuXHRjYW1lcmE6IFRIUkVFLkNhbWVyYSxcblx0c2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuKSB7XG5cdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdG9iamVjdFBvcy5wcm9qZWN0KGNhbWVyYSk7XG5cdGNvbnN0IHdpZHRoSGFsZiA9IHNpemUud2lkdGggLyAyO1xuXHRjb25zdCBoZWlnaHRIYWxmID0gc2l6ZS5oZWlnaHQgLyAyO1xuXHRyZXR1cm4gW29iamVjdFBvcy54ICogd2lkdGhIYWxmICsgd2lkdGhIYWxmLCAtKG9iamVjdFBvcy55ICogaGVpZ2h0SGFsZikgKyBoZWlnaHRIYWxmXTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RCZWhpbmRDYW1lcmEoZWw6IFRIUkVFLk9iamVjdDNELCBjYW1lcmE6IFRIUkVFLkNhbWVyYSkge1xuXHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRjb25zdCBjYW1lcmFQb3MgPSB2Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0Y29uc3QgZGVsdGFDYW1PYmogPSBvYmplY3RQb3Muc3ViKGNhbWVyYVBvcyk7XG5cdGNvbnN0IGNhbURpciA9IGNhbWVyYS5nZXRXb3JsZERpcmVjdGlvbih2Myk7XG5cdHJldHVybiBkZWx0YUNhbU9iai5hbmdsZVRvKGNhbURpcikgPiBNYXRoLlBJIC8gMjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RWaXNpYmxlKFxuXHRlbDogVEhSRUUuT2JqZWN0M0QsXG5cdGNhbWVyYTogVEhSRUUuQ2FtZXJhLFxuXHRyYXljYXN0ZXI6IFRIUkVFLlJheWNhc3Rlcixcblx0b2NjbHVkZTogVEhSRUUuT2JqZWN0M0RbXSxcbikge1xuXHRjb25zdCBlbFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdGNvbnN0IHNjcmVlblBvcyA9IGVsUG9zLmNsb25lKCk7XG5cdHNjcmVlblBvcy5wcm9qZWN0KGNhbWVyYSk7XG5cdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHNjcmVlblBvcyBhcyBhbnksIGNhbWVyYSk7XG5cdGNvbnN0IGludGVyc2VjdHMgPSByYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyhvY2NsdWRlLCB0cnVlKTtcblx0aWYgKGludGVyc2VjdHMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRGlzdGFuY2UgPSBpbnRlcnNlY3RzWzBdLmRpc3RhbmNlO1xuXHRcdGNvbnN0IHBvaW50RGlzdGFuY2UgPSBlbFBvcy5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKTtcblx0XHRyZXR1cm4gcG9pbnREaXN0YW5jZSA8IGludGVyc2VjdGlvbkRpc3RhbmNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmplY3RTY2FsZShlbDogVEhSRUUuT2JqZWN0M0QsIGNhbWVyYTogVEhSRUUuQ2FtZXJhKSB7XG5cdGlmIChjYW1lcmEgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEpIHtcblx0XHRyZXR1cm4gY2FtZXJhLnpvb207XG5cdH0gZWxzZSBpZiAoY2FtZXJhIGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpIHtcblx0XHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IGNhbWVyYVBvcyA9IHYyLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IHZGT1YgPSAoY2FtZXJhLmZvdiAqIE1hdGguUEkpIC8gMTgwO1xuXHRcdGNvbnN0IGRpc3QgPSBvYmplY3RQb3MuZGlzdGFuY2VUbyhjYW1lcmFQb3MpO1xuXHRcdGNvbnN0IHNjYWxlRk9WID0gMiAqIE1hdGgudGFuKHZGT1YgLyAyKSAqIGRpc3Q7XG5cdFx0cmV0dXJuIDEgLyBzY2FsZUZPVjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufVxuXG5mdW5jdGlvbiBvYmplY3RaSW5kZXgoZWw6IFRIUkVFLk9iamVjdDNELCBjYW1lcmE6IFRIUkVFLkNhbWVyYSwgekluZGV4UmFuZ2U6IEFycmF5PG51bWJlcj4pIHtcblx0aWYgKGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhIHx8IGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xuXHRcdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgY2FtZXJhUG9zID0gdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgZGlzdCA9IG9iamVjdFBvcy5kaXN0YW5jZVRvKGNhbWVyYVBvcyk7XG5cdFx0Y29uc3QgQSA9ICh6SW5kZXhSYW5nZVsxXSAtIHpJbmRleFJhbmdlWzBdKSAvIChjYW1lcmEuZmFyIC0gY2FtZXJhLm5lYXIpO1xuXHRcdGNvbnN0IEIgPSB6SW5kZXhSYW5nZVsxXSAtIEEgKiBjYW1lcmEuZmFyO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKEEgKiBkaXN0ICsgQik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZXBzaWxvbiA9ICh2YWx1ZTogbnVtYmVyKSA9PiAoTWF0aC5hYnModmFsdWUpIDwgMWUtMTAgPyAwIDogdmFsdWUpO1xuXG5mdW5jdGlvbiBnZXRDU1NNYXRyaXgobWF0cml4OiBUSFJFRS5NYXRyaXg0LCBtdWx0aXBsaWVyczogbnVtYmVyW10sIHByZXBlbmQgPSAnJykge1xuXHRsZXQgbWF0cml4M2QgPSAnbWF0cml4M2QoJztcblx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IDE2OyBpKyspIHtcblx0XHRtYXRyaXgzZCArPSBlcHNpbG9uKG11bHRpcGxpZXJzW2ldICogbWF0cml4LmVsZW1lbnRzW2ldKSArIChpICE9PSAxNSA/ICcsJyA6ICcpJyk7XG5cdH1cblx0cmV0dXJuIHByZXBlbmQgKyBtYXRyaXgzZDtcbn1cblxuY29uc3QgZ2V0Q2FtZXJhQ1NTTWF0cml4ID0gKChtdWx0aXBsaWVyczogbnVtYmVyW10pID0+IHtcblx0cmV0dXJuIChtYXRyaXg6IFRIUkVFLk1hdHJpeDQpID0+IGdldENTU01hdHJpeChtYXRyaXgsIG11bHRpcGxpZXJzKTtcbn0pKFsxLCAtMSwgMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxLCAxLCAtMSwgMSwgMV0pO1xuXG5jb25zdCBnZXRPYmplY3RDU1NNYXRyaXggPSAoKHNjYWxlTXVsdGlwbGllcnM6IChuOiBudW1iZXIpID0+IG51bWJlcltdKSA9PiB7XG5cdHJldHVybiAobWF0cml4OiBUSFJFRS5NYXRyaXg0LCBmYWN0b3I6IG51bWJlcikgPT5cblx0XHRnZXRDU1NNYXRyaXgobWF0cml4LCBzY2FsZU11bHRpcGxpZXJzKGZhY3RvciksICd0cmFuc2xhdGUoLTUwJSwtNTAlKScpO1xufSkoKGY6IG51bWJlcikgPT4gWzEgLyBmLCAxIC8gZiwgMSAvIGYsIDEsIC0xIC8gZiwgLTEgLyBmLCAtMSAvIGYsIC0xLCAxIC8gZiwgMSAvIGYsIDEgLyBmLCAxLCAxLCAxLCAxLCAxXSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtaHRtbC13cmFwcGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctdGVtcGxhdGUgI3RyYW5zZm9ybVRlbXBsYXRlPlxuXHRcdFx0PGRpdiAjdHJhbnNmb3JtZWRPdXRlckRpdiBbc3R5bGVdPVwic3R5bGVzKClcIj5cblx0XHRcdFx0PGRpdiAjdHJhbnNmb3JtZWRJbm5lckRpdiBbc3R5bGVdPVwidHJhbnNmb3JtSW5uZXJTdHlsZXMoKVwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdHlsZXM6IGh0bWxJbnB1dHMuc3R5bGUgfVwiIC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblxuXHRcdDxuZy10ZW1wbGF0ZSAjcmVuZGVyVGVtcGxhdGUgbGV0LXJlbmRlcmVkU3R5bGVzPVwic3R5bGVzXCI+XG5cdFx0XHQ8ZGl2ICNyZW5kZXJlZERpdiBbY2xhc3NdPVwiaHRtbElucHV0cy5yZW5kZXJlZERpdkNsYXNzKClcIiBbc3R5bGVdPVwicmVuZGVyZWRTdHlsZXMoKVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICNyZW5kZXJBbmNob3IgLz5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0h0bWxXcmFwcGVyIHtcblx0c3RhdGljIFtIVE1MXSA9IHRydWU7XG5cblx0aHRtbElucHV0cyA9IGluamVjdE5ndHNIdG1sSW5wdXRzKCk7XG5cblx0QFZpZXdDaGlsZCgndHJhbnNmb3JtVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmFuc2Zvcm1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXHRAVmlld0NoaWxkKCdyZW5kZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHJlbmRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cblx0QFZpZXdDaGlsZCgndHJhbnNmb3JtZWRPdXRlckRpdicpIG91dGVyRGl2PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoJ3RyYW5zZm9ybWVkSW5uZXJEaXYnKSBpbm5lckRpdj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXHRAVmlld0NoaWxkKCdyZW5kZXJBbmNob3InLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcmVuZGVyQW5jaG9yPzogVmlld0NvbnRhaW5lclJlZjtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXHRwcml2YXRlIGNvbm5lY3RlZCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdldmVudHMnLCAnY29ubmVjdGVkJywgeyBlcXVhbDogT2JqZWN0LmlzIH0pO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cdHByaXZhdGUgc2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdHByaXZhdGUgcmF5Y2FzdGVyID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3JheWNhc3RlcicpO1xuXG5cdHByaXZhdGUgaXNNZXNoU2l6ZVNldCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXHRwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuXHRwcml2YXRlIHBvcnRhbEVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcG9ydGFsID0gdGhpcy5odG1sSW5wdXRzLnBvcnRhbCgpO1xuXHRcdGlmICghcG9ydGFsKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gaXMucmVmKHBvcnRhbCkgPyBwb3J0YWwubmF0aXZlRWxlbWVudCA6IHBvcnRhbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBlbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaHRtbElucHV0cy5hcygpKSBhcyBIVE1MRWxlbWVudCk7XG5cdHByaXZhdGUgdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHBvcnRhbEVsZW1lbnQgPSB0aGlzLnBvcnRhbEVsZW1lbnQoKTtcblx0XHRpZiAocG9ydGFsRWxlbWVudCkgcmV0dXJuIHBvcnRhbEVsZW1lbnQ7XG5cdFx0Y29uc3QgY29ubmVjdGVkID0gdGhpcy5jb25uZWN0ZWQoKTtcblx0XHRpZiAoY29ubmVjdGVkKSByZXR1cm4gY29ubmVjdGVkIGFzIEhUTUxFbGVtZW50O1xuXHRcdHJldHVybiB0aGlzLmdsKCkuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50ITtcblx0fSk7XG5cblx0c3R5bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdHlsZSwgY2VudGVyLCB0cmFuc2Zvcm0sIHNpemUsIGZ1bGxzY3JlZW5dID0gW1xuXHRcdFx0dGhpcy5odG1sSW5wdXRzLnN0eWxlKCksXG5cdFx0XHR0aGlzLmh0bWxJbnB1dHMuY2VudGVyKCksXG5cdFx0XHR0aGlzLmh0bWxJbnB1dHMudHJhbnNmb3JtKCksXG5cdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdHRoaXMuaHRtbElucHV0cy5mdWxsc2NyZWVuKCksXG5cdFx0XTtcblxuXHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdHdpZHRoOiBzaXplLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuXHRcdFx0XHR0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcblx0XHRcdFx0cG9pbnRlckV2ZW50czogJ25vbmUnLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdFx0XHR0cmFuc2Zvcm06IGNlbnRlciA/ICd0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCknIDogJ25vbmUnLFxuXHRcdFx0Li4uKGZ1bGxzY3JlZW4gJiYge1xuXHRcdFx0XHR0b3A6IC1zaXplLmhlaWdodCAvIDIsXG5cdFx0XHRcdGxlZnQ6IC1zaXplLndpZHRoIC8gMixcblx0XHRcdFx0d2lkdGg6IHNpemUud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogc2l6ZS5oZWlnaHQsXG5cdFx0XHR9KSxcblx0XHRcdC4uLihzdHlsZSB8fCB7fSksXG5cdFx0fTtcblx0fSk7XG5cdHRyYW5zZm9ybUlubmVyU3R5bGVzID0gY29tcHV0ZWQoKCkgPT4gKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHBvaW50ZXJFdmVudHM6IHRoaXMuaHRtbElucHV0cy5wb2ludGVyRXZlbnRzKCkgfSkpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0Q2FudmFzRWxlbWVudFN0eWxlKCk7XG5cdFx0dGhpcy5hcHBlbmRFbGVtZW50KCk7XG5cdFx0dGhpcy5zZXRXcmFwcGVyQ2xhc3MoKTtcblx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdHRoaXMuYmVmb3JlUmVuZGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldENhbnZhc0VsZW1lbnRTdHlsZSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZWwgPSB1bnRyYWNrZWQodGhpcy5nbCkuZG9tRWxlbWVudCE7XG5cdFx0XHRjb25zdCBvY2NsdWRlID0gdGhpcy5odG1sSW5wdXRzLm9jY2x1ZGUoKTtcblx0XHRcdGlmIChvY2NsdWRlICYmIG9jY2x1ZGUgPT09ICdibGVuZGluZycpIHtcblx0XHRcdFx0ZWwuc3R5bGUuekluZGV4ID0gYCR7TWF0aC5mbG9vcih1bnRyYWNrZWQodGhpcy5odG1sSW5wdXRzLnpJbmRleFJhbmdlKVswXSAvIDIpfWA7XG5cdFx0XHRcdGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0XHRcdFx0ZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsLnN0eWxlLnpJbmRleCA9IG51bGwhO1xuXHRcdFx0XHRlbC5zdHlsZS5wb3NpdGlvbiA9IG51bGwhO1xuXHRcdFx0XHRlbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gbnVsbCE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFwcGVuZEVsZW1lbnQoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtncm91cCwgZWxlbWVudF0gPSBbdGhpcy5odG1sSW5wdXRzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudCgpXTtcblx0XHRcdGlmIChncm91cCAmJiBlbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IFt0YXJnZXQsIHRyYW5zZm9ybSwgc2NlbmUsIGNhbWVyYSwgc2l6ZSwgY2FsY3VsYXRlUG9zaXRpb24sIHByZXBlbmRdID0gW1xuXHRcdFx0XHRcdHRoaXMudGFyZ2V0KCksXG5cdFx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLnRyYW5zZm9ybSgpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnNjZW5lKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5jYW1lcmEpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnNpemUpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmh0bWxJbnB1dHMuY2FsY3VsYXRlUG9zaXRpb24pLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmh0bWxJbnB1dHMucHJlcGVuZCksXG5cdFx0XHRcdF07XG5cdFx0XHRcdHNjZW5lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBgcG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO2A7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgdmVjID0gY2FsY3VsYXRlUG9zaXRpb24oZ3JvdXAsIGNhbWVyYSwgc2l6ZSk7XG5cdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gYHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoJHt2ZWNbMF19cHgsJHt2ZWNbMV19cHgsMCk7dHJhbnNmb3JtLW9yaWdpbjowIDA7YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAocHJlcGVuZCkgdGFyZ2V0LnByZXBlbmQoZWxlbWVudCk7XG5cdFx0XHRcdFx0ZWxzZSB0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0YXJnZXQpIHRhcmdldC5yZW1vdmVDaGlsZChlbGVtZW50KTtcblx0XHRcdFx0XHR0aGlzLnZjci5jbGVhcigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0V3JhcHBlckNsYXNzKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbZWxlbWVudCwgd3JhcHBlckNsYXNzXSA9IFt0aGlzLmVsZW1lbnQoKSwgdGhpcy5odG1sSW5wdXRzLndyYXBwZXJDbGFzcygpXTtcblx0XHRcdGlmIChlbGVtZW50ICYmIHdyYXBwZXJDbGFzcykge1xuXHRcdFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IHdyYXBwZXJDbGFzcztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbeyB0cmFuc2Zvcm0gfSwgZWxlbWVudCwgY29udGVudF0gPSBbXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zdGF0ZSgpLFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmNvbnRlbnQoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuaXNNZXNoU2l6ZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBwYXJhbXM6IFBhcmFtZXRlcnM8Vmlld0NvbnRhaW5lclJlZlsnY3JlYXRlRW1iZWRkZWRWaWV3J10+ID0gdHJhbnNmb3JtXG5cdFx0XHRcdFx0PyBbdGhpcy50cmFuc2Zvcm1UZW1wbGF0ZSwge31dXG5cdFx0XHRcdFx0OiBbdGhpcy5yZW5kZXJUZW1wbGF0ZSwgeyBzdHlsZXM6IHRoaXMuc3R5bGVzIH1dO1xuXG5cdFx0XHRcdGNvbnN0IHJlZiA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyguLi5wYXJhbXMpO1xuXHRcdFx0XHRpZiAocmVmLnJvb3ROb2Rlcz8uWzBdKSB7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnJlcGxhY2VDaGlsZHJlbiguLi5yZWYucm9vdE5vZGVzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5hcHBlbmQoLi4ucmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKHJlZik7XG5cblx0XHRcdFx0bGV0IGNvbnRlbnRSZWY6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblx0XHRcdFx0bGV0IGNvbnRlbnRQYXJlbnQ6IEhUTUxFbGVtZW50O1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTk9URTogdXRpbGl6aW5nIHJBRiBoZXJlIHNvIHRoYXQgcmVuZGVyQW5jaG9yIChWaWV3Q29udGFpbmVyUmVmKSBoYXMgYSBjaGFuY2UgdG8gYmUgcmVzb2x2ZWRcblx0XHRcdFx0ICogVE9ETzogQW5vdGhlciBhcHByb2FjaCBpcyB0byBjYWxsIHJlbmRlcigpIGluIG5nT25Jbml0IGFuZCBwYXNzIGluIGFuIGluamVjdG9yIHRvIHRoZSBlZmZlY3Rcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHJBRiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgdGhpcy5yZW5kZXJBbmNob3IpIHtcblx0XHRcdFx0XHRcdGNvbnRlbnRSZWYgPSB0aGlzLnJlbmRlckFuY2hvci5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGVudCk7XG5cdFx0XHRcdFx0XHRjb250ZW50UGFyZW50ID0gcmVmLnJvb3ROb2Rlc1swXS5sYXN0RWxlbWVudENoaWxkIHx8IHJlZi5yb290Tm9kZXNbMF07XG5cdFx0XHRcdFx0XHR3aGlsZSAoY29udGVudFBhcmVudCAmJiBjb250ZW50UGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGVudFBhcmVudCA9IGNvbnRlbnRQYXJlbnQubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChjb250ZW50UmVmLnJvb3ROb2Rlcz8uWzBdKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjb250ZW50UGFyZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRQYXJlbnQucmVwbGFjZUNoaWxkcmVuKC4uLmNvbnRlbnRSZWYucm9vdE5vZGVzKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50UGFyZW50LmFwcGVuZCguLi5jb250ZW50UmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKGNvbnRlbnRSZWYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0XHRjYW5jZWxBbmltYXRpb25GcmFtZShyQUYpO1xuXG5cdFx0XHRcdFx0aWYgKGNvbnRlbnRSZWYgJiYgY29udGVudFBhcmVudCkge1xuXHRcdFx0XHRcdFx0Y29udGVudFJlZi5yb290Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY29udGVudFBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50UGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29udGVudFJlZi5kZXN0cm95KCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVmLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVmLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR0aGlzLnJlbmRlckFuY2hvcj8uY2xlYXIoKTtcblx0XHRcdFx0XHR0aGlzLnZjci5jbGVhcigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGxldCBvbGRQb3NpdGlvbiA9IFswLCAwXTtcblx0XHRsZXQgb2xkWm9vbSA9IDA7XG5cdFx0bGV0IHZpc2libGUgPSB0cnVlO1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoZ2wpID0+IHtcblx0XHRcdGNvbnN0IFtcblx0XHRcdFx0Z3JvdXAsXG5cdFx0XHRcdGNhbWVyYSxcblx0XHRcdFx0dHJhbnNmb3JtLFxuXHRcdFx0XHRjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdFx0c2l6ZSxcblx0XHRcdFx0ZXBzLFxuXHRcdFx0XHRpc1JheUNhc3RPY2NsdXNpb24sXG5cdFx0XHRcdG9jY2x1ZGUsXG5cdFx0XHRcdHNjZW5lLFxuXHRcdFx0XHRyYXljYXN0ZXIsXG5cdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdHpJbmRleFJhbmdlLFxuXHRcdFx0XHRzcHJpdGUsXG5cdFx0XHRcdGRpc3RhbmNlRmFjdG9yLFxuXHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLFxuXHRcdFx0XHRnZW9tZXRyeSxcblx0XHRcdFx0dmlld3BvcnQsXG5cdFx0XHRcdHNjYWxlLFxuXHRcdFx0XSA9IFtcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuY2FtZXJhKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy50cmFuc2Zvcm0oKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmNhbGN1bGF0ZVBvc2l0aW9uKCksXG5cdFx0XHRcdHRoaXMuc2l6ZSgpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuZXBzKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5pc1JheUNhc3RPY2NsdXNpb24oKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLm9jY2x1ZGUoKSxcblx0XHRcdFx0dGhpcy5zY2VuZSgpLFxuXHRcdFx0XHR0aGlzLnJheWNhc3RlcigpLFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLnpJbmRleFJhbmdlKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zcHJpdGUoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmRpc3RhbmNlRmFjdG9yKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5vY2NsdXNpb25NZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5nZW9tZXRyeSgpLFxuXHRcdFx0XHR0aGlzLnZpZXdwb3J0KCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zY2FsZSgpLFxuXHRcdFx0XTtcblx0XHRcdGlmIChncm91cCAmJiBlbGVtZW50KSB7XG5cdFx0XHRcdGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdFx0XHRncm91cC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IHZlYyA9IHRyYW5zZm9ybSA/IG9sZFBvc2l0aW9uIDogY2FsY3VsYXRlUG9zaXRpb24oZ3JvdXAsIGNhbWVyYSwgc2l6ZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRyYW5zZm9ybSB8fFxuXHRcdFx0XHRcdE1hdGguYWJzKG9sZFpvb20gLSBjYW1lcmEuem9vbSkgPiBlcHMgfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRQb3NpdGlvblswXSAtIHZlY1swXSkgPiBlcHMgfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRQb3NpdGlvblsxXSAtIHZlY1sxXSkgPiBlcHNcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNCZWhpbmRDYW1lcmEgPSBpc09iamVjdEJlaGluZENhbWVyYShncm91cCwgY2FtZXJhKTtcblx0XHRcdFx0XHRsZXQgcmF5dHJhY2VUYXJnZXQ6IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuIHwgVEhSRUUuT2JqZWN0M0RbXSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKGlzUmF5Q2FzdE9jY2x1c2lvbikge1xuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob2NjbHVkZSkpIHtcblx0XHRcdFx0XHRcdFx0cmF5dHJhY2VUYXJnZXQgPSBvY2NsdWRlLm1hcCgoaXRlbSkgPT4gKGlzLnJlZihpdGVtKSA/IGl0ZW0ubmF0aXZlRWxlbWVudCA6IGl0ZW0pKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob2NjbHVkZSAhPT0gJ2JsZW5kaW5nJykge1xuXHRcdFx0XHRcdFx0XHRyYXl0cmFjZVRhcmdldCA9IFtzY2VuZV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXNseVZpc2libGUgPSB2aXNpYmxlO1xuXHRcdFx0XHRcdGlmIChyYXl0cmFjZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNWaXNpYmxlID0gaXNPYmplY3RWaXNpYmxlKGdyb3VwLCBjYW1lcmEsIHJheWNhc3RlciwgcmF5dHJhY2VUYXJnZXQpO1xuXHRcdFx0XHRcdFx0dmlzaWJsZSA9IGlzVmlzaWJsZSAmJiAhaXNCZWhpbmRDYW1lcmE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZpc2libGUgPSAhaXNCZWhpbmRDYW1lcmE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByZXZpb3VzbHlWaXNpYmxlICE9PSB2aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5odG1sSW5wdXRzLm9jY2x1ZGVkLm9ic2VydmVkKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaHRtbElucHV0cy5vY2NsdWRlZC5lbWl0KCF2aXNpYmxlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGhhbGZSYW5nZSA9IE1hdGguZmxvb3IoekluZGV4UmFuZ2VbMF0gLyAyKTtcblx0XHRcdFx0XHRjb25zdCB6UmFuZ2UgPSBvY2NsdWRlXG5cdFx0XHRcdFx0XHQ/IGlzUmF5Q2FzdE9jY2x1c2lvbiAvL1xuXHRcdFx0XHRcdFx0XHQ/IFt6SW5kZXhSYW5nZVswXSwgaGFsZlJhbmdlXVxuXHRcdFx0XHRcdFx0XHQ6IFtoYWxmUmFuZ2UgLSAxLCAwXVxuXHRcdFx0XHRcdFx0OiB6SW5kZXhSYW5nZTtcblxuXHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuekluZGV4ID0gYCR7b2JqZWN0WkluZGV4KGdyb3VwLCBjYW1lcmEsIHpSYW5nZSl9YDtcblxuXHRcdFx0XHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IFt3aWR0aEhhbGYsIGhlaWdodEhhbGZdID0gW3NpemUud2lkdGggLyAyLCBzaXplLmhlaWdodCAvIDJdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZm92ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV0gKiBoZWlnaHRIYWxmO1xuXHRcdFx0XHRcdFx0Y29uc3QgeyBpc09ydGhvZ3JhcGhpY0NhbWVyYSwgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBjYW1lcmEgYXMgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhTWF0cml4ID0gZ2V0Q2FtZXJhQ1NTTWF0cml4KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhVHJhbnNmb3JtID0gaXNPcnRob2dyYXBoaWNDYW1lcmFcblx0XHRcdFx0XHRcdFx0PyBgc2NhbGUoJHtmb3Z9KXRyYW5zbGF0ZSgke2Vwc2lsb24oLShyaWdodCArIGxlZnQpIC8gMil9cHgsJHtlcHNpbG9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0KHRvcCArIGJvdHRvbSkgLyAyLFxuXHRcdFx0XHRcdFx0XHQgICl9cHgpYFxuXHRcdFx0XHRcdFx0XHQ6IGB0cmFuc2xhdGVaKCR7Zm92fXB4KWA7XG5cdFx0XHRcdFx0XHRsZXQgbWF0cml4ID0gZ3JvdXAubWF0cml4V29ybGQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ByaXRlKSB7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2Vcblx0XHRcdFx0XHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHRcdFx0XHRcdC50cmFuc3Bvc2UoKVxuXHRcdFx0XHRcdFx0XHRcdC5jb3B5UG9zaXRpb24obWF0cml4KVxuXHRcdFx0XHRcdFx0XHRcdC5zY2FsZShncm91cC5zY2FsZSk7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1szXSA9IG1hdHJpeC5lbGVtZW50c1s3XSA9IG1hdHJpeC5lbGVtZW50c1sxMV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXguZWxlbWVudHNbMTVdID0gMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplLndpZHRoICsgJ3B4Jztcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyAncHgnO1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5wZXJzcGVjdGl2ZSA9IGlzT3J0aG9ncmFwaGljQ2FtZXJhID8gJycgOiBgJHtmb3Z9cHhgO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMub3V0ZXJEaXY/Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5pbm5lckRpdj8ubmF0aXZlRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm91dGVyRGl2Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplLndpZHRoICsgJ3B4Jztcblx0XHRcdFx0XHRcdFx0dGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHNpemUuaGVpZ2h0ICsgJ3B4Jztcblx0XHRcdFx0XHRcdFx0dGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGAke2NhbWVyYVRyYW5zZm9ybX0ke2NhbWVyYU1hdHJpeH10cmFuc2xhdGUoJHt3aWR0aEhhbGZ9cHgsJHtoZWlnaHRIYWxmfXB4KWA7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW5uZXJEaXYubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBnZXRPYmplY3RDU1NNYXRyaXgoXG5cdFx0XHRcdFx0XHRcdFx0bWF0cml4LFxuXHRcdFx0XHRcdFx0XHRcdDEgLyAoKGRpc3RhbmNlRmFjdG9yIHx8IDEwKSAvIDQwMCksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNjYWxlID0gZGlzdGFuY2VGYWN0b3IgPT09IHVuZGVmaW5lZCA/IDEgOiBvYmplY3RTY2FsZShncm91cCwgY2FtZXJhKSAqIGRpc3RhbmNlRmFjdG9yO1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt2ZWNbMF19cHgsJHt2ZWNbMV19cHgsMCkgc2NhbGUoJHtzY2FsZX0pYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2xkUG9zaXRpb24gPSB2ZWM7XG5cdFx0XHRcdFx0b2xkWm9vbSA9IGNhbWVyYS56b29tO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNSYXlDYXN0T2NjbHVzaW9uICYmIG9jY2x1c2lvbk1lc2hSZWYgJiYgIXRoaXMuaXNNZXNoU2l6ZVNldCkge1xuXHRcdFx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMub3V0ZXJEaXY/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoZWw/LmNsaWVudFdpZHRoICYmIGVsPy5jbGllbnRIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBpc09ydGhvZ3JhcGhpY0NhbWVyYSB9ID0gY2FtZXJhIGFzIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNPcnRob2dyYXBoaWNDYW1lcmEgfHwgZ2VvbWV0cnkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2NhbGUgIT09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShzY2FsZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZi5zY2FsZS5zZXRTY2FsYXIoMSAvIChzY2FsZSBhcyBudW1iZXIpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc2NhbGUgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2hSZWYuc2NhbGUuY29weShzY2FsZS5jbG9uZSgpLmRpdmlkZVNjYWxhcigxKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLnNldCgxIC8gc2NhbGVbMF0sIDEgLyBzY2FsZVsxXSwgMSAvIHNjYWxlWzJdKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcmF0aW8gPSAoZGlzdGFuY2VGYWN0b3IgfHwgMTApIC8gNDAwO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHcgPSBlbC5jbGllbnRXaWR0aCAqIHJhdGlvO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGggPSBlbC5jbGllbnRIZWlnaHQgKiByYXRpbztcblxuXHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2hSZWYuc2NhbGUuc2V0KHcsIGgsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5pc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZWxlID0gZWxlbWVudC5jaGlsZHJlblswXTtcblxuXHRcdFx0XHRcdGlmIChlbGU/LmNsaWVudFdpZHRoICYmIGVsZT8uY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCByYXRpbyA9IDEgLyB2aWV3cG9ydC5mYWN0b3I7XG5cdFx0XHRcdFx0XHRjb25zdCB3ID0gZWxlLmNsaWVudFdpZHRoICogcmF0aW87XG5cdFx0XHRcdFx0XHRjb25zdCBoID0gZWxlLmNsaWVudEhlaWdodCAqIHJhdGlvO1xuXG5cdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLnNldCh3LCBoLCAxKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLmxvb2tBdChnbC5jYW1lcmEucG9zaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2h0bWwvaHRtbC13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUU5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUUvQixNQUFNLFVBQVUsd0JBQXdCLENBQ3ZDLEVBQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLElBQXVDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJ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QXpDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUNFLFFBQVE7c0JBQXpDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUN1QixZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIVE1MLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFN0b3JlLCBpcywgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGluamVjdE5ndHNIdG1sSW5wdXRzIH0gZnJvbSAnLi9odG1sJztcblxuY29uc3QgdjEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgdjIgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgdjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENhbGN1bGF0ZVBvc2l0aW9uKFxuXHRlbDogVEhSRUUuT2JqZWN0M0QsXG5cdGNhbWVyYTogVEhSRUUuQ2FtZXJhLFxuXHRzaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXG4pIHtcblx0Y29uc3Qgb2JqZWN0UG9zID0gdjEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVsLm1hdHJpeFdvcmxkKTtcblx0b2JqZWN0UG9zLnByb2plY3QoY2FtZXJhKTtcblx0Y29uc3Qgd2lkdGhIYWxmID0gc2l6ZS53aWR0aCAvIDI7XG5cdGNvbnN0IGhlaWdodEhhbGYgPSBzaXplLmhlaWdodCAvIDI7XG5cdHJldHVybiBbb2JqZWN0UG9zLnggKiB3aWR0aEhhbGYgKyB3aWR0aEhhbGYsIC0ob2JqZWN0UG9zLnkgKiBoZWlnaHRIYWxmKSArIGhlaWdodEhhbGZdO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdEJlaGluZENhbWVyYShlbDogVEhSRUUuT2JqZWN0M0QsIGNhbWVyYTogVEhSRUUuQ2FtZXJhKSB7XG5cdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdGNvbnN0IGNhbWVyYVBvcyA9IHYyLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRjb25zdCBkZWx0YUNhbU9iaiA9IG9iamVjdFBvcy5zdWIoY2FtZXJhUG9zKTtcblx0Y29uc3QgY2FtRGlyID0gY2FtZXJhLmdldFdvcmxkRGlyZWN0aW9uKHYzKTtcblx0cmV0dXJuIGRlbHRhQ2FtT2JqLmFuZ2xlVG8oY2FtRGlyKSA+IE1hdGguUEkgLyAyO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdFZpc2libGUoXG5cdGVsOiBUSFJFRS5PYmplY3QzRCxcblx0Y2FtZXJhOiBUSFJFRS5DYW1lcmEsXG5cdHJheWNhc3RlcjogVEhSRUUuUmF5Y2FzdGVyLFxuXHRvY2NsdWRlOiBUSFJFRS5PYmplY3QzRFtdLFxuKSB7XG5cdGNvbnN0IGVsUG9zID0gdjEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVsLm1hdHJpeFdvcmxkKTtcblx0Y29uc3Qgc2NyZWVuUG9zID0gZWxQb3MuY2xvbmUoKTtcblx0c2NyZWVuUG9zLnByb2plY3QoY2FtZXJhKTtcblx0cmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoc2NyZWVuUG9zIGFzIGFueSwgY2FtZXJhKTtcblx0Y29uc3QgaW50ZXJzZWN0cyA9IHJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzKG9jY2x1ZGUsIHRydWUpO1xuXHRpZiAoaW50ZXJzZWN0cy5sZW5ndGgpIHtcblx0XHRjb25zdCBpbnRlcnNlY3Rpb25EaXN0YW5jZSA9IGludGVyc2VjdHNbMF0uZGlzdGFuY2U7XG5cdFx0Y29uc3QgcG9pbnREaXN0YW5jZSA9IGVsUG9zLmRpc3RhbmNlVG8ocmF5Y2FzdGVyLnJheS5vcmlnaW4pO1xuXHRcdHJldHVybiBwb2ludERpc3RhbmNlIDwgaW50ZXJzZWN0aW9uRGlzdGFuY2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iamVjdFNjYWxlKGVsOiBUSFJFRS5PYmplY3QzRCwgY2FtZXJhOiBUSFJFRS5DYW1lcmEpIHtcblx0aWYgKGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xuXHRcdHJldHVybiBjYW1lcmEuem9vbTtcblx0fSBlbHNlIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSkge1xuXHRcdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgY2FtZXJhUG9zID0gdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgdkZPViA9IChjYW1lcmEuZm92ICogTWF0aC5QSSkgLyAxODA7XG5cdFx0Y29uc3QgZGlzdCA9IG9iamVjdFBvcy5kaXN0YW5jZVRvKGNhbWVyYVBvcyk7XG5cdFx0Y29uc3Qgc2NhbGVGT1YgPSAyICogTWF0aC50YW4odkZPViAvIDIpICogZGlzdDtcblx0XHRyZXR1cm4gMSAvIHNjYWxlRk9WO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAxO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9iamVjdFpJbmRleChlbDogVEhSRUUuT2JqZWN0M0QsIGNhbWVyYTogVEhSRUUuQ2FtZXJhLCB6SW5kZXhSYW5nZTogQXJyYXk8bnVtYmVyPikge1xuXHRpZiAoY2FtZXJhIGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEgfHwgY2FtZXJhIGluc3RhbmNlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKSB7XG5cdFx0Y29uc3Qgb2JqZWN0UG9zID0gdjEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVsLm1hdHJpeFdvcmxkKTtcblx0XHRjb25zdCBjYW1lcmFQb3MgPSB2Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHRjb25zdCBkaXN0ID0gb2JqZWN0UG9zLmRpc3RhbmNlVG8oY2FtZXJhUG9zKTtcblx0XHRjb25zdCBBID0gKHpJbmRleFJhbmdlWzFdIC0gekluZGV4UmFuZ2VbMF0pIC8gKGNhbWVyYS5mYXIgLSBjYW1lcmEubmVhcik7XG5cdFx0Y29uc3QgQiA9IHpJbmRleFJhbmdlWzFdIC0gQSAqIGNhbWVyYS5mYXI7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoQSAqIGRpc3QgKyBCKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBlcHNpbG9uID0gKHZhbHVlOiBudW1iZXIpID0+IChNYXRoLmFicyh2YWx1ZSkgPCAxZS0xMCA/IDAgOiB2YWx1ZSk7XG5cbmZ1bmN0aW9uIGdldENTU01hdHJpeChtYXRyaXg6IFRIUkVFLk1hdHJpeDQsIG11bHRpcGxpZXJzOiBudW1iZXJbXSwgcHJlcGVuZCA9ICcnKSB7XG5cdGxldCBtYXRyaXgzZCA9ICdtYXRyaXgzZCgnO1xuXHRmb3IgKGxldCBpID0gMDsgaSAhPT0gMTY7IGkrKykge1xuXHRcdG1hdHJpeDNkICs9IGVwc2lsb24obXVsdGlwbGllcnNbaV0gKiBtYXRyaXguZWxlbWVudHNbaV0pICsgKGkgIT09IDE1ID8gJywnIDogJyknKTtcblx0fVxuXHRyZXR1cm4gcHJlcGVuZCArIG1hdHJpeDNkO1xufVxuXG5jb25zdCBnZXRDYW1lcmFDU1NNYXRyaXggPSAoKG11bHRpcGxpZXJzOiBudW1iZXJbXSkgPT4ge1xuXHRyZXR1cm4gKG1hdHJpeDogVEhSRUUuTWF0cml4NCkgPT4gZ2V0Q1NTTWF0cml4KG1hdHJpeCwgbXVsdGlwbGllcnMpO1xufSkoWzEsIC0xLCAxLCAxLCAxLCAtMSwgMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxXSk7XG5cbmNvbnN0IGdldE9iamVjdENTU01hdHJpeCA9ICgoc2NhbGVNdWx0aXBsaWVyczogKG46IG51bWJlcikgPT4gbnVtYmVyW10pID0+IHtcblx0cmV0dXJuIChtYXRyaXg6IFRIUkVFLk1hdHJpeDQsIGZhY3RvcjogbnVtYmVyKSA9PlxuXHRcdGdldENTU01hdHJpeChtYXRyaXgsIHNjYWxlTXVsdGlwbGllcnMoZmFjdG9yKSwgJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyk7XG59KSgoZjogbnVtYmVyKSA9PiBbMSAvIGYsIDEgLyBmLCAxIC8gZiwgMSwgLTEgLyBmLCAtMSAvIGYsIC0xIC8gZiwgLTEsIDEgLyBmLCAxIC8gZiwgMSAvIGYsIDEsIDEsIDEsIDEsIDFdKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1odG1sLXdyYXBwZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy10ZW1wbGF0ZSAjdHJhbnNmb3JtVGVtcGxhdGU+XG5cdFx0XHQ8ZGl2ICN0cmFuc2Zvcm1lZE91dGVyRGl2IFtzdHlsZV09XCJzdHlsZXMoKVwiPlxuXHRcdFx0XHQ8ZGl2ICN0cmFuc2Zvcm1lZElubmVyRGl2IFtzdHlsZV09XCJ0cmFuc2Zvcm1Jbm5lclN0eWxlcygpXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbmRlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0eWxlczogaHRtbElucHV0cy5zdHlsZSB9XCIgLz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNyZW5kZXJUZW1wbGF0ZSBsZXQtcmVuZGVyZWRTdHlsZXM9XCJzdHlsZXNcIj5cblx0XHRcdDxkaXYgI3JlbmRlcmVkRGl2IFtjbGFzc109XCJodG1sSW5wdXRzLnJlbmRlcmVkRGl2Q2xhc3MoKVwiIFtzdHlsZV09XCJyZW5kZXJlZFN0eWxlcygpXCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgI3JlbmRlckFuY2hvciAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0YCxcblx0aW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzSHRtbFdyYXBwZXIge1xuXHRzdGF0aWMgW0hUTUxdID0gdHJ1ZTtcblxuXHRodG1sSW5wdXRzID0gaW5qZWN0Tmd0c0h0bWxJbnB1dHMoKTtcblxuXHRAVmlld0NoaWxkKCd0cmFuc2Zvcm1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHRyYW5zZm9ybVRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cdEBWaWV3Q2hpbGQoJ3JlbmRlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcmVuZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuXHRAVmlld0NoaWxkKCd0cmFuc2Zvcm1lZE91dGVyRGl2Jykgb3V0ZXJEaXY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcblx0QFZpZXdDaGlsZCgndHJhbnNmb3JtZWRJbm5lckRpdicpIGlubmVyRGl2PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoJ3JlbmRlckFuY2hvcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSByZW5kZXJBbmNob3I/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgY29ubmVjdGVkID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2V2ZW50cycsICdjb25uZWN0ZWQnKTtcblx0cHJpdmF0ZSB2aWV3cG9ydCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXHRwcml2YXRlIHNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgY2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXHRwcml2YXRlIHJheWNhc3RlciA9IHRoaXMuc3RvcmUuc2VsZWN0KCdyYXljYXN0ZXInKTtcblxuXHRwcml2YXRlIGlzTWVzaFNpemVTZXQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cblx0cHJpdmF0ZSBwb3J0YWxFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHBvcnRhbCA9IHRoaXMuaHRtbElucHV0cy5wb3J0YWwoKTtcblx0XHRpZiAoIXBvcnRhbCkgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIGlzLnJlZihwb3J0YWwpID8gcG9ydGFsLm5hdGl2ZUVsZW1lbnQgOiBwb3J0YWw7XG5cdH0pO1xuXG5cdHByaXZhdGUgZWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmh0bWxJbnB1dHMuYXMoKSkgYXMgSFRNTEVsZW1lbnQpO1xuXHRwcml2YXRlIHRhcmdldCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBwb3J0YWxFbGVtZW50ID0gdGhpcy5wb3J0YWxFbGVtZW50KCk7XG5cdFx0aWYgKHBvcnRhbEVsZW1lbnQpIHJldHVybiBwb3J0YWxFbGVtZW50O1xuXHRcdGNvbnN0IGNvbm5lY3RlZCA9IHRoaXMuY29ubmVjdGVkKCk7XG5cdFx0aWYgKGNvbm5lY3RlZCkgcmV0dXJuIGNvbm5lY3RlZCBhcyBIVE1MRWxlbWVudDtcblx0XHRyZXR1cm4gdGhpcy5nbCgpLmRvbUVsZW1lbnQucGFyZW50RWxlbWVudCE7XG5cdH0pO1xuXG5cdHN0eWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbc3R5bGUsIGNlbnRlciwgdHJhbnNmb3JtLCBzaXplLCBmdWxsc2NyZWVuXSA9IFtcblx0XHRcdHRoaXMuaHRtbElucHV0cy5zdHlsZSgpLFxuXHRcdFx0dGhpcy5odG1sSW5wdXRzLmNlbnRlcigpLFxuXHRcdFx0dGhpcy5odG1sSW5wdXRzLnRyYW5zZm9ybSgpLFxuXHRcdFx0dGhpcy5zaXplKCksXG5cdFx0XHR0aGlzLmh0bWxJbnB1dHMuZnVsbHNjcmVlbigpLFxuXHRcdF07XG5cblx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcblx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHR3aWR0aDogc2l6ZS53aWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBzaXplLmhlaWdodCxcblx0XHRcdFx0dHJhbnNmb3JtU3R5bGU6ICdwcmVzZXJ2ZS0zZCcsXG5cdFx0XHRcdHBvaW50ZXJFdmVudHM6ICdub25lJyxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0dHJhbnNmb3JtOiBjZW50ZXIgPyAndHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApJyA6ICdub25lJyxcblx0XHRcdC4uLihmdWxsc2NyZWVuICYmIHtcblx0XHRcdFx0dG9wOiAtc2l6ZS5oZWlnaHQgLyAyLFxuXHRcdFx0XHRsZWZ0OiAtc2l6ZS53aWR0aCAvIDIsXG5cdFx0XHRcdHdpZHRoOiBzaXplLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuXHRcdFx0fSksXG5cdFx0XHQuLi4oc3R5bGUgfHwge30pLFxuXHRcdH07XG5cdH0pO1xuXHR0cmFuc2Zvcm1Jbm5lclN0eWxlcyA9IGNvbXB1dGVkKCgpID0+ICh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBwb2ludGVyRXZlbnRzOiB0aGlzLmh0bWxJbnB1dHMucG9pbnRlckV2ZW50cygpIH0pKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnNldENhbnZhc0VsZW1lbnRTdHlsZSgpO1xuXHRcdHRoaXMuYXBwZW5kRWxlbWVudCgpO1xuXHRcdHRoaXMuc2V0V3JhcHBlckNsYXNzKCk7XG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmJlZm9yZVJlbmRlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDYW52YXNFbGVtZW50U3R5bGUoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGVsID0gdW50cmFja2VkKHRoaXMuZ2wpLmRvbUVsZW1lbnQhO1xuXHRcdFx0Y29uc3Qgb2NjbHVkZSA9IHRoaXMuaHRtbElucHV0cy5vY2NsdWRlKCk7XG5cdFx0XHRpZiAob2NjbHVkZSAmJiBvY2NsdWRlID09PSAnYmxlbmRpbmcnKSB7XG5cdFx0XHRcdGVsLnN0eWxlLnpJbmRleCA9IGAke01hdGguZmxvb3IodW50cmFja2VkKHRoaXMuaHRtbElucHV0cy56SW5kZXhSYW5nZSlbMF0gLyAyKX1gO1xuXHRcdFx0XHRlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRcdGVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbC5zdHlsZS56SW5kZXggPSBudWxsITtcblx0XHRcdFx0ZWwuc3R5bGUucG9zaXRpb24gPSBudWxsITtcblx0XHRcdFx0ZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9IG51bGwhO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhcHBlbmRFbGVtZW50KCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbZ3JvdXAsIGVsZW1lbnRdID0gW3RoaXMuaHRtbElucHV0cy5ncm91cFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnQoKV07XG5cdFx0XHRpZiAoZ3JvdXAgJiYgZWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCBbdGFyZ2V0LCB0cmFuc2Zvcm0sIHNjZW5lLCBjYW1lcmEsIHNpemUsIGNhbGN1bGF0ZVBvc2l0aW9uLCBwcmVwZW5kXSA9IFtcblx0XHRcdFx0XHR0aGlzLnRhcmdldCgpLFxuXHRcdFx0XHRcdHRoaXMuaHRtbElucHV0cy50cmFuc2Zvcm0oKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5zY2VuZSksXG5cdFx0XHRcdFx0dW50cmFja2VkKHRoaXMuY2FtZXJhKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5zaXplKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5odG1sSW5wdXRzLmNhbGN1bGF0ZVBvc2l0aW9uKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5odG1sSW5wdXRzLnByZXBlbmQpLFxuXHRcdFx0XHRdO1xuXHRcdFx0XHRzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdFx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gYHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO292ZXJmbG93OmhpZGRlbjtgO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHZlYyA9IGNhbGN1bGF0ZVBvc2l0aW9uKGdyb3VwLCBjYW1lcmEsIHNpemUpO1xuXHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IGBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKCR7dmVjWzBdfXB4LCR7dmVjWzFdfXB4LDApO3RyYW5zZm9ybS1vcmlnaW46MCAwO2A7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRcdFx0aWYgKHByZXBlbmQpIHRhcmdldC5wcmVwZW5kKGVsZW1lbnQpO1xuXHRcdFx0XHRcdGVsc2UgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0KSB0YXJnZXQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cdFx0XHRcdFx0dGhpcy52Y3IuY2xlYXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHNldFdyYXBwZXJDbGFzcygpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW2VsZW1lbnQsIHdyYXBwZXJDbGFzc10gPSBbdGhpcy5lbGVtZW50KCksIHRoaXMuaHRtbElucHV0cy53cmFwcGVyQ2xhc3MoKV07XG5cdFx0XHRpZiAoZWxlbWVudCAmJiB3cmFwcGVyQ2xhc3MpIHtcblx0XHRcdFx0ZWxlbWVudC5jbGFzc05hbWUgPSB3cmFwcGVyQ2xhc3M7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcigpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgdHJhbnNmb3JtIH0sIGVsZW1lbnQsIGNvbnRlbnRdID0gW1xuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuc3RhdGUoKSxcblx0XHRcdFx0dGhpcy5lbGVtZW50KCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5jb250ZW50KCksXG5cdFx0XHRdO1xuXG5cdFx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmlzTWVzaFNpemVTZXQgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3QgcGFyYW1zOiBQYXJhbWV0ZXJzPFZpZXdDb250YWluZXJSZWZbJ2NyZWF0ZUVtYmVkZGVkVmlldyddPiA9IHRyYW5zZm9ybVxuXHRcdFx0XHRcdD8gW3RoaXMudHJhbnNmb3JtVGVtcGxhdGUsIHt9XVxuXHRcdFx0XHRcdDogW3RoaXMucmVuZGVyVGVtcGxhdGUsIHsgc3R5bGVzOiB0aGlzLnN0eWxlcyB9XTtcblxuXHRcdFx0XHRjb25zdCByZWYgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcoLi4ucGFyYW1zKTtcblx0XHRcdFx0aWYgKHJlZi5yb290Tm9kZXM/LlswXSkge1xuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5yZXBsYWNlQ2hpbGRyZW4oLi4ucmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuYXBwZW5kKC4uLnJlZi5yb290Tm9kZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzYWZlRGV0ZWN0Q2hhbmdlcyhyZWYpO1xuXG5cdFx0XHRcdGxldCBjb250ZW50UmVmOiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cdFx0XHRcdGxldCBjb250ZW50UGFyZW50OiBIVE1MRWxlbWVudDtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIE5PVEU6IHV0aWxpemluZyByQUYgaGVyZSBzbyB0aGF0IHJlbmRlckFuY2hvciAoVmlld0NvbnRhaW5lclJlZikgaGFzIGEgY2hhbmNlIHRvIGJlIHJlc29sdmVkXG5cdFx0XHRcdCAqIFRPRE86IEFub3RoZXIgYXBwcm9hY2ggaXMgdG8gY2FsbCByZW5kZXIoKSBpbiBuZ09uSW5pdCBhbmQgcGFzcyBpbiBhbiBpbmplY3RvciB0byB0aGUgZWZmZWN0XG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCByQUYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdGlmIChjb250ZW50ICYmIHRoaXMucmVuZGVyQW5jaG9yKSB7XG5cdFx0XHRcdFx0XHRjb250ZW50UmVmID0gdGhpcy5yZW5kZXJBbmNob3IuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRlbnQpO1xuXHRcdFx0XHRcdFx0Y29udGVudFBhcmVudCA9IHJlZi5yb290Tm9kZXNbMF0ubGFzdEVsZW1lbnRDaGlsZCB8fCByZWYucm9vdE5vZGVzWzBdO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGNvbnRlbnRQYXJlbnQgJiYgY29udGVudFBhcmVudC5sYXN0RWxlbWVudENoaWxkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRQYXJlbnQgPSBjb250ZW50UGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoY29udGVudFJlZi5yb290Tm9kZXM/LlswXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoY29udGVudFBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50UGFyZW50LnJlcGxhY2VDaGlsZHJlbiguLi5jb250ZW50UmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudFBhcmVudC5hcHBlbmQoLi4uY29udGVudFJlZi5yb290Tm9kZXMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzYWZlRGV0ZWN0Q2hhbmdlcyhjb250ZW50UmVmKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUockFGKTtcblxuXHRcdFx0XHRcdGlmIChjb250ZW50UmVmICYmIGNvbnRlbnRQYXJlbnQpIHtcblx0XHRcdFx0XHRcdGNvbnRlbnRSZWYucm9vdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGNvbnRlbnRQYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudFBhcmVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGNvbnRlbnRSZWYuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlZi5yb290Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlZi5kZXN0cm95KCk7XG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJBbmNob3I/LmNsZWFyKCk7XG5cdFx0XHRcdFx0dGhpcy52Y3IuY2xlYXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGJlZm9yZVJlbmRlcigpIHtcblx0XHRsZXQgb2xkUG9zaXRpb24gPSBbMCwgMF07XG5cdFx0bGV0IG9sZFpvb20gPSAwO1xuXHRcdGxldCB2aXNpYmxlID0gdHJ1ZTtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKGdsKSA9PiB7XG5cdFx0XHRjb25zdCBbXG5cdFx0XHRcdGdyb3VwLFxuXHRcdFx0XHRjYW1lcmEsXG5cdFx0XHRcdHRyYW5zZm9ybSxcblx0XHRcdFx0Y2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRcdHNpemUsXG5cdFx0XHRcdGVwcyxcblx0XHRcdFx0aXNSYXlDYXN0T2NjbHVzaW9uLFxuXHRcdFx0XHRvY2NsdWRlLFxuXHRcdFx0XHRzY2VuZSxcblx0XHRcdFx0cmF5Y2FzdGVyLFxuXHRcdFx0XHRlbGVtZW50LFxuXHRcdFx0XHR6SW5kZXhSYW5nZSxcblx0XHRcdFx0c3ByaXRlLFxuXHRcdFx0XHRkaXN0YW5jZUZhY3Rvcixcblx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZixcblx0XHRcdFx0Z2VvbWV0cnksXG5cdFx0XHRcdHZpZXdwb3J0LFxuXHRcdFx0XHRzY2FsZSxcblx0XHRcdF0gPSBbXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5ncm91cFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMudHJhbnNmb3JtKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5jYWxjdWxhdGVQb3NpdGlvbigpLFxuXHRcdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmVwcygpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuaXNSYXlDYXN0T2NjbHVzaW9uKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5vY2NsdWRlKCksXG5cdFx0XHRcdHRoaXMuc2NlbmUoKSxcblx0XHRcdFx0dGhpcy5yYXljYXN0ZXIoKSxcblx0XHRcdFx0dGhpcy5lbGVtZW50KCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy56SW5kZXhSYW5nZSgpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuc3ByaXRlKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5kaXN0YW5jZUZhY3RvcigpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMub2NjbHVzaW9uTWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuZ2VvbWV0cnkoKSxcblx0XHRcdFx0dGhpcy52aWV3cG9ydCgpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuc2NhbGUoKSxcblx0XHRcdF07XG5cdFx0XHRpZiAoZ3JvdXAgJiYgZWxlbWVudCkge1xuXHRcdFx0XHRjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRcdFx0Z3JvdXAudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHRjb25zdCB2ZWMgPSB0cmFuc2Zvcm0gPyBvbGRQb3NpdGlvbiA6IGNhbGN1bGF0ZVBvc2l0aW9uKGdyb3VwLCBjYW1lcmEsIHNpemUpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0cmFuc2Zvcm0gfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRab29tIC0gY2FtZXJhLnpvb20pID4gZXBzIHx8XG5cdFx0XHRcdFx0TWF0aC5hYnMob2xkUG9zaXRpb25bMF0gLSB2ZWNbMF0pID4gZXBzIHx8XG5cdFx0XHRcdFx0TWF0aC5hYnMob2xkUG9zaXRpb25bMV0gLSB2ZWNbMV0pID4gZXBzXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IGlzQmVoaW5kQ2FtZXJhID0gaXNPYmplY3RCZWhpbmRDYW1lcmEoZ3JvdXAsIGNhbWVyYSk7XG5cdFx0XHRcdFx0bGV0IHJheXRyYWNlVGFyZ2V0OiBudWxsIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB8IFRIUkVFLk9iamVjdDNEW10gPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmIChpc1JheUNhc3RPY2NsdXNpb24pIHtcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9jY2x1ZGUpKSB7XG5cdFx0XHRcdFx0XHRcdHJheXRyYWNlVGFyZ2V0ID0gb2NjbHVkZS5tYXAoKGl0ZW0pID0+IChpcy5yZWYoaXRlbSkgPyBpdGVtLm5hdGl2ZUVsZW1lbnQgOiBpdGVtKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9jY2x1ZGUgIT09ICdibGVuZGluZycpIHtcblx0XHRcdFx0XHRcdFx0cmF5dHJhY2VUYXJnZXQgPSBbc2NlbmVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzbHlWaXNpYmxlID0gdmlzaWJsZTtcblx0XHRcdFx0XHRpZiAocmF5dHJhY2VUYXJnZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVmlzaWJsZSA9IGlzT2JqZWN0VmlzaWJsZShncm91cCwgY2FtZXJhLCByYXljYXN0ZXIsIHJheXRyYWNlVGFyZ2V0KTtcblx0XHRcdFx0XHRcdHZpc2libGUgPSBpc1Zpc2libGUgJiYgIWlzQmVoaW5kQ2FtZXJhO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2aXNpYmxlID0gIWlzQmVoaW5kQ2FtZXJhO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcmV2aW91c2x5VmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaHRtbElucHV0cy5vY2NsdWRlZC5vYnNlcnZlZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMub2NjbHVkZWQuZW1pdCghdmlzaWJsZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBoYWxmUmFuZ2UgPSBNYXRoLmZsb29yKHpJbmRleFJhbmdlWzBdIC8gMik7XG5cdFx0XHRcdFx0Y29uc3QgelJhbmdlID0gb2NjbHVkZVxuXHRcdFx0XHRcdFx0PyBpc1JheUNhc3RPY2NsdXNpb24gLy9cblx0XHRcdFx0XHRcdFx0PyBbekluZGV4UmFuZ2VbMF0sIGhhbGZSYW5nZV1cblx0XHRcdFx0XHRcdFx0OiBbaGFsZlJhbmdlIC0gMSwgMF1cblx0XHRcdFx0XHRcdDogekluZGV4UmFuZ2U7XG5cblx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLnpJbmRleCA9IGAke29iamVjdFpJbmRleChncm91cCwgY2FtZXJhLCB6UmFuZ2UpfWA7XG5cblx0XHRcdFx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBbd2lkdGhIYWxmLCBoZWlnaHRIYWxmXSA9IFtzaXplLndpZHRoIC8gMiwgc2l6ZS5oZWlnaHQgLyAyXTtcblx0XHRcdFx0XHRcdGNvbnN0IGZvdiA9IGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdICogaGVpZ2h0SGFsZjtcblx0XHRcdFx0XHRcdGNvbnN0IHsgaXNPcnRob2dyYXBoaWNDYW1lcmEsIHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCB9ID0gY2FtZXJhIGFzIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYTtcblx0XHRcdFx0XHRcdGNvbnN0IGNhbWVyYU1hdHJpeCA9IGdldENhbWVyYUNTU01hdHJpeChjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHRcdFx0XHRcdGNvbnN0IGNhbWVyYVRyYW5zZm9ybSA9IGlzT3J0aG9ncmFwaGljQ2FtZXJhXG5cdFx0XHRcdFx0XHRcdD8gYHNjYWxlKCR7Zm92fSl0cmFuc2xhdGUoJHtlcHNpbG9uKC0ocmlnaHQgKyBsZWZ0KSAvIDIpfXB4LCR7ZXBzaWxvbihcblx0XHRcdFx0XHRcdFx0XHRcdCh0b3AgKyBib3R0b20pIC8gMixcblx0XHRcdFx0XHRcdFx0ICApfXB4KWBcblx0XHRcdFx0XHRcdFx0OiBgdHJhbnNsYXRlWigke2Zvdn1weClgO1xuXHRcdFx0XHRcdFx0bGV0IG1hdHJpeCA9IGdyb3VwLm1hdHJpeFdvcmxkO1xuXHRcdFx0XHRcdFx0aWYgKHNwcml0ZSkge1xuXHRcdFx0XHRcdFx0XHRtYXRyaXggPSBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlXG5cdFx0XHRcdFx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0XHRcdFx0XHQudHJhbnNwb3NlKClcblx0XHRcdFx0XHRcdFx0XHQuY29weVBvc2l0aW9uKG1hdHJpeClcblx0XHRcdFx0XHRcdFx0XHQuc2NhbGUoZ3JvdXAuc2NhbGUpO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXguZWxlbWVudHNbM10gPSBtYXRyaXguZWxlbWVudHNbN10gPSBtYXRyaXguZWxlbWVudHNbMTFdID0gMDtcblx0XHRcdFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWzE1XSA9IDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZS53aWR0aCArICdweCc7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmhlaWdodCA9IHNpemUuaGVpZ2h0ICsgJ3B4Jztcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUucGVyc3BlY3RpdmUgPSBpc09ydGhvZ3JhcGhpY0NhbWVyYSA/ICcnIDogYCR7Zm92fXB4YDtcblx0XHRcdFx0XHRcdGlmICh0aGlzLm91dGVyRGl2Py5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaW5uZXJEaXY/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gc2l6ZS53aWR0aCArICdweCc7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3V0ZXJEaXYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBzaXplLmhlaWdodCArICdweCc7XG5cdFx0XHRcdFx0XHRcdHRoaXMub3V0ZXJEaXYubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgJHtjYW1lcmFUcmFuc2Zvcm19JHtjYW1lcmFNYXRyaXh9dHJhbnNsYXRlKCR7d2lkdGhIYWxmfXB4LCR7aGVpZ2h0SGFsZn1weClgO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmlubmVyRGl2Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gZ2V0T2JqZWN0Q1NTTWF0cml4KFxuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCxcblx0XHRcdFx0XHRcdFx0XHQxIC8gKChkaXN0YW5jZUZhY3RvciB8fCAxMCkgLyA0MDApLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzY2FsZSA9IGRpc3RhbmNlRmFjdG9yID09PSB1bmRlZmluZWQgPyAxIDogb2JqZWN0U2NhbGUoZ3JvdXAsIGNhbWVyYSkgKiBkaXN0YW5jZUZhY3Rvcjtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dmVjWzBdfXB4LCR7dmVjWzFdfXB4LDApIHNjYWxlKCR7c2NhbGV9KWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9sZFBvc2l0aW9uID0gdmVjO1xuXHRcdFx0XHRcdG9sZFpvb20gPSBjYW1lcmEuem9vbTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzUmF5Q2FzdE9jY2x1c2lvbiAmJiBvY2NsdXNpb25NZXNoUmVmICYmICF0aGlzLmlzTWVzaFNpemVTZXQpIHtcblx0XHRcdFx0aWYgKHRyYW5zZm9ybSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLm91dGVyRGl2Py5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbCA9IHRoaXMub3V0ZXJEaXYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXTtcblxuXHRcdFx0XHRcdFx0aWYgKGVsPy5jbGllbnRXaWR0aCAmJiBlbD8uY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgaXNPcnRob2dyYXBoaWNDYW1lcmEgfSA9IGNhbWVyYSBhcyBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmE7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGlzT3J0aG9ncmFwaGljQ2FtZXJhIHx8IGdlb21ldHJ5KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNjYWxlICE9PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2hSZWYuc2NhbGUuc2V0U2NhbGFyKDEgLyAoc2NhbGUgYXMgbnVtYmVyKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNjYWxlIGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLmNvcHkoc2NhbGUuY2xvbmUoKS5kaXZpZGVTY2FsYXIoMSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZi5zY2FsZS5zZXQoMSAvIHNjYWxlWzBdLCAxIC8gc2NhbGVbMV0sIDEgLyBzY2FsZVsyXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHJhdGlvID0gKGRpc3RhbmNlRmFjdG9yIHx8IDEwKSAvIDQwMDtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB3ID0gZWwuY2xpZW50V2lkdGggKiByYXRpbztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoID0gZWwuY2xpZW50SGVpZ2h0ICogcmF0aW87XG5cblx0XHRcdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLnNldCh3LCBoLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRoaXMuaXNNZXNoU2l6ZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGVsZSA9IGVsZW1lbnQuY2hpbGRyZW5bMF07XG5cblx0XHRcdFx0XHRpZiAoZWxlPy5jbGllbnRXaWR0aCAmJiBlbGU/LmNsaWVudEhlaWdodCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmF0aW8gPSAxIC8gdmlld3BvcnQuZmFjdG9yO1xuXHRcdFx0XHRcdFx0Y29uc3QgdyA9IGVsZS5jbGllbnRXaWR0aCAqIHJhdGlvO1xuXHRcdFx0XHRcdFx0Y29uc3QgaCA9IGVsZS5jbGllbnRIZWlnaHQgKiByYXRpbztcblxuXHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZi5zY2FsZS5zZXQodywgaCwgMSk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXNNZXNoU2l6ZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZi5sb29rQXQoZ2wuY2FtZXJhLnBvc2l0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -973,7 +973,7 @@ class NgtsHtmlWrapper {
|
|
|
973
973
|
this.htmlInputs = injectNgtsHtmlInputs();
|
|
974
974
|
this.store = injectNgtStore();
|
|
975
975
|
this.gl = this.store.select('gl');
|
|
976
|
-
this.connected = this.store.select('events', 'connected'
|
|
976
|
+
this.connected = this.store.select('events', 'connected');
|
|
977
977
|
this.viewport = this.store.select('viewport');
|
|
978
978
|
this.scene = this.store.select('scene');
|
|
979
979
|
this.camera = this.store.select('camera');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/animations/animations.ts","../../../../libs/soba/misc/src/bake-shadows/bake-shadows.ts","../../../../libs/soba/misc/src/fbo/fbo.ts","../../../../libs/soba/misc/src/caustics/caustics.ts","../../../../libs/soba/misc/src/decal/decal.ts","../../../../libs/soba/misc/src/depth-buffer/depth-buffer.ts","../../../../libs/soba/misc/src/example/example.ts","../../../../libs/soba/misc/src/html/html-wrapper.ts","../../../../libs/soba/misc/src/html/html.ts","../../../../libs/soba/misc/src/sampler/sampler.ts","../../../../libs/soba/misc/src/shadow/shadow.ts","../../../../libs/soba/misc/src/stats-gl/stats-gl.ts","../../../../libs/soba/misc/src/trail-texture/trail-texture.ts","../../../../libs/soba/misc/src/trail-texture/inject-trail-texture.ts","../../../../libs/soba/misc/src/trail/trail.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { Injector, computed, effect, runInInjectionContext } from '@angular/core';\nimport { injectBeforeRender, injectNgtRef, type NgtRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport function injectNgtsAnimations(\n\tanimationsFactory: () => THREE.AnimationClip[],\n\t{\n\t\tref,\n\t\tinjector,\n\t\tplayFirstClip = true,\n\t}: { ref?: NgtRef<THREE.Object3D>; playFirstClip?: boolean; injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsAnimations, injector);\n\n\tconst mixer = new THREE.AnimationMixer(null!);\n\tconst actions = {} as Record<string, THREE.AnimationAction>;\n\tlet cached = {} as Record<string, THREE.AnimationAction>;\n\tlet object: THREE.Object3D | null = null;\n\tconst names = [] as string[];\n\tconst clips = [] as THREE.AnimationClip[];\n\n\treturn runInInjectionContext(injector, () => {\n\t\tlet actualRef = injectNgtRef<THREE.Object3D>();\n\n\t\tif (ref) {\n\t\t\tif (ref instanceof THREE.Object3D) {\n\t\t\t\tactualRef.nativeElement = ref;\n\t\t\t} else {\n\t\t\t\tactualRef = ref;\n\t\t\t}\n\t\t}\n\n\t\tinjectBeforeRender(({ delta }) => mixer.update(delta));\n\n\t\tconst ready = computed(() => !!actualRef.nativeElement && !!animationsFactory().length);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst actual = actualRef.nativeElement;\n\t\t\tif (!actual) return;\n\t\t\tobject = actual;\n\t\t\tconst animations = animationsFactory();\n\n\t\t\tfor (let i = 0; i < animations.length; i++) {\n\t\t\t\tconst clip = animations[i];\n\n\t\t\t\tnames.push(clip.name);\n\t\t\t\tclips.push(clip);\n\n\t\t\t\tObject.defineProperty(actions, clip.name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\treturn cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (i === 0 && playFirstClip) {\n\t\t\t\t\tactions[clip.name].play();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonCleanup(() => {\n\t\t\t\t// clear cached\n\t\t\t\tcached = {};\n\t\t\t\t// stop all actions\n\t\t\t\tmixer.stopAllAction();\n\t\t\t\t// uncache actions\n\t\t\t\tObject.values(actions).forEach((action) => {\n\t\t\t\t\tmixer.uncacheAction(action as unknown as THREE.AnimationClip, object!);\n\t\t\t\t});\n\n\t\t\t\tobject = null;\n\t\t\t});\n\t\t});\n\n\t\treturn { ref: actualRef, actions, mixer, names, clips, ready };\n\t});\n}\n","import { Directive, effect } from '@angular/core';\nimport { injectNgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows {\n\tconstructor() {\n\t\tconst store = injectNgtStore();\n\t\tconst glShadowMap = store.select('gl', 'shadowMap');\n\t\teffect((onCleanup) => {\n\t\t\tconst shadowMap = glShadowMap();\n\t\t\tshadowMap.autoUpdate = false;\n\t\t\tshadowMap.needsUpdate = true;\n\t\t\tonCleanup(() => {\n\t\t\t\tshadowMap.autoUpdate = shadowMap.needsUpdate = true;\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDestroyRef,\n\tcomputed,\n\teffect,\n\tinject,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport { injectNgtStore, safeDetectChanges } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n\t/** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n\tsamples?: number;\n\t/** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n\tdepth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n\twidth?: number | FBOSettings;\n\theight?: number;\n\tsettings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(fboParams: () => NgtsFBOParams, { injector }: { injector?: Injector } = {}) {\n\tinjector = assertInjector(injectNgtsFBO, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst store = injectNgtStore();\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\tconst targetSignal = signal<THREE.WebGLRenderTarget | null>(null);\n\n\t\tinject(DestroyRef).onDestroy(() => targetSignal()?.dispose());\n\n\t\tconst [defaultWidth, defaultHeight, dpr] = [\n\t\t\tstore.select('size', 'width'),\n\t\t\tstore.select('size', 'height'),\n\t\t\tstore.select('viewport', 'dpr'),\n\t\t];\n\t\tconst fboSettings = computed(() => {\n\t\t\tconst { width, height, settings } = fboParams();\n\t\t\treturn [\n\t\t\t\ttypeof width === 'number' ? width : defaultWidth() * dpr(),\n\t\t\t\ttypeof height === 'number' ? height : defaultHeight() * dpr(),\n\t\t\t\t(typeof width === 'number' ? settings : (width as FBOSettings)) || {},\n\t\t\t] as const;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [width, height, { samples = 0, depth, ...settings }] = fboSettings();\n\t\t\tlet untrackedTarget = untracked(targetSignal);\n\t\t\tif (!untrackedTarget) {\n\t\t\t\tconst target = new THREE.WebGLRenderTarget(width, height, {\n\t\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\t\ttype: THREE.HalfFloatType,\n\t\t\t\t\t...settings,\n\t\t\t\t});\n\t\t\t\tif (depth) target.depthTexture = new THREE.DepthTexture(width, height, THREE.FloatType);\n\n\t\t\t\ttarget.samples = samples;\n\t\t\t\tuntracked(() => {\n\t\t\t\t\ttargetSignal.set(target);\n\t\t\t\t});\n\t\t\t\tuntrackedTarget = untracked(targetSignal);\n\t\t\t}\n\n\t\t\tif (untrackedTarget) {\n\t\t\t\tuntrackedTarget.setSize(width, height);\n\t\t\t\tif (samples) untrackedTarget.samples = samples;\n\t\t\t\tsafeDetectChanges(cdr);\n\t\t\t}\n\t\t});\n\n\t\treturn targetSignal.asReadonly();\n\t});\n}\n","import { NgIf } from '@angular/common';\nimport { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, ElementRef, Input } from '@angular/core';\nimport { extend, injectNgtRef, injectNgtStore, signalStore, type NgtGroup } from 'angular-three';\nimport { NgtsEdges } from 'angular-three-soba/abstractions';\nimport { CausticsMaterial, CausticsProjectionMaterial } from 'angular-three-soba/shaders';\nimport { NgtsSobaContent } from 'angular-three-soba/utils';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, Mesh, OrthographicCamera, PlaneGeometry, Scene } from 'three';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nextend({ Group, Scene, Mesh, PlaneGeometry, OrthographicCamera, CausticsProjectionMaterial, LineBasicMaterial });\n\nconst NORMALPROPS = {\n\tdepth: true,\n\tminFilter: THREE.LinearFilter,\n\tmagFilter: THREE.LinearFilter,\n\ttype: THREE.UnsignedByteType,\n};\n\nconst CAUSTICPROPS = {\n\tminFilter: THREE.LinearMipmapLinearFilter,\n\tmagFilter: THREE.LinearFilter,\n\ttype: THREE.FloatType,\n\tgenerateMipmaps: true,\n};\n\ntype CausticsMaterialType = THREE.ShaderMaterial & {\n\tcameraMatrixWorld?: THREE.Matrix4;\n\tcameraProjectionMatrixInv?: THREE.Matrix4;\n\tlightPlaneNormal?: THREE.Vector3;\n\tlightPlaneConstant?: number;\n\tnormalTexture?: THREE.Texture | null;\n\tdepthTexture?: THREE.Texture | null;\n\tlightDir?: THREE.Vector3;\n\tnear?: number;\n\tfar?: number;\n\tmodelMatrix?: THREE.Matrix4;\n\tworldRadius?: number;\n\tior?: number;\n\tbounces?: number;\n\tresolution?: number;\n\tsize?: number;\n\tintensity?: number;\n};\n\ntype CausticsProjectionMaterialType = THREE.MeshNormalMaterial & {\n\tviewMatrix: { value?: THREE.Matrix4 };\n\tcolor?: THREE.Color;\n\tcausticsTexture?: THREE.Texture;\n\tcausticsTextureB?: THREE.Texture;\n\tlightProjMatrix?: THREE.Matrix4;\n\tlightViewMatrix?: THREE.Matrix4;\n};\n\nfunction createNormalMaterial(side: THREE.Side = THREE.FrontSide) {\n\tconst viewMatrix = { value: new THREE.Matrix4() };\n\treturn Object.assign(new THREE.MeshNormalMaterial({ side }), {\n\t\tviewMatrix,\n\t\tonBeforeCompile: (shader: any) => {\n\t\t\tshader.uniforms.viewMatrix = viewMatrix;\n\t\t\tshader.fragmentShader =\n\t\t\t\t`vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n }\\n` +\n\t\t\t\tshader.fragmentShader.replace(\n\t\t\t\t\t'#include <normal_fragment_maps>',\n\t\t\t\t\t`#include <normal_fragment_maps>\n normal = inverseTransformDirection( normal, viewMatrix );\\n`,\n\t\t\t\t);\n\t\t},\n\t});\n}\n\nexport type NgtsCausticsState = {\n\t/** How many frames it will render, set it to Infinity for runtime, default: 1 */\n\tframes: number;\n\t/** Enables visual cues to help you stage your scene, default: false */\n\tdebug: boolean;\n\t/** Will display caustics only and skip the models, default: false */\n\tcausticsOnly: boolean;\n\t/** Will include back faces and enable the backsideIOR prop, default: false */\n\tbackside: boolean;\n\t/** The IOR refraction index, default: 1.1 */\n\tior: number;\n\t/** The IOR refraction index for back faces (only available when backside is enabled), default: 1.1 */\n\tbacksideIOR: number;\n\t/** The texel size, default: 0.3125 */\n\tworldRadius: number;\n\t/** Intensity of the prjected caustics, default: 0.05 */\n\tintensity: number;\n\t/** Caustics color, default: white */\n\tcolor: THREE.ColorRepresentation;\n\t/** Buffer resolution, default: 2048 */\n\tresolution: number;\n\t/** Camera position, it will point towards the contents bounds center, default: [5, 5, 5] */\n\tlightSource: [x: number, y: number, z: number] | ElementRef<THREE.Object3D>;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-caustics': NgtsCausticsState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-caustics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group [ref]=\"causticsRef\" ngtCompound>\n\t\t\t<ngt-scene [ref]=\"sceneRef\">\n\t\t\t\t<ngt-orthographic-camera [ref]=\"cameraRef\" [up]=\"[0, 1, 0]\" />\n\t\t\t\t<ng-content />\n\t\t\t</ngt-scene>\n\t\t\t<ngt-mesh [renderOrder]=\"2\" [ref]=\"planeRef\" [rotation]=\"[-Math.PI / 2, 0, 0]\">\n\t\t\t\t<ngt-plane-geometry />\n\t\t\t\t<ngt-caustics-projection-material\n\t\t\t\t\t*ngIf=\"causticsTargetFbo() && causticsTargetBFbo()\"\n\t\t\t\t\t[transparent]=\"true\"\n\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t[causticsTexture]=\"causticsTargetFbo()!.texture\"\n\t\t\t\t\t[causticsTextureB]=\"causticsTargetBFbo()!.texture\"\n\t\t\t\t\t[blending]=\"CustomBlending\"\n\t\t\t\t\t[blendSrc]=\"OneFactor\"\n\t\t\t\t\t[blendDst]=\"SrcAlphaFactor\"\n\t\t\t\t\t[depthWrite]=\"false\"\n\t\t\t\t/>\n\n\t\t\t\t<ngts-edges *ngIf=\"debug()\">\n\t\t\t\t\t<ngt-line-basic-material *ngtsSobaContent color=\"#ffff00\" [toneMapped]=\"false\" />\n\t\t\t\t</ngts-edges>\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\t`,\n\timports: [NgIf, NgtsEdges, NgtsSobaContent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsCaustics {\n\tCustomBlending = THREE.CustomBlending;\n\tOneFactor = THREE.OneFactor;\n\tSrcAlphaFactor = THREE.SrcAlphaFactor;\n\tMath = Math;\n\n\tprivate inputs = signalStore<NgtsCausticsState>({\n\t\tframes: 1,\n\t\tior: 1.1,\n\t\tcolor: 'white',\n\t\tcausticsOnly: false,\n\t\tbackside: false,\n\t\tbacksideIOR: 1.1,\n\t\tworldRadius: 0.3125,\n\t\tintensity: 0.05,\n\t\tresolution: 2024,\n\t\tlightSource: [5, 5, 5],\n\t});\n\n\t@Input() causticsRef = injectNgtRef<THREE.Group>();\n\n\t/** How many frames it will render, set it to Infinity for runtime, default: 1 */\n\t@Input({ alias: 'frames' }) set _frames(frames: number) {\n\t\tthis.inputs.set({ frames });\n\t}\n\t/** Enables visual cues to help you stage your scene, default: false */\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\t/** Will display caustics only and skip the models, default: false */\n\t@Input({ alias: 'causticsOnly' }) set _causticsOnly(causticsOnly: boolean) {\n\t\tthis.inputs.set({ causticsOnly });\n\t}\n\t/** Will include back faces and enable the backsideIOR prop, default: false */\n\t@Input({ alias: 'backside' }) set _backside(backside: boolean) {\n\t\tthis.inputs.set({ backside });\n\t}\n\t/** The IOR refraction index, default: 1.1 */\n\t@Input({ alias: 'ior' }) set _ior(ior: number) {\n\t\tthis.inputs.set({ ior });\n\t}\n\t/** The IOR refraction index for back faces (only available when backside is enabled), default: 1.1 */\n\t@Input({ alias: 'backsideIOR' }) set _backsideIOR(backsideIOR: number) {\n\t\tthis.inputs.set({ backsideIOR });\n\t}\n\t/** The texel size, default: 0.3125 */\n\t@Input({ alias: 'worldRadius' }) set _worldRadius(worldRadius: number) {\n\t\tthis.inputs.set({ worldRadius });\n\t}\n\t/** Intensity of the prjected caustics, default: 0.05 */\n\t@Input({ alias: 'intensity' }) set _intensity(intensity: number) {\n\t\tthis.inputs.set({ intensity });\n\t}\n\t/** Caustics color, default: white */\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\t/** Buffer resolution, default: 2048 */\n\t@Input({ alias: 'resolution' }) set _resolution(resolution: number) {\n\t\tthis.inputs.set({ resolution });\n\t}\n\t/** Camera position, it will point towards the contents bounds center, default: [5, 5, 5] */\n\t@Input({ alias: 'lightSource' }) set _lightSource(\n\t\tlightSource: [x: number, y: number, z: number] | ElementRef<THREE.Object3D>,\n\t) {\n\t\tthis.inputs.set({ lightSource });\n\t}\n\n\tprivate resolution = this.inputs.select('resolution');\n\n\tprivate normalTargetSettings = computed(() => ({\n\t\twidth: this.resolution(),\n\t\theight: this.resolution(),\n\t\tsettings: NORMALPROPS,\n\t}));\n\n\tprivate causticsTargetSettings = computed(() => ({\n\t\twidth: this.resolution(),\n\t\theight: this.resolution(),\n\t\tsettings: CAUSTICPROPS,\n\t}));\n\n\tprivate normalTargetFbo = injectNgtsFBO(this.normalTargetSettings);\n\tprivate normalTargetBFbo = injectNgtsFBO(this.normalTargetSettings);\n\tcausticsTargetFbo = injectNgtsFBO(this.causticsTargetSettings);\n\tcausticsTargetBFbo = injectNgtsFBO(this.causticsTargetSettings);\n\n\tprivate store = injectNgtStore();\n\n\tcolor = this.inputs.select('color');\n\tdebug = this.inputs.select('debug');\n\n\tplaneRef = injectNgtRef<THREE.Mesh>();\n\tsceneRef = injectNgtRef<THREE.Scene>();\n\tcameraRef = injectNgtRef<THREE.OrthographicCamera>();\n\n\tprivate sceneChildren = this.sceneRef.children();\n\tprivate planeChildren = this.planeRef.children('both');\n\tprivate causticsChildren = this.causticsRef.children();\n\n\tconstructor() {\n\t\tthis.updateWorldMatrix();\n\t\tthis.setBeforeRender();\n\t}\n\n\tprivate updateWorldMatrix() {\n\t\teffect(() => {\n\t\t\tconst [caustics] = [\n\t\t\t\tthis.causticsRef.nativeElement,\n\t\t\t\tthis.inputs.state(),\n\t\t\t\tthis.causticsChildren(),\n\t\t\t\tthis.sceneChildren(),\n\t\t\t];\n\t\t\tif (!caustics) return;\n\t\t\tcaustics.updateWorldMatrix(false, true);\n\t\t});\n\t}\n\n\tprivate setBeforeRender() {\n\t\tconst causticsMaterial = new CausticsMaterial() as CausticsMaterialType;\n\t\tconst causticsQuad = new FullScreenQuad(causticsMaterial);\n\n\t\tconst normalMaterial = createNormalMaterial();\n\t\tconst normalMaterialB = createNormalMaterial(THREE.BackSide);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst [\n\t\t\t\tcaustics,\n\t\t\t\tscene,\n\t\t\t\tcamera,\n\t\t\t\tnormalTarget,\n\t\t\t\tnormalTargetB,\n\t\t\t\tcausticsTarget,\n\t\t\t\tcausticsTargetB,\n\t\t\t\tplane,\n\t\t\t\tsceneChildren,\n\t\t\t] = [\n\t\t\t\tthis.causticsRef.nativeElement,\n\t\t\t\tthis.sceneRef.nativeElement,\n\t\t\t\tthis.cameraRef.nativeElement,\n\t\t\t\tthis.normalTargetFbo(),\n\t\t\t\tthis.normalTargetBFbo(),\n\t\t\t\tthis.causticsTargetFbo(),\n\t\t\t\tthis.causticsTargetBFbo(),\n\t\t\t\tthis.planeRef.nativeElement,\n\t\t\t\tthis.sceneChildren(),\n\t\t\t\tthis.planeChildren(),\n\t\t\t];\n\n\t\t\tif (!caustics) return;\n\t\t\tcaustics.updateWorldMatrix(false, true);\n\n\t\t\tif (sceneChildren.length > 1) {\n\t\t\t\tconst v = new THREE.Vector3();\n\t\t\t\tconst lpF = new THREE.Frustum();\n\t\t\t\tconst lpM = new THREE.Matrix4();\n\t\t\t\tconst lpP = new THREE.Plane();\n\n\t\t\t\tconst lightDir = new THREE.Vector3();\n\t\t\t\tconst lightDirInv = new THREE.Vector3();\n\t\t\t\tconst bounds = new THREE.Box3();\n\t\t\t\tconst focusPos = new THREE.Vector3();\n\n\t\t\t\tlet count = 0;\n\t\t\t\tconst sub = this.store.get('internal').subscribe(({ gl }) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tframes,\n\t\t\t\t\t\tlightSource,\n\t\t\t\t\t\tresolution,\n\t\t\t\t\t\tworldRadius,\n\t\t\t\t\t\tintensity,\n\t\t\t\t\t\tbackside,\n\t\t\t\t\t\tbacksideIOR,\n\t\t\t\t\t\tior,\n\t\t\t\t\t\tcausticsOnly,\n\t\t\t\t\t} = this.inputs.get();\n\n\t\t\t\t\tif (frames === Infinity || count++ < frames) {\n\t\t\t\t\t\tif (Array.isArray(lightSource)) lightDir.fromArray(lightSource).normalize();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlightDir.copy(\n\t\t\t\t\t\t\t\tcaustics.worldToLocal(lightSource.nativeElement.getWorldPosition(v)).normalize(),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlightDirInv.copy(lightDir).multiplyScalar(-1);\n\n\t\t\t\t\t\tlet boundsVertices: THREE.Vector3[] = [];\n\t\t\t\t\t\tscene.parent?.matrixWorld.identity();\n\t\t\t\t\t\tbounds.setFromObject(scene, true);\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.min.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.min.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.max.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.max.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.min.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.min.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.max.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.max.y, bounds.max.z));\n\n\t\t\t\t\t\tconst worldVerts = boundsVertices.map((v) => v.clone());\n\n\t\t\t\t\t\tbounds.getCenter(focusPos);\n\t\t\t\t\t\tboundsVertices = boundsVertices.map((v) => v.clone().sub(focusPos));\n\t\t\t\t\t\tconst lightPlane = lpP.set(lightDirInv, 0);\n\t\t\t\t\t\tconst projectedVerts = boundsVertices.map((v) =>\n\t\t\t\t\t\t\tlightPlane.projectPoint(v, new THREE.Vector3()),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst centralVert = projectedVerts\n\t\t\t\t\t\t\t.reduce((a, b) => a.add(b), v.set(0, 0, 0))\n\t\t\t\t\t\t\t.divideScalar(projectedVerts.length);\n\t\t\t\t\t\tconst radius = projectedVerts\n\t\t\t\t\t\t\t.map((v) => v.distanceTo(centralVert))\n\t\t\t\t\t\t\t.reduce((a, b) => Math.max(a, b));\n\t\t\t\t\t\tconst dirLength = boundsVertices.map((x) => x.dot(lightDir)).reduce((a, b) => Math.max(a, b));\n\n\t\t\t\t\t\t// Shadows\n\t\t\t\t\t\tcamera.position.copy(lightDir.clone().multiplyScalar(dirLength).add(focusPos));\n\t\t\t\t\t\tcamera.lookAt(scene.localToWorld(focusPos.clone()));\n\t\t\t\t\t\tconst dirMatrix = lpM.lookAt(camera.position, focusPos, v.set(0, 1, 0));\n\t\t\t\t\t\tcamera.left = -radius;\n\t\t\t\t\t\tcamera.right = radius;\n\t\t\t\t\t\tcamera.top = radius;\n\t\t\t\t\t\tcamera.bottom = -radius;\n\t\t\t\t\t\tconst yOffset = v.set(0, radius, 0).applyMatrix4(dirMatrix);\n\t\t\t\t\t\tconst yTime = (camera.position.y + yOffset.y) / lightDir.y;\n\t\t\t\t\t\tcamera.near = 0.1;\n\t\t\t\t\t\tcamera.far = yTime;\n\t\t\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\t\t\tcamera.updateMatrixWorld();\n\n\t\t\t\t\t\t// Now find size of ground plane\n\t\t\t\t\t\tconst groundProjectedCoords = worldVerts.map((v) =>\n\t\t\t\t\t\t\tv.add(lightDir.clone().multiplyScalar(-v.y / lightDir.y)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst centerPos = groundProjectedCoords\n\t\t\t\t\t\t\t.reduce((a, b) => a.add(b), v.set(0, 0, 0))\n\t\t\t\t\t\t\t.divideScalar(groundProjectedCoords.length);\n\t\t\t\t\t\tconst maxSize =\n\t\t\t\t\t\t\t2 *\n\t\t\t\t\t\t\tgroundProjectedCoords\n\t\t\t\t\t\t\t\t.map((v) => Math.hypot(v.x - centerPos.x, v.z - centerPos.z))\n\t\t\t\t\t\t\t\t.reduce((a, b) => Math.max(a, b));\n\t\t\t\t\t\tplane.scale.setScalar(maxSize);\n\t\t\t\t\t\tplane.position.copy(centerPos);\n\n\t\t\t\t\t\t// if (debug) helper.current?.update();\n\n\t\t\t\t\t\t// Inject uniforms\n\t\t\t\t\t\tnormalMaterialB.viewMatrix.value = normalMaterial.viewMatrix.value = camera.matrixWorldInverse;\n\n\t\t\t\t\t\tconst dirLightNearPlane = lpF.setFromProjectionMatrix(\n\t\t\t\t\t\t\tlpM.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse),\n\t\t\t\t\t\t).planes[4];\n\n\t\t\t\t\t\tcausticsMaterial.cameraMatrixWorld = camera.matrixWorld;\n\t\t\t\t\t\tcausticsMaterial.cameraProjectionMatrixInv = camera.projectionMatrixInverse;\n\t\t\t\t\t\tcausticsMaterial.lightDir = lightDirInv;\n\n\t\t\t\t\t\tcausticsMaterial.lightPlaneNormal = dirLightNearPlane.normal;\n\t\t\t\t\t\tcausticsMaterial.lightPlaneConstant = dirLightNearPlane.constant;\n\n\t\t\t\t\t\tcausticsMaterial.near = camera.near;\n\t\t\t\t\t\tcausticsMaterial.far = camera.far;\n\t\t\t\t\t\tcausticsMaterial.resolution = resolution;\n\t\t\t\t\t\tcausticsMaterial.size = radius;\n\t\t\t\t\t\tcausticsMaterial.intensity = intensity;\n\t\t\t\t\t\tcausticsMaterial.worldRadius = worldRadius;\n\n\t\t\t\t\t\t// Switch the scene on\n\t\t\t\t\t\tscene.visible = true;\n\n\t\t\t\t\t\t// Render front face normals\n\t\t\t\t\t\tgl.setRenderTarget(normalTarget);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tscene.overrideMaterial = normalMaterial;\n\t\t\t\t\t\tgl.render(scene, camera);\n\n\t\t\t\t\t\t// Render back face normals, if enabled\n\t\t\t\t\t\tgl.setRenderTarget(normalTargetB);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tif (backside) {\n\t\t\t\t\t\t\tscene.overrideMaterial = normalMaterialB;\n\t\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Remove the override material\n\t\t\t\t\t\tscene.overrideMaterial = null;\n\n\t\t\t\t\t\t// Render front face caustics\n\t\t\t\t\t\tcausticsMaterial.ior = ior;\n\t\t\t\t\t\t(plane.material as CausticsProjectionMaterialType).lightProjMatrix = camera.projectionMatrix;\n\t\t\t\t\t\t(plane.material as CausticsProjectionMaterialType).lightViewMatrix = camera.matrixWorldInverse;\n\t\t\t\t\t\tcausticsMaterial.normalTexture = normalTarget?.texture;\n\t\t\t\t\t\tcausticsMaterial.depthTexture = normalTarget?.depthTexture;\n\t\t\t\t\t\tgl.setRenderTarget(causticsTarget);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tcausticsQuad.render(gl);\n\n\t\t\t\t\t\t// Render back face caustics, if enabled\n\t\t\t\t\t\tcausticsMaterial.ior = backsideIOR;\n\t\t\t\t\t\tcausticsMaterial.normalTexture = normalTargetB?.texture;\n\t\t\t\t\t\tcausticsMaterial.depthTexture = normalTargetB?.depthTexture;\n\t\t\t\t\t\tgl.setRenderTarget(causticsTargetB);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tif (backside) causticsQuad.render(gl);\n\n\t\t\t\t\t\t// Reset render target\n\t\t\t\t\t\tgl.setRenderTarget(null);\n\n\t\t\t\t\t\t// Switch the scene off if caustics is all that's wanted\n\t\t\t\t\t\tif (causticsOnly) scene.visible = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tonCleanup(() => sub());\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NgIf } from '@angular/common';\nimport { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, Input } from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tinjectNgtRef,\n\tis,\n\tsignalStore,\n\ttype NgtEuler,\n\ttype NgtMesh,\n\ttype NgtRef,\n\ttype NgtVector3,\n} from 'angular-three';\nimport * as THREE from 'three';\nimport { AxesHelper, BoxGeometry, Mesh, MeshNormalMaterial } from 'three';\nimport { DecalGeometry } from 'three-stdlib';\n\nextend({ Mesh, BoxGeometry, MeshNormalMaterial, AxesHelper });\n\nexport type NgtsDecalState = {\n\tdebug: boolean;\n\tmesh?: NgtRef<THREE.Mesh>;\n\tposition: NgtVector3;\n\trotation: NgtEuler | number;\n\tscale: NgtVector3;\n\tmap?: THREE.Texture;\n\tpolygonOffsetFactor: number;\n\tdepthTest: boolean;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-mesh\n\t\t */\n\t\t'ngts-decal': NgtsDecalState & NgtMesh;\n\t}\n}\n\nfunction vecToArray(vec: number[] | NgtVector3 | NgtEuler | number = [0, 0, 0]) {\n\tif (Array.isArray(vec)) {\n\t\treturn vec;\n\t}\n\n\tif (vec instanceof THREE.Vector3 || vec instanceof THREE.Euler) {\n\t\treturn [vec.x, vec.y, vec.z];\n\t}\n\n\treturn [vec, vec, vec];\n}\n\n@Component({\n\tselector: 'ngts-decal',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-mesh [ref]=\"decalRef\" ngtCompound>\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.transparent\" />\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.polygonOffset\" />\n\t\t\t<ngt-value [rawValue]=\"polygonOffsetFactor()\" attach=\"material.polygonOffsetFactor\" />\n\t\t\t<ngt-value [rawValue]=\"depthTest()\" attach=\"material.depthTest\" />\n\t\t\t<ngt-value [rawValue]=\"map()\" attach=\"material.map\" />\n\t\t\t<ng-content />\n\n\t\t\t<ngt-mesh *ngIf=\"debug()\" [ref]=\"helperRef\">\n\t\t\t\t<ngt-box-geometry />\n\t\t\t\t<ngt-mesh-normal-material [wireframe]=\"true\" />\n\t\t\t\t<ngt-axes-helper />\n\t\t\t</ngt-mesh>\n\t\t</ngt-mesh>\n\t`,\n\timports: [NgIf],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsDecal {\n\tprivate inputs = signalStore<NgtsDecalState>({\n\t\tdebug: false,\n\t\tdepthTest: false,\n\t\tpolygonOffsetFactor: -10,\n\t\tposition: [0, 0, 0],\n\t\trotation: [0, 0, 0],\n\t\tscale: 1,\n\t});\n\n\t@Input() decalRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\n\t@Input({ alias: 'mesh' }) set _mesh(mesh: NgtRef<THREE.Mesh>) {\n\t\tthis.inputs.set({ mesh });\n\t}\n\n\t@Input({ alias: 'position' }) set _position(position: NgtVector3) {\n\t\tthis.inputs.set({ position });\n\t}\n\n\t@Input({ alias: 'rotation' }) set _rotation(rotation: NgtEuler | number) {\n\t\tthis.inputs.set({ rotation });\n\t}\n\n\t@Input({ alias: 'scale' }) set _scale(scale: NgtVector3) {\n\t\tthis.inputs.set({ scale });\n\t}\n\n\t@Input({ alias: 'map' }) set _map(map: THREE.Texture) {\n\t\tthis.inputs.set({ map });\n\t}\n\n\t@Input({ alias: 'polygonOffsetFactor' }) set _polygonOffsetFactor(polygonOffsetFactor: number) {\n\t\tthis.inputs.set({ polygonOffsetFactor });\n\t}\n\n\t@Input({ alias: 'depthTest' }) set _depthTest(depthTest: boolean) {\n\t\tthis.inputs.set({ depthTest });\n\t}\n\n\tprivate mesh = this.inputs.select('mesh');\n\tprivate __position = this.inputs.select('position');\n\tprivate __rotation = this.inputs.select('rotation');\n\tprivate __scale = this.inputs.select('scale');\n\tprivate position = computed(() => vecToArray(this.__position()));\n\tprivate rotation = computed(() => vecToArray(this.__rotation()));\n\tprivate scale = computed(() => vecToArray(this.__scale()));\n\n\thelperRef = injectNgtRef<Mesh>();\n\n\tdebug = this.inputs.select('debug');\n\tdepthTest = this.inputs.select('depthTest');\n\tpolygonOffsetFactor = this.inputs.select('polygonOffsetFactor');\n\tmap = this.inputs.select('map');\n\n\tconstructor() {\n\t\tthis.processDecal();\n\t}\n\n\tprivate processDecal() {\n\t\teffect((onCleanup) => {\n\t\t\tconst decal = this.decalRef.nativeElement;\n\t\t\tif (!decal) return;\n\n\t\t\tconst [mesh, position, rotation, scale, helper] = [\n\t\t\t\tthis.mesh(),\n\t\t\t\tthis.position(),\n\t\t\t\tthis.rotation(),\n\t\t\t\tthis.scale(),\n\t\t\t\tthis.helperRef.nativeElement,\n\t\t\t];\n\n\t\t\tconst parent = mesh ? (is.ref(mesh) ? mesh.nativeElement : mesh) : decal.parent;\n\t\t\tif (!(parent instanceof Mesh)) {\n\t\t\t\tthrow new Error('[NGT] ngts-decal must have a ngt-mesh as parent or specify its \"mesh\" input');\n\t\t\t}\n\n\t\t\tconst state = {\n\t\t\t\tposition: new THREE.Vector3(),\n\t\t\t\trotation: new THREE.Euler(),\n\t\t\t\tscale: new THREE.Vector3(1, 1, 1),\n\t\t\t};\n\n\t\t\tif (parent) {\n\t\t\t\tapplyProps(state, { position, scale });\n\n\t\t\t\t// Zero out the parents matrix world for this operation\n\t\t\t\tconst matrixWorld = parent.matrixWorld.clone();\n\t\t\t\tparent.matrixWorld.identity();\n\n\t\t\t\tif (!rotation || typeof rotation === 'number') {\n\t\t\t\t\tconst o = new THREE.Object3D();\n\n\t\t\t\t\to.position.copy(state.position);\n\t\t\t\t\to.lookAt(parent.position);\n\t\t\t\t\tif (typeof rotation === 'number') o.rotateZ(rotation);\n\t\t\t\t\tapplyProps(state, { rotation: o.rotation });\n\t\t\t\t} else {\n\t\t\t\t\tapplyProps(state, { rotation });\n\t\t\t\t}\n\n\t\t\t\tdecal.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale);\n\t\t\t\tif (helper) {\n\t\t\t\t\tapplyProps(helper, state);\n\t\t\t\t\t// Prevent the helpers from blocking rays\n\t\t\t\t\thelper.traverse((child) => (child.raycast = () => null));\n\t\t\t\t}\n\t\t\t\t// Reset parents matix-world\n\t\t\t\tparent.matrixWorld = matrixWorld;\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tdecal.geometry.dispose();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\teffect,\n\tinject,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport { injectBeforeRender, injectNgtStore, safeDetectChanges } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n\tsize: number;\n\tframes: number;\n}\n\nexport function injectNgtsDepthBuffer(\n\tparamsFactory: () => Partial<NgtsDepthBufferParams> = () => ({}),\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsDepthBuffer, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst depthBufferSignal = signal<THREE.DepthTexture | null>(null);\n\t\tconst store = injectNgtStore();\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\tconst [defaultWidth, defaultHeight, dpr] = [\n\t\t\tstore.select('size', 'width'),\n\t\t\tstore.select('size', 'height'),\n\t\t\tstore.select('viewport', 'dpr'),\n\t\t];\n\n\t\tconst fboParams = computed(() => {\n\t\t\tconst params = { size: 256, frames: Infinity, ...paramsFactory() };\n\t\t\tconst width = params.size || defaultWidth() * dpr();\n\t\t\tconst height = params.size || defaultHeight() * dpr();\n\t\t\tconst depthTexture = new THREE.DepthTexture(width, height);\n\t\t\tdepthTexture.format = THREE.DepthFormat;\n\t\t\tdepthTexture.type = THREE.UnsignedShortType;\n\t\t\treturn { width, height, settings: { depthTexture } };\n\t\t});\n\n\t\tconst _fbo = injectNgtsFBO(fboParams, { injector });\n\n\t\teffect(() => {\n\t\t\tconst fbo = _fbo();\n\t\t\tif (fbo) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tdepthBufferSignal.set(fbo.depthTexture);\n\t\t\t\t});\n\t\t\t\tsafeDetectChanges(cdr);\n\t\t\t}\n\t\t});\n\n\t\tlet count = 0;\n\t\tinjectBeforeRender(\n\t\t\t({ gl, scene, camera }) => {\n\t\t\t\tconst params = { size: 256, frames: Infinity, ...paramsFactory() };\n\t\t\t\tconst fbo = _fbo();\n\t\t\t\tif ((params.frames === Infinity || count < params.frames) && fbo) {\n\t\t\t\t\tgl.setRenderTarget(fbo);\n\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector },\n\t\t);\n\n\t\treturn depthBufferSignal.asReadonly();\n\t});\n}\n","import { NgIf } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, forwardRef, signal } from '@angular/core';\nimport { extend, injectNgtRef, signalStore } from 'angular-three';\nimport { NgtsText3D } from 'angular-three-soba/abstractions';\nimport { NgtsCenter } from 'angular-three-soba/staging';\nimport { createInjectionToken } from 'ngxtension/create-injection-token';\nimport { Group, MeshNormalMaterial, MeshStandardMaterial } from 'three';\n\n/**\n * define states of a component. usually acts for inputs signalStore\n */\nexport type NgtsExampleState = {\n\tfont: string;\n\tcolor: THREE.ColorRepresentation;\n\tdebug: boolean;\n\tbevelSize: number;\n};\n\n/**\n * augment HTMLElementTagNameMap with the selector of the component.\n * the type is usually the Inputs' state and the root THREE element\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t\\/**\n\t\t * @extends ngt-group\n\t\t *\\/\n\t\t'ngts-example': NgtsExampleState & NgtGroup;\n\t}\n}\n\n*/\n\n/**\n * make sure soba's component extends all regular THREE entities that it needs\n */\nextend({ Group, MeshNormalMaterial, MeshStandardMaterial });\n\n/**\n * We can setup public API for this soba component with createInjectionToken + forwardRef\n * the `example.api` is **usually** a computed property in the component class\n *\n * @see Bounds for example\n */\nexport const [injectNgtsExampleApi, provideNgtsExampleApi] = createInjectionToken(\n\t(example: NgtsExample) => example.api,\n\t{ isRoot: false, deps: [forwardRef(() => NgtsExample)] },\n);\n\n@Component({\n\tselector: 'ngts-example',\n\tstandalone: true,\n\ttemplate: `\n\t\t<!-- ngtCompound is used by the Renderer to spread props from ngts-example down to ngt-group -->\n\t\t<!-- i.e: <ngts-example [position]=\"[1, 1, 1]\" />, [1, 1, 1] will be passed down to ngt-group -->\n\t\t<!-- [ref] is used with the Input so that the consumer can pass an external ref and control this internal ngt-group -->\n\t\t<ngt-group ngtCompound [ref]=\"exampleRef\">\n\t\t\t<ngts-center [top]=\"true\">\n\t\t\t\t<ngts-text-3d\n\t\t\t\t\t[bevelEnabled]=\"true\"\n\t\t\t\t\t[bevelSize]=\"bevelSize()\"\n\t\t\t\t\t[font]=\"font()\"\n\t\t\t\t\t[text]=\"count().toString()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-mesh-standard-material *ngIf=\"!debug(); else withDebug\" [color]=\"color()\" />\n\t\t\t\t\t<ng-template #withDebug>\n\t\t\t\t\t\t<ngt-mesh-normal-material [wireframe]=\"true\" />\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ngts-text-3d>\n\t\t\t</ngts-center>\n\t\t\t<!-- use Content Projection here so consumers can pass in children for ngt-group -->\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\t/**\n\t * can definitely use other Soba components\n\t */\n\timports: [NgtsCenter, NgtsText3D, NgIf],\n\t/**\n\t * call the API provider here to actually provide the API for the component's children\n\t */\n\tproviders: [provideNgtsExampleApi()],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\n/**\n * @description this component is only for documentation purposes.\n */\nexport class NgtsExample {\n\t/**\n\t * use signalStore to store inputs with default inputs\n\t */\n\tprivate inputs = signalStore<NgtsExampleState>({ color: '#cbcbcb', bevelSize: 0.04, debug: false });\n\n\t/**\n\t * a soba component usually has a Input for the component ref and this Input always has a default value with injectNgtRef\n\t */\n\t@Input() exampleRef = injectNgtRef<Group>();\n\n\t/**\n\t * setup Input for the Inputs state. Use alias to have an easier time to setup computed\n\t *\n\t * @example: this way \"private font\" and \"set _font\" won't conflict\n\t * private font = this.inputs.select('font');\n\t */\n\t@Input({ alias: 'font', required: true }) set _font(font: string) {\n\t\tthis.inputs.set({ font });\n\t}\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\n\t@Input({ alias: 'bevelSize' }) set _bevelSize(bevelSize: number) {\n\t\tthis.inputs.set({ bevelSize });\n\t}\n\n\t/**\n\t * exposes signals from inputs\n\t */\n\tbevelSize = this.inputs.select('bevelSize');\n\tfont = this.inputs.select('font');\n\tdebug = this.inputs.select('debug');\n\tcolor = this.inputs.select('color');\n\n\t/**\n\t * can have internal state\n\t */\n\tcount = signal(0);\n\n\t/**\n\t * Expose the public API for this soba component\n\t */\n\tapi = computed(() => ({\n\t\tbevelSize: this.bevelSize(),\n\t\tincrement: () => this.count.update((v) => v + 1),\n\t\tdecrement: () => this.count.update((v) => v - 1),\n\t}));\n}\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tElementRef,\n\tEmbeddedViewRef,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tuntracked,\n} from '@angular/core';\nimport { HTML, injectBeforeRender, injectNgtStore, is, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\nimport { injectNgtsHtmlInputs } from './html';\n\nconst v1 = new THREE.Vector3();\nconst v2 = new THREE.Vector3();\nconst v3 = new THREE.Vector3();\n\nexport function defaultCalculatePosition(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\tsize: { width: number; height: number },\n) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tobjectPos.project(camera);\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\treturn [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\n\nfunction isObjectBehindCamera(el: THREE.Object3D, camera: THREE.Camera) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\tconst deltaCamObj = objectPos.sub(cameraPos);\n\tconst camDir = camera.getWorldDirection(v3);\n\treturn deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\n\nfunction isObjectVisible(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\traycaster: THREE.Raycaster,\n\tocclude: THREE.Object3D[],\n) {\n\tconst elPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst screenPos = elPos.clone();\n\tscreenPos.project(camera);\n\traycaster.setFromCamera(screenPos as any, camera);\n\tconst intersects = raycaster.intersectObjects(occlude, true);\n\tif (intersects.length) {\n\t\tconst intersectionDistance = intersects[0].distance;\n\t\tconst pointDistance = elPos.distanceTo(raycaster.ray.origin);\n\t\treturn pointDistance < intersectionDistance;\n\t}\n\treturn true;\n}\n\nfunction objectScale(el: THREE.Object3D, camera: THREE.Camera) {\n\tif (camera instanceof THREE.OrthographicCamera) {\n\t\treturn camera.zoom;\n\t} else if (camera instanceof THREE.PerspectiveCamera) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst vFOV = (camera.fov * Math.PI) / 180;\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n\t\treturn 1 / scaleFOV;\n\t} else {\n\t\treturn 1;\n\t}\n}\n\nfunction objectZIndex(el: THREE.Object3D, camera: THREE.Camera, zIndexRange: Array<number>) {\n\tif (camera instanceof THREE.PerspectiveCamera || camera instanceof THREE.OrthographicCamera) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n\t\tconst B = zIndexRange[1] - A * camera.far;\n\t\treturn Math.round(A * dist + B);\n\t}\n\treturn undefined;\n}\n\nconst epsilon = (value: number) => (Math.abs(value) < 1e-10 ? 0 : value);\n\nfunction getCSSMatrix(matrix: THREE.Matrix4, multipliers: number[], prepend = '') {\n\tlet matrix3d = 'matrix3d(';\n\tfor (let i = 0; i !== 16; i++) {\n\t\tmatrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n\t}\n\treturn prepend + matrix3d;\n}\n\nconst getCameraCSSMatrix = ((multipliers: number[]) => {\n\treturn (matrix: THREE.Matrix4) => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\n\nconst getObjectCSSMatrix = ((scaleMultipliers: (n: number) => number[]) => {\n\treturn (matrix: THREE.Matrix4, factor: number) =>\n\t\tgetCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');\n})((f: number) => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);\n\n@Component({\n\tselector: 'ngts-html-wrapper',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-template #transformTemplate>\n\t\t\t<div #transformedOuterDiv [style]=\"styles()\">\n\t\t\t\t<div #transformedInnerDiv [style]=\"transformInnerStyles()\">\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"renderTemplate; context: { styles: htmlInputs.style }\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ng-template>\n\n\t\t<ng-template #renderTemplate let-renderedStyles=\"styles\">\n\t\t\t<div #renderedDiv [class]=\"htmlInputs.renderedDivClass()\" [style]=\"renderedStyles()\">\n\t\t\t\t<ng-container #renderAnchor />\n\t\t\t</div>\n\t\t</ng-template>\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgtsHtmlWrapper {\n\tstatic [HTML] = true;\n\n\thtmlInputs = injectNgtsHtmlInputs();\n\n\t@ViewChild('transformTemplate', { static: true }) transformTemplate!: TemplateRef<unknown>;\n\t@ViewChild('renderTemplate', { static: true }) renderTemplate!: TemplateRef<unknown>;\n\n\t@ViewChild('transformedOuterDiv') outerDiv?: ElementRef<HTMLElement>;\n\t@ViewChild('transformedInnerDiv') innerDiv?: ElementRef<HTMLElement>;\n\t@ViewChild('renderAnchor', { read: ViewContainerRef }) renderAnchor?: ViewContainerRef;\n\n\tprivate store = injectNgtStore();\n\tprivate gl = this.store.select('gl');\n\tprivate connected = this.store.select('events', 'connected', { equal: Object.is });\n\tprivate viewport = this.store.select('viewport');\n\tprivate scene = this.store.select('scene');\n\tprivate camera = this.store.select('camera');\n\tprivate size = this.store.select('size');\n\tprivate raycaster = this.store.select('raycaster');\n\n\tprivate isMeshSizeSet = false;\n\n\tprivate document = inject(DOCUMENT);\n\tprivate vcr = inject(ViewContainerRef);\n\n\tprivate portalElement = computed(() => {\n\t\tconst portal = this.htmlInputs.portal();\n\t\tif (!portal) return null;\n\t\treturn is.ref(portal) ? portal.nativeElement : portal;\n\t});\n\n\tprivate element = computed(() => this.document.createElement(this.htmlInputs.as()) as HTMLElement);\n\tprivate target = computed(() => {\n\t\tconst portalElement = this.portalElement();\n\t\tif (portalElement) return portalElement;\n\t\tconst connected = this.connected();\n\t\tif (connected) return connected as HTMLElement;\n\t\treturn this.gl().domElement.parentElement!;\n\t});\n\n\tstyles = computed(() => {\n\t\tconst [style, center, transform, size, fullscreen] = [\n\t\t\tthis.htmlInputs.style(),\n\t\t\tthis.htmlInputs.center(),\n\t\t\tthis.htmlInputs.transform(),\n\t\t\tthis.size(),\n\t\t\tthis.htmlInputs.fullscreen(),\n\t\t];\n\n\t\tif (transform) {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: size.width,\n\t\t\t\theight: size.height,\n\t\t\t\ttransformStyle: 'preserve-3d',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tposition: 'absolute',\n\t\t\ttransform: center ? 'translate3d(-50%,-50%,0)' : 'none',\n\t\t\t...(fullscreen && {\n\t\t\t\ttop: -size.height / 2,\n\t\t\t\tleft: -size.width / 2,\n\t\t\t\twidth: size.width,\n\t\t\t\theight: size.height,\n\t\t\t}),\n\t\t\t...(style || {}),\n\t\t};\n\t});\n\ttransformInnerStyles = computed(() => ({ position: 'absolute', pointerEvents: this.htmlInputs.pointerEvents() }));\n\n\tconstructor() {\n\t\tthis.setCanvasElementStyle();\n\t\tthis.appendElement();\n\t\tthis.setWrapperClass();\n\t\tthis.render();\n\t\tthis.beforeRender();\n\t}\n\n\tprivate setCanvasElementStyle() {\n\t\teffect(() => {\n\t\t\tconst el = untracked(this.gl).domElement!;\n\t\t\tconst occlude = this.htmlInputs.occlude();\n\t\t\tif (occlude && occlude === 'blending') {\n\t\t\t\tel.style.zIndex = `${Math.floor(untracked(this.htmlInputs.zIndexRange)[0] / 2)}`;\n\t\t\t\tel.style.position = 'absolute';\n\t\t\t\tel.style.pointerEvents = 'none';\n\t\t\t} else {\n\t\t\t\tel.style.zIndex = null!;\n\t\t\t\tel.style.position = null!;\n\t\t\t\tel.style.pointerEvents = null!;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate appendElement() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [group, element] = [this.htmlInputs.groupRef.nativeElement, this.element()];\n\t\t\tif (group && element) {\n\t\t\t\tconst [target, transform, scene, camera, size, calculatePosition, prepend] = [\n\t\t\t\t\tthis.target(),\n\t\t\t\t\tthis.htmlInputs.transform(),\n\t\t\t\t\tuntracked(this.scene),\n\t\t\t\t\tuntracked(this.camera),\n\t\t\t\t\tuntracked(this.size),\n\t\t\t\t\tuntracked(this.htmlInputs.calculatePosition),\n\t\t\t\t\tuntracked(this.htmlInputs.prepend),\n\t\t\t\t];\n\t\t\t\tscene.updateMatrixWorld();\n\t\t\t\tif (transform) {\n\t\t\t\t\telement.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;\n\t\t\t\t} else {\n\t\t\t\t\tconst vec = calculatePosition(group, camera, size);\n\t\t\t\t\telement.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;\n\t\t\t\t}\n\n\t\t\t\tif (target) {\n\t\t\t\t\tif (prepend) target.prepend(element);\n\t\t\t\t\telse target.appendChild(element);\n\t\t\t\t}\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tif (target) target.removeChild(element);\n\t\t\t\t\tthis.vcr.clear();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setWrapperClass() {\n\t\teffect(() => {\n\t\t\tconst [element, wrapperClass] = [this.element(), this.htmlInputs.wrapperClass()];\n\t\t\tif (element && wrapperClass) {\n\t\t\t\telement.className = wrapperClass;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate render() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [{ transform }, element, content] = [\n\t\t\t\tthis.htmlInputs.state(),\n\t\t\t\tthis.element(),\n\t\t\t\tthis.htmlInputs.content(),\n\t\t\t];\n\n\t\t\tif (element) {\n\t\t\t\tthis.isMeshSizeSet = false;\n\t\t\t\tconst params: Parameters<ViewContainerRef['createEmbeddedView']> = transform\n\t\t\t\t\t? [this.transformTemplate, {}]\n\t\t\t\t\t: [this.renderTemplate, { styles: this.styles }];\n\n\t\t\t\tconst ref = this.vcr.createEmbeddedView(...params);\n\t\t\t\tif (ref.rootNodes?.[0]) {\n\t\t\t\t\tif (element.hasChildNodes()) {\n\t\t\t\t\t\telement.replaceChildren(...ref.rootNodes);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.append(...ref.rootNodes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsafeDetectChanges(ref);\n\n\t\t\t\tlet contentRef: EmbeddedViewRef<unknown>;\n\t\t\t\tlet contentParent: HTMLElement;\n\t\t\t\t/**\n\t\t\t\t * NOTE: utilizing rAF here so that renderAnchor (ViewContainerRef) has a chance to be resolved\n\t\t\t\t * TODO: Another approach is to call render() in ngOnInit and pass in an injector to the effect\n\t\t\t\t */\n\t\t\t\tconst rAF = requestAnimationFrame(() => {\n\t\t\t\t\tif (content && this.renderAnchor) {\n\t\t\t\t\t\tcontentRef = this.renderAnchor.createEmbeddedView(content);\n\t\t\t\t\t\tcontentParent = ref.rootNodes[0].lastElementChild || ref.rootNodes[0];\n\t\t\t\t\t\twhile (contentParent && contentParent.lastElementChild) {\n\t\t\t\t\t\t\tcontentParent = contentParent.lastElementChild as HTMLElement;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (contentRef.rootNodes?.[0]) {\n\t\t\t\t\t\t\tif (contentParent.hasChildNodes()) {\n\t\t\t\t\t\t\t\tcontentParent.replaceChildren(...contentRef.rootNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontentParent.append(...contentRef.rootNodes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafeDetectChanges(contentRef);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tcancelAnimationFrame(rAF);\n\n\t\t\t\t\tif (contentRef && contentParent) {\n\t\t\t\t\t\tcontentRef.rootNodes.forEach((node) => {\n\t\t\t\t\t\t\tif (contentParent.hasChildNodes()) {\n\t\t\t\t\t\t\t\tcontentParent.removeChild(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode.remove();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcontentRef.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tref.rootNodes.forEach((node) => {\n\t\t\t\t\t\tif (element.hasChildNodes()) {\n\t\t\t\t\t\t\telement.removeChild(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.remove();\n\t\t\t\t\t});\n\t\t\t\t\tref.destroy();\n\t\t\t\t\tthis.renderAnchor?.clear();\n\t\t\t\t\tthis.vcr.clear();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tlet oldPosition = [0, 0];\n\t\tlet oldZoom = 0;\n\t\tlet visible = true;\n\t\tinjectBeforeRender((gl) => {\n\t\t\tconst [\n\t\t\t\tgroup,\n\t\t\t\tcamera,\n\t\t\t\ttransform,\n\t\t\t\tcalculatePosition,\n\t\t\t\tsize,\n\t\t\t\teps,\n\t\t\t\tisRayCastOcclusion,\n\t\t\t\tocclude,\n\t\t\t\tscene,\n\t\t\t\traycaster,\n\t\t\t\telement,\n\t\t\t\tzIndexRange,\n\t\t\t\tsprite,\n\t\t\t\tdistanceFactor,\n\t\t\t\tocclusionMeshRef,\n\t\t\t\tgeometry,\n\t\t\t\tviewport,\n\t\t\t\tscale,\n\t\t\t] = [\n\t\t\t\tthis.htmlInputs.groupRef.nativeElement,\n\t\t\t\tthis.camera(),\n\t\t\t\tthis.htmlInputs.transform(),\n\t\t\t\tthis.htmlInputs.calculatePosition(),\n\t\t\t\tthis.size(),\n\t\t\t\tthis.htmlInputs.eps(),\n\t\t\t\tthis.htmlInputs.isRayCastOcclusion(),\n\t\t\t\tthis.htmlInputs.occlude(),\n\t\t\t\tthis.scene(),\n\t\t\t\tthis.raycaster(),\n\t\t\t\tthis.element(),\n\t\t\t\tthis.htmlInputs.zIndexRange(),\n\t\t\t\tthis.htmlInputs.sprite(),\n\t\t\t\tthis.htmlInputs.distanceFactor(),\n\t\t\t\tthis.htmlInputs.occlusionMeshRef.nativeElement,\n\t\t\t\tthis.htmlInputs.geometry(),\n\t\t\t\tthis.viewport(),\n\t\t\t\tthis.htmlInputs.scale(),\n\t\t\t];\n\t\t\tif (group && element) {\n\t\t\t\tcamera.updateMatrixWorld();\n\t\t\t\tgroup.updateWorldMatrix(true, false);\n\t\t\t\tconst vec = transform ? oldPosition : calculatePosition(group, camera, size);\n\n\t\t\t\tif (\n\t\t\t\t\ttransform ||\n\t\t\t\t\tMath.abs(oldZoom - camera.zoom) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[0] - vec[0]) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[1] - vec[1]) > eps\n\t\t\t\t) {\n\t\t\t\t\tconst isBehindCamera = isObjectBehindCamera(group, camera);\n\t\t\t\t\tlet raytraceTarget: null | undefined | boolean | THREE.Object3D[] = false;\n\n\t\t\t\t\tif (isRayCastOcclusion) {\n\t\t\t\t\t\tif (Array.isArray(occlude)) {\n\t\t\t\t\t\t\traytraceTarget = occlude.map((item) => (is.ref(item) ? item.nativeElement : item));\n\t\t\t\t\t\t} else if (occlude !== 'blending') {\n\t\t\t\t\t\t\traytraceTarget = [scene];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previouslyVisible = visible;\n\t\t\t\t\tif (raytraceTarget) {\n\t\t\t\t\t\tconst isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);\n\t\t\t\t\t\tvisible = isVisible && !isBehindCamera;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisible = !isBehindCamera;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (previouslyVisible !== visible) {\n\t\t\t\t\t\tif (this.htmlInputs.occluded.observed) {\n\t\t\t\t\t\t\tthis.htmlInputs.occluded.emit(!visible);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.display = visible ? 'block' : 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst halfRange = Math.floor(zIndexRange[0] / 2);\n\t\t\t\t\tconst zRange = occlude\n\t\t\t\t\t\t? isRayCastOcclusion //\n\t\t\t\t\t\t\t? [zIndexRange[0], halfRange]\n\t\t\t\t\t\t\t: [halfRange - 1, 0]\n\t\t\t\t\t\t: zIndexRange;\n\n\t\t\t\t\telement.style.zIndex = `${objectZIndex(group, camera, zRange)}`;\n\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tconst [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n\t\t\t\t\t\tconst fov = camera.projectionMatrix.elements[5] * heightHalf;\n\t\t\t\t\t\tconst { isOrthographicCamera, top, left, bottom, right } = camera as THREE.OrthographicCamera;\n\t\t\t\t\t\tconst cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n\t\t\t\t\t\tconst cameraTransform = isOrthographicCamera\n\t\t\t\t\t\t\t? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon(\n\t\t\t\t\t\t\t\t\t(top + bottom) / 2,\n\t\t\t\t\t\t\t )}px)`\n\t\t\t\t\t\t\t: `translateZ(${fov}px)`;\n\t\t\t\t\t\tlet matrix = group.matrixWorld;\n\t\t\t\t\t\tif (sprite) {\n\t\t\t\t\t\t\tmatrix = camera.matrixWorldInverse\n\t\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t\t.transpose()\n\t\t\t\t\t\t\t\t.copyPosition(matrix)\n\t\t\t\t\t\t\t\t.scale(group.scale);\n\t\t\t\t\t\t\tmatrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n\t\t\t\t\t\t\tmatrix.elements[15] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.style.width = size.width + 'px';\n\t\t\t\t\t\telement.style.height = size.height + 'px';\n\t\t\t\t\t\telement.style.perspective = isOrthographicCamera ? '' : `${fov}px`;\n\t\t\t\t\t\tif (this.outerDiv?.nativeElement && this.innerDiv?.nativeElement) {\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.width = size.width + 'px';\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.height = size.height + 'px';\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;\n\t\t\t\t\t\t\tthis.innerDiv.nativeElement.style.transform = getObjectCSSMatrix(\n\t\t\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\t\t\t1 / ((distanceFactor || 10) / 400),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;\n\t\t\t\t\t\telement.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;\n\t\t\t\t\t}\n\t\t\t\t\toldPosition = vec;\n\t\t\t\t\toldZoom = camera.zoom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isRayCastOcclusion && occlusionMeshRef && !this.isMeshSizeSet) {\n\t\t\t\tif (transform) {\n\t\t\t\t\tif (this.outerDiv?.nativeElement) {\n\t\t\t\t\t\tconst el = this.outerDiv.nativeElement.children[0];\n\n\t\t\t\t\t\tif (el?.clientWidth && el?.clientHeight) {\n\t\t\t\t\t\t\tconst { isOrthographicCamera } = camera as THREE.OrthographicCamera;\n\n\t\t\t\t\t\t\tif (isOrthographicCamera || geometry) {\n\t\t\t\t\t\t\t\tif (scale !== 1) {\n\t\t\t\t\t\t\t\t\tif (!Array.isArray(scale)) {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.setScalar(1 / (scale as number));\n\t\t\t\t\t\t\t\t\t} else if (scale instanceof THREE.Vector3) {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.copy(scale.clone().divideScalar(1));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst ratio = (distanceFactor || 10) / 400;\n\t\t\t\t\t\t\t\tconst w = el.clientWidth * ratio;\n\t\t\t\t\t\t\t\tconst h = el.clientHeight * ratio;\n\n\t\t\t\t\t\t\t\tocclusionMeshRef.scale.set(w, h, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.isMeshSizeSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst ele = element.children[0];\n\n\t\t\t\t\tif (ele?.clientWidth && ele?.clientHeight) {\n\t\t\t\t\t\tconst ratio = 1 / viewport.factor;\n\t\t\t\t\t\tconst w = ele.clientWidth * ratio;\n\t\t\t\t\t\tconst h = ele.clientHeight * ratio;\n\n\t\t\t\t\t\tocclusionMeshRef.scale.set(w, h, 1);\n\n\t\t\t\t\t\tthis.isMeshSizeSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tocclusionMeshRef.lookAt(gl.camera.position);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NgIf } from '@angular/common';\nimport {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tContentChild,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tTemplateRef,\n\tcomputed,\n\tforwardRef,\n} from '@angular/core';\nimport { extend, injectNgtRef, is, signalStore, type NgtGroup, type NgtRef, type NgtVector3 } from 'angular-three';\nimport { NgtsSobaContent } from 'angular-three-soba/utils';\nimport { createInjectionToken } from 'ngxtension/create-injection-token';\nimport * as THREE from 'three';\nimport { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';\nimport { NgtsHtmlWrapper, defaultCalculatePosition } from './html-wrapper';\n\nextend({ Group, PlaneGeometry, Mesh, ShaderMaterial });\n\ntype PointerEventsProperties =\n\t| 'auto'\n\t| 'none'\n\t| 'visiblePainted'\n\t| 'visibleFill'\n\t| 'visibleStroke'\n\t| 'visible'\n\t| 'painted'\n\t| 'fill'\n\t| 'stroke'\n\t| 'all'\n\t| 'inherit';\n\nexport type NgtsHtmlState = {\n\tas: keyof HTMLElementTagNameMap;\n\tprepend: boolean;\n\ttransform: boolean;\n\tzIndexRange: Array<number>;\n\tcalculatePosition: typeof defaultCalculatePosition;\n\tfullscreen: boolean;\n\tcenter: boolean;\n\tsprite: boolean;\n\tpointerEvents: PointerEventsProperties;\n\teps: number;\n\tscale: NgtVector3;\n\tcontent?: TemplateRef<unknown>;\n\tdistanceFactor?: number;\n\tstyle?: CSSStyleDeclaration;\n\trenderedDivClass?: string;\n\twrapperClass?: string;\n\tportal?: NgtRef<HTMLElement>;\n\tocclude: NgtRef<THREE.Object3D>[] | boolean | 'raycast' | 'blending';\n\tmaterial?: NgtRef<THREE.Material>;\n\tgeometry?: NgtRef<THREE.BufferGeometry>;\n\tcastShadow: boolean; // Cast shadow for occlusion plane\n\treceiveShadow: boolean; // Receive shadow for occlusion plane\n};\n\nexport const [injectNgtsHtmlInputs, provideNgtsHtmlInputs] = createInjectionToken(\n\t(html: NgtsHtml) => ({ state: html.inputs.state, ...html.state }),\n\t{ isRoot: false, deps: [forwardRef(() => NgtsHtml)] },\n);\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-html': NgtsHtmlState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-html',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group ngtCompound [ref]=\"groupRef\" [scale]=\"scale()\">\n\t\t\t<ngt-mesh\n\t\t\t\t*ngIf=\"occlude() && !isRayCastOcclusion()\"\n\t\t\t\t[castShadow]=\"castShadow()\"\n\t\t\t\t[receiveShadow]=\"receiveShadow()\"\n\t\t\t\t[ref]=\"occlusionMeshRef\"\n\t\t\t>\n\t\t\t\t<ngt-plane-geometry *ngIf=\"geometry()\" />\n\t\t\t\t<ngt-shader-material\n\t\t\t\t\t*ngIf=\"material()\"\n\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t[vertexShader]=\"shaders().vertexShader\"\n\t\t\t\t\t[fragmentShader]=\"shaders().fragmentShader\"\n\t\t\t\t/>\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\n\t\t<ngts-html-wrapper />\n\t`,\n\timports: [NgIf, NgtsHtmlWrapper],\n\tproviders: [provideNgtsHtmlInputs()],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsHtml {\n\tDoubleSide = THREE.DoubleSide;\n\n\tinputs = signalStore<NgtsHtmlState>({\n\t\tas: 'div',\n\t\tprepend: false,\n\t\ttransform: false,\n\t\tfullscreen: false,\n\t\tcenter: false,\n\t\tsprite: false,\n\t\tzIndexRange: [16777271, 0],\n\t\teps: 0.001,\n\t\tscale: 1,\n\t\tcalculatePosition: defaultCalculatePosition,\n\t\tpointerEvents: 'auto',\n\t\tocclude: false,\n\t\tcastShadow: false,\n\t\treceiveShadow: false,\n\t});\n\n\t@ContentChild(NgtsSobaContent, { read: TemplateRef }) set content(content: TemplateRef<unknown>) {\n\t\tthis.inputs.set({ content });\n\t}\n\n\t@Input() groupRef = injectNgtRef<Group>();\n\n\t@Input({ alias: 'as' }) set _as(as: keyof HTMLElementTagNameMap) {\n\t\tthis.inputs.set({ as });\n\t}\n\n\t@Input({ alias: 'zIndexRange' }) set _zIndexRange(zIndexRange: Array<number>) {\n\t\tthis.inputs.set({ zIndexRange });\n\t}\n\n\t@Input({ alias: 'portal' }) set _portal(portal: NgtRef<HTMLElement>) {\n\t\tthis.inputs.set({ portal });\n\t}\n\n\t@Input({ alias: 'occlude' }) set _occlude(occlude: NgtsHtmlState['occlude']) {\n\t\tthis.inputs.set({ occlude });\n\t}\n\n\t@Input({ alias: 'castShadow' }) set _castShadow(castShadow: NgtsHtmlState['castShadow']) {\n\t\tthis.inputs.set({ castShadow });\n\t}\n\n\t@Input({ alias: 'receiveShadow' }) set _receiveShadow(receiveShadow: NgtsHtmlState['receiveShadow']) {\n\t\tthis.inputs.set({ receiveShadow });\n\t}\n\n\t@Input({ alias: 'material' }) set _material(material: NgtsHtmlState['material']) {\n\t\tthis.inputs.set({ material });\n\t}\n\n\t@Input({ alias: 'geometry' }) set _geometry(geometry: NgtsHtmlState['geometry']) {\n\t\tthis.inputs.set({ geometry });\n\t}\n\n\t@Input({ alias: 'scale' }) set _scale(scale: NgtsHtmlState['scale']) {\n\t\tthis.inputs.set({ scale });\n\t}\n\n\t@Input({ alias: 'prepend' }) set _prepend(prepend: boolean) {\n\t\tthis.inputs.set({ prepend });\n\t}\n\n\t@Input({ alias: 'transform' }) set _transform(transform: boolean) {\n\t\tthis.inputs.set({ transform });\n\t}\n\n\t@Input({ alias: 'center' }) set _center(center: boolean) {\n\t\tthis.inputs.set({ center });\n\t}\n\n\t@Input({ alias: 'sprite' }) set _sprite(sprite: boolean) {\n\t\tthis.inputs.set({ sprite });\n\t}\n\n\t@Input({ alias: 'fullscreen' }) set _fullscreen(fullscreen: boolean) {\n\t\tthis.inputs.set({ fullscreen });\n\t}\n\n\t@Input({ alias: 'eps' }) set _eps(eps: number) {\n\t\tthis.inputs.set({ eps });\n\t}\n\n\t@Input({ alias: 'distanceFactor' }) set _distanceFactor(distanceFactor: number) {\n\t\tthis.inputs.set({ distanceFactor });\n\t}\n\n\t@Input({ alias: 'wrapperClass' }) set _wrapperClass(wrapperClass: string) {\n\t\tthis.inputs.set({ wrapperClass });\n\t}\n\n\t@Input({ alias: 'renderedDivClass' }) set _renderedDivClass(renderedDivClass: string) {\n\t\tthis.inputs.set({ renderedDivClass });\n\t}\n\n\t@Input({ alias: 'style' }) set _style(style: CSSStyleDeclaration) {\n\t\tthis.inputs.set({ style });\n\t}\n\n\t@Input({ alias: 'pointerEvents' }) set _pointerEvents(pointerEvents: PointerEventsProperties) {\n\t\tthis.inputs.set({ pointerEvents });\n\t}\n\n\t@Input({ alias: 'calculatePosition' }) set _calculatePosition(\n\t\tcalculatePosition: NgtsHtmlState['calculatePosition'],\n\t) {\n\t\tthis.inputs.set({ calculatePosition });\n\t}\n\n\t@Output() occluded = new EventEmitter<boolean>();\n\n\tocclusionMeshRef = injectNgtRef<Mesh>();\n\n\tprivate transform = this.inputs.select('transform');\n\n\tisRayCastOcclusion = computed(() => {\n\t\tconst occlude = this.occlude();\n\t\treturn (\n\t\t\t(occlude && occlude !== 'blending') || (Array.isArray(occlude) && !!occlude.length && is.ref(occlude[0]))\n\t\t);\n\t});\n\n\tocclude = this.inputs.select('occlude');\n\tcastShadow = this.inputs.select('castShadow');\n\treceiveShadow = this.inputs.select('receiveShadow');\n\tgeometry = this.inputs.select('geometry');\n\tmaterial = this.inputs.select('material');\n\tscale = this.inputs.select('scale');\n\n\tshaders = computed(() => {\n\t\tconst transform = this.transform();\n\t\treturn {\n\t\t\tvertexShader: !transform\n\t\t\t\t? /* glsl */ `\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include <common>\n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n `\n\t\t\t\t: undefined,\n\t\t\tfragmentShader: /* glsl */ `\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `,\n\t\t};\n\t});\n\n\tstate = {\n\t\tzIndexRange: this.inputs.select('zIndexRange'),\n\t\tprepend: this.inputs.select('prepend'),\n\t\ttransform: this.transform,\n\t\tcenter: this.inputs.select('center'),\n\t\tfullscreen: this.inputs.select('fullscreen'),\n\t\tcalculatePosition: this.inputs.select('calculatePosition'),\n\t\twrapperClass: this.inputs.select('wrapperClass'),\n\t\trenderedDivClass: this.inputs.select('renderedDivClass'),\n\t\tstyle: this.inputs.select('style'),\n\t\tpointerEvents: this.inputs.select('pointerEvents'),\n\t\teps: this.inputs.select('eps'),\n\t\tdistanceFactor: this.inputs.select('distanceFactor'),\n\t\tsprite: this.inputs.select('sprite'),\n\t\tas: this.inputs.select('as'),\n\t\tportal: this.inputs.select('portal'),\n\t\tcontent: this.inputs.select('content'),\n\t\tocclude: this.occlude,\n\t\tisRayCastOcclusion: this.isRayCastOcclusion,\n\t\tocclusionMeshRef: this.occlusionMeshRef,\n\t\toccluded: this.occluded,\n\t\tgeometry: this.geometry,\n\t\tscale: this.scale,\n\t\tgroupRef: this.groupRef,\n\t};\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tInjector,\n\tInput,\n\tcomputed,\n\teffect,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { checkUpdate, extend, injectNgtRef, is, signalStore, type NgtGroup, type NgtRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { MeshSurfaceSampler } from 'three-stdlib';\n\ntype SamplePayload = {\n\t/**\n\t * The position of the sample.\n\t */\n\tposition: THREE.Vector3;\n\t/**\n\t * The normal of the mesh at the sampled position.\n\t */\n\tnormal: THREE.Vector3;\n\t/**\n\t * The vertex color of the mesh at the sampled position.\n\t */\n\tcolor: THREE.Color;\n};\n\ntype TransformPayload = SamplePayload & {\n\t/**\n\t * The dummy object used to transform each instance.\n\t * This object's matrix will be updated after transforming & it will be used\n\t * to set the instance's matrix.\n\t */\n\tdummy: THREE.Object3D;\n\t/**\n\t * The mesh that's initially passed to the sampler.\n\t * Use this if you need to apply transforms from your mesh to your instances\n\t * or if you need to grab attributes from the geometry.\n\t */\n\tsampledMesh: THREE.Mesh;\n};\n\nexport type NgtsSurfaceSamplerTransformFn = (payload: TransformPayload, i: number) => void;\n\nexport type NgtsSurfaceSamplerState = {\n\tcount: number;\n\tmesh: NgtRef<THREE.Mesh>;\n\ttransform?: NgtsSurfaceSamplerTransformFn;\n\tweight?: string;\n\tinstancedMesh?: NgtRef<THREE.InstancedMesh>;\n};\n\nconst defaultState: Omit<NgtsSurfaceSamplerState, 'mesh'> = {\n\tcount: 16,\n};\n\nexport function injectNgtsSurfaceSampler(\n\tsurfaceSamplerState: () => (Partial<Omit<NgtsSurfaceSamplerState, 'mesh'>> & { mesh: NgtRef<THREE.Mesh> }) | null,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsSurfaceSampler, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst state = computed(() => ({ ...defaultState, ...(surfaceSamplerState() || {}) }));\n\t\tconst _buffer = signal(\n\t\t\t(() => {\n\t\t\t\tconst arr = Array.from({ length: state().count }, () => [\n\t\t\t\t\t1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,\n\t\t\t\t]).flat();\n\t\t\t\treturn new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);\n\t\t\t})(),\n\t\t);\n\n\t\teffect(() => {\n\t\t\tconst { mesh, count, transform, instancedMesh, weight } = state();\n\t\t\tconst meshObj = is.ref(mesh) ? mesh.nativeElement : mesh;\n\t\t\tif (!meshObj) return;\n\t\t\tconst instancedMeshObj = is.ref(instancedMesh) ? instancedMesh.nativeElement : instancedMesh;\n\t\t\tconst buffer = untracked(_buffer);\n\n\t\t\tconst sampler = new MeshSurfaceSampler(meshObj);\n\n\t\t\tif (weight) {\n\t\t\t\tsampler.setWeightAttribute(weight);\n\t\t\t}\n\n\t\t\tsampler.build();\n\n\t\t\tconst position = new THREE.Vector3();\n\t\t\tconst normal = new THREE.Vector3();\n\t\t\tconst color = new THREE.Color();\n\t\t\tconst dummy = new THREE.Object3D();\n\n\t\t\tmeshObj.updateMatrixWorld(true);\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tsampler.sample(position, normal, color);\n\n\t\t\t\tif (typeof transform === 'function') {\n\t\t\t\t\ttransform({ dummy, sampledMesh: meshObj, position, normal, color }, i);\n\t\t\t\t} else {\n\t\t\t\t\tdummy.position.copy(position);\n\t\t\t\t}\n\n\t\t\t\tdummy.updateMatrix();\n\n\t\t\t\tif (instancedMeshObj) {\n\t\t\t\t\tinstancedMeshObj.setMatrixAt(i, dummy.matrix);\n\t\t\t\t}\n\n\t\t\t\tdummy.matrix.toArray(buffer.array, i * 16);\n\t\t\t}\n\n\t\t\tif (instancedMeshObj) {\n\t\t\t\tcheckUpdate(instancedMeshObj.instanceMatrix);\n\t\t\t}\n\n\t\t\tcheckUpdate(buffer);\n\n\t\t\tuntracked(() => {\n\t\t\t\t_buffer.set(buffer.clone() as THREE.InstancedBufferAttribute);\n\t\t\t});\n\t\t});\n\n\t\treturn _buffer.asReadonly();\n\t});\n}\n\nextend({ Group });\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-sampler': NgtsSurfaceSamplerState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-sampler',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group ngtCompound [ref]=\"samplerRef\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsSampler {\n\tprivate inputs = signalStore<NgtsSurfaceSamplerState>({ count: 16 });\n\n\t@Input() samplerRef = injectNgtRef<Group>();\n\n\t@Input({ alias: 'count' }) set _count(count: number) {\n\t\tthis.inputs.set({ count });\n\t}\n\n\t@Input({ alias: 'mesh' }) set _mesh(mesh: NgtRef<THREE.Mesh>) {\n\t\tthis.inputs.set({ mesh });\n\t}\n\n\t@Input({ alias: 'transform' }) set _transform(transform: NgtsSurfaceSamplerTransformFn) {\n\t\tthis.inputs.set({ transform });\n\t}\n\n\t@Input({ alias: 'weight' }) set _weight(weight: string) {\n\t\tthis.inputs.set({ weight });\n\t}\n\n\t@Input({ alias: 'instancedMesh' }) set _instancedMesh(instancedMesh: NgtRef<THREE.InstancedMesh>) {\n\t\tthis.inputs.set({ instancedMesh });\n\t}\n\n\tprivate surfaceSamplerState = computed(() => {\n\t\tconst sampler = this.samplerRef.nativeElement;\n\t\tif (!sampler) return null;\n\t\tconst { count, weight, transform, mesh, instancedMesh } = this.inputs.state();\n\n\t\tconst instancedMeshRef =\n\t\t\tinstancedMesh ??\n\t\t\t(sampler.children.find((child) => child.hasOwnProperty('instanceMatrix')) as THREE.InstancedMesh);\n\n\t\tconst meshRef = mesh ?? (sampler.children.find((child) => child.type === 'Mesh') as THREE.Mesh);\n\n\t\treturn { count, weight, transform, mesh: meshRef, instancedMesh: instancedMeshRef };\n\t});\n\n\tconstructor() {\n\t\tinjectNgtsSurfaceSampler(this.surfaceSamplerState);\n\t}\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed } from '@angular/core';\nimport { NgtArgs, extend, injectNgtRef, signalStore, type NgtMesh } from 'angular-three';\nimport * as THREE from 'three';\nimport { CanvasTexture, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\n\nexport type NgtsShadowState = {\n\tcolorStop: number;\n\tfog: boolean;\n\tcolor: THREE.ColorRepresentation;\n\topacity: number;\n\tdepthWrite: boolean;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-mesh\n\t\t */\n\t\t'ngts-shadow': NgtsShadowState & NgtMesh;\n\t}\n}\n\nextend({ Mesh, CanvasTexture, PlaneGeometry, MeshBasicMaterial });\n\n@Component({\n\tselector: 'ngts-shadow',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-mesh ngtCompound [ref]=\"shadowRef\" [rotation]=\"[-Math.PI / 2, 0, 0]\">\n\t\t\t<ngt-plane-geometry />\n\t\t\t<ngt-mesh-basic-material\n\t\t\t\t[transparent]=\"true\"\n\t\t\t\t[opacity]=\"opacity()\"\n\t\t\t\t[fog]=\"fog()\"\n\t\t\t\t[depthWrite]=\"depthWrite()\"\n\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t>\n\t\t\t\t<ngt-canvas-texture *args=\"[canvas()]\" attach=\"map\" />\n\t\t\t</ngt-mesh-basic-material>\n\t\t\t<ng-content />\n\t\t</ngt-mesh>\n\t`,\n\timports: [NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsShadow {\n\tMath = Math;\n\tDoubleSide = THREE.DoubleSide;\n\n\tprivate inputs = signalStore<NgtsShadowState>({\n\t\tfog: false,\n\t\tdepthWrite: false,\n\t\tcolorStop: 0.0,\n\t\tcolor: 'black',\n\t\topacity: 0.5,\n\t});\n\n\t@Input() shadowRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'colorStop' }) set _colorStop(colorStop: number) {\n\t\tthis.inputs.set({ colorStop });\n\t}\n\n\t@Input({ alias: 'fog' }) set _fog(fog: boolean) {\n\t\tthis.inputs.set({ fog });\n\t}\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'opacity' }) set _opacity(opacity: number) {\n\t\tthis.inputs.set({ opacity });\n\t}\n\n\t@Input({ alias: 'depthWrite' }) set _depthWrite(depthWrite: boolean) {\n\t\tthis.inputs.set({ depthWrite });\n\t}\n\n\tprivate colorStop = this.inputs.select('colorStop');\n\tprivate color = this.inputs.select('color');\n\n\topacity = this.inputs.select('opacity');\n\tfog = this.inputs.select('fog');\n\tdepthWrite = this.inputs.select('depthWrite');\n\n\tcanvas = computed(() => {\n\t\tconst [colorStop, color] = [this.colorStop(), this.color()];\n\t\tconst canvas = document.createElement('canvas');\n\t\tcanvas.width = 128;\n\t\tcanvas.height = 128;\n\t\tconst context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tconst gradient = context.createRadialGradient(\n\t\t\tcanvas.width / 2,\n\t\t\tcanvas.height / 2,\n\t\t\t0,\n\t\t\tcanvas.width / 2,\n\t\t\tcanvas.height / 2,\n\t\t\tcanvas.width / 2,\n\t\t);\n\t\tgradient.addColorStop(colorStop, new THREE.Color(color).getStyle());\n\t\tgradient.addColorStop(1, 'rgba(0,0,0,0)');\n\t\tcontext.fillStyle = gradient;\n\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\t\treturn canvas;\n\t});\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, Input, computed, effect, inject } from '@angular/core';\nimport { addAfterEffect, addEffect, injectNgtStore, is, signalStore, type NgtRef } from 'angular-three';\nimport Stats from 'stats-gl';\n\nexport type NgtsStatsGLState = {\n\tparent?: NgtRef<HTMLElement>;\n\tcontainerClass?: string;\n\tconfig?: ConstructorParameters<typeof Stats>[0];\n};\n\n@Directive({ selector: 'ngts-stats-gl', standalone: true })\nexport class NgtsStatsGL {\n\tprivate inputs = signalStore<NgtsStatsGLState>();\n\n\t@Input({ alias: 'parent' }) set _parent(parent: NgtRef<HTMLElement>) {\n\t\tthis.inputs.set({ parent });\n\t}\n\n\t@Input({ alias: 'containerClass' }) set _containerClass(containerClass: string) {\n\t\tthis.inputs.set({ containerClass });\n\t}\n\n\t@Input({ alias: 'config' }) set _config(config: NgtsStatsGLState['config']) {\n\t\tthis.inputs.set({ config });\n\t}\n\n\tprivate document = inject(DOCUMENT);\n\tprivate store = injectNgtStore();\n\tprivate gl = this.store.select('gl');\n\n\tprivate config = this.inputs.select('config');\n\tprivate parent = this.inputs.select('parent');\n\tprivate containerClass = this.inputs.select('containerClass');\n\n\tprivate stats = computed(() => {\n\t\tconst [config, gl] = [this.config() || {}, this.gl()];\n\t\tconst stats = new Stats(config);\n\t\tstats.init(gl.domElement);\n\t\treturn stats;\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [parent, stats, containerClass] = [this.parent(), this.stats(), this.containerClass()];\n\t\t\tconst node = parent ? (is.ref(parent) ? parent.nativeElement : parent) : this.document.body;\n\t\t\tnode.appendChild(stats.container);\n\t\t\tif (containerClass) stats.container.classList.add(...containerClass.split(' ').filter(Boolean));\n\n\t\t\tconst begin = addEffect(() => stats.begin());\n\t\t\tconst end = addAfterEffect(() => stats.end());\n\t\t\tonCleanup(() => {\n\t\t\t\tnode.removeChild(stats.container);\n\t\t\t\tbegin();\n\t\t\t\tend();\n\t\t\t});\n\t\t});\n\t}\n}\n","import { Texture } from 'three';\n\nexport type Point = {\n\tx: number;\n\ty: number;\n\tage: number;\n\tforce: number;\n};\n\nexport type TrailConfig = {\n\t/** texture size (default: 256x256) */\n\tsize?: number;\n\t/** Max age (ms) of trail points (default: 750) */\n\tmaxAge?: number;\n\t/** Trail radius (default: 0.3) */\n\tradius?: number;\n\t/** Canvas trail opacity (default: 0.2) */\n\tintensity?: number;\n\t/** Add points in between slow pointer events (default: 0) */\n\tinterpolate?: number;\n\t/** Moving average of pointer force (default: 0) */\n\tsmoothing?: number;\n\t/** Minimum pointer force (default: 0.3) */\n\tminForce?: number;\n\t/** Blend mode (default: 'screen') */\n\tblend?: CanvasRenderingContext2D['globalCompositeOperation'];\n\t/** Easing (default: easeCircOut) */\n\tease?: (t: number) => number;\n};\n\n// default ease\nconst easeCircleOut = (x: number) => Math.sqrt(1 - Math.pow(x - 1, 2));\n\n// smooth new sample (measurement) based on previous sample (current)\nfunction smoothAverage(current: number, measurement: number, smoothing = 0.9) {\n\treturn measurement * smoothing + current * (1.0 - smoothing);\n}\n\nexport class TrailTexture {\n\ttrail: Point[];\n\tcanvas!: HTMLCanvasElement;\n\tctx!: CanvasRenderingContext2D;\n\ttexture!: Texture;\n\tforce: number;\n\tsize: number;\n\tmaxAge: number;\n\tradius: number;\n\tintensity: number;\n\tease: (t: number) => number;\n\tminForce: number;\n\tinterpolate: number;\n\tsmoothing: number;\n\tblend: CanvasRenderingContext2D['globalCompositeOperation'];\n\n\tconstructor({\n\t\tsize = 256,\n\t\tmaxAge = 750,\n\t\tradius = 0.3,\n\t\tintensity = 0.2,\n\t\tinterpolate = 0,\n\t\tsmoothing = 0,\n\t\tminForce = 0.3,\n\t\tblend = 'screen', // source-over is canvas default. Others are slower\n\t\tease = easeCircleOut,\n\t}: TrailConfig = {}) {\n\t\tthis.size = size;\n\t\tthis.maxAge = maxAge;\n\t\tthis.radius = radius;\n\t\tthis.intensity = intensity;\n\t\tthis.ease = ease;\n\t\tthis.interpolate = interpolate;\n\t\tthis.smoothing = smoothing;\n\t\tthis.minForce = minForce;\n\t\tthis.blend = blend as GlobalCompositeOperation;\n\n\t\tthis.trail = [];\n\t\tthis.force = 0;\n\t\tthis.initTexture();\n\t}\n\n\tinitTexture() {\n\t\tthis.canvas = document.createElement('canvas');\n\t\tthis.canvas.width = this.canvas.height = this.size;\n\t\tthis.ctx = this.canvas.getContext('2d')!;\n\t\tthis.ctx.fillStyle = 'black';\n\t\tthis.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n\t\tthis.texture = new Texture(this.canvas);\n\n\t\tthis.canvas.id = 'touchTexture';\n\t\tthis.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;\n\t}\n\n\tupdate(delta: number) {\n\t\tthis.clear();\n\n\t\t// age points\n\t\tthis.trail.forEach((point, i) => {\n\t\t\tpoint.age += delta * 1000;\n\t\t\t// remove old\n\t\t\tif (point.age > this.maxAge) {\n\t\t\t\tthis.trail.splice(i, 1);\n\t\t\t}\n\t\t});\n\n\t\t// reset force when empty (when smoothing)\n\t\tif (!this.trail.length) this.force = 0;\n\n\t\tthis.trail.forEach((point) => {\n\t\t\tthis.drawTouch(point);\n\t\t});\n\n\t\tthis.texture.needsUpdate = true;\n\t}\n\n\tclear() {\n\t\tthis.ctx.globalCompositeOperation = 'source-over';\n\t\tthis.ctx.fillStyle = 'black';\n\t\tthis.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\t}\n\n\taddTouch(point: Pick<Point, 'x' | 'y'>) {\n\t\tconst last = this.trail[this.trail.length - 1];\n\n\t\tif (last) {\n\t\t\tconst dx = last.x - point.x;\n\t\t\tconst dy = last.y - point.y;\n\t\t\tconst dd = dx * dx + dy * dy;\n\n\t\t\tconst force = Math.max(this.minForce, Math.min(dd * 10000, 1));\n\n\t\t\tthis.force = smoothAverage(force, this.force, this.smoothing);\n\n\t\t\tif (!!this.interpolate) {\n\t\t\t\tconst lines = Math.ceil(dd / Math.pow((this.radius * 0.5) / this.interpolate, 2));\n\n\t\t\t\tif (lines > 1) {\n\t\t\t\t\tfor (let i = 1; i < lines; i++) {\n\t\t\t\t\t\tthis.trail.push({\n\t\t\t\t\t\t\tx: last.x - (dx / lines) * i,\n\t\t\t\t\t\t\ty: last.y - (dy / lines) * i,\n\t\t\t\t\t\t\tage: 0,\n\t\t\t\t\t\t\tforce,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.trail.push({ x: point.x, y: point.y, age: 0, force: this.force });\n\t}\n\n\tdrawTouch(point: Point) {\n\t\tconst pos = {\n\t\t\tx: point.x * this.size,\n\t\t\ty: (1 - point.y) * this.size,\n\t\t};\n\n\t\tlet intensity = 1;\n\t\tif (point.age < this.maxAge * 0.3) {\n\t\t\tintensity = this.ease(point.age / (this.maxAge * 0.3));\n\t\t} else {\n\t\t\tintensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));\n\t\t}\n\n\t\tintensity *= point.force;\n\n\t\t// apply blending\n\t\tthis.ctx.globalCompositeOperation = this.blend;\n\n\t\tconst radius = this.size * this.radius * intensity;\n\t\tconst grd = this.ctx.createRadialGradient(\n\t\t\tpos.x,\n\t\t\tpos.y,\n\t\t\tMath.max(0, radius * 0.25),\n\t\t\tpos.x,\n\t\t\tpos.y,\n\t\t\tMath.max(0, radius),\n\t\t);\n\t\tgrd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);\n\t\tgrd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);\n\n\t\tthis.ctx.beginPath();\n\t\tthis.ctx.fillStyle = grd;\n\t\tthis.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);\n\t\tthis.ctx.fill();\n\t}\n}\n","import { Injector, computed, runInInjectionContext } from '@angular/core';\nimport { injectBeforeRender, type NgtThreeEvent } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { TrailTexture, type TrailConfig } from './trail-texture';\n\nexport function injectNgtsTrailTexture(\n\ttrailConfigFn: () => Partial<TrailConfig>,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsTrailTexture, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst trail = computed(() => new TrailTexture(trailConfigFn() || {}));\n\t\tconst texture = computed(() => trail().texture);\n\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\ttrail().update(delta);\n\t\t});\n\n\t\tconst onMove = (ev: NgtThreeEvent<PointerEvent>) => trail().addTouch(ev.uv!);\n\n\t\treturn { texture, onMove };\n\t});\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tInput,\n\tcomputed,\n\teffect,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport {\n\tNgtPortal,\n\tNgtPortalContent,\n\textend,\n\tinjectBeforeRender,\n\tinjectNgtRef,\n\tinjectNgtStore,\n\tis,\n\tsignalStore,\n\ttype NgtRef,\n} from 'angular-three';\nimport { MeshLineGeometry, MeshLineMaterial } from 'meshline';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { Group, Mesh } from 'three';\n\nconst shiftLeft = (collection: Float32Array, steps = 1): Float32Array => {\n\tcollection.set(collection.subarray(steps));\n\tcollection.fill(-Infinity, -steps);\n\treturn collection;\n};\n\nexport type NgtsTrailSettings = {\n\twidth: number;\n\tlength: number;\n\tdecay: number;\n\t/**\n\t * Wether to use the target's world or local positions\n\t */\n\tlocal: boolean;\n\t// Min distance between previous and current points\n\tstride: number;\n\t// Number of frames to wait before next calculation\n\tinterval: number;\n};\n\nconst defaultSettings: NgtsTrailSettings = {\n\twidth: 0.2,\n\tlength: 1,\n\tdecay: 1,\n\tlocal: false,\n\tstride: 0,\n\tinterval: 1,\n};\n\nexport function injectNgtsTrail(\n\ttargetFactory: () => NgtRef<THREE.Object3D> | null,\n\tsettingsFactory: () => Partial<NgtsTrailSettings>,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsTrail, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst _points = signal<Float32Array>(new Float32Array());\n\t\tlet frameCount = 0;\n\n\t\tconst prevPosition = new THREE.Vector3();\n\t\tconst worldPosition = new THREE.Vector3();\n\n\t\tconst _target = computed(() => {\n\t\t\tconst _target = targetFactory();\n\t\t\tif (is.ref(_target)) return _target.nativeElement;\n\t\t\treturn _target;\n\t\t});\n\n\t\tconst _settings = computed(() => ({ ...defaultSettings, ...settingsFactory() }));\n\t\tconst _length = computed(() => _settings().length);\n\n\t\teffect(() => {\n\t\t\tconst [target, length] = [_target(), _length()];\n\t\t\tif (target) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\t_points.set(\n\t\t\t\t\t\tFloat32Array.from({ length: length * 10 * 3 }, (_, i) => target.position.getComponent(i % 3)),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [target, points, { local, decay, stride, interval }] = [_target(), _points(), _settings()];\n\t\t\tif (!target || !points) return;\n\n\t\t\tif (frameCount === 0) {\n\t\t\t\tlet newPosition: THREE.Vector3;\n\t\t\t\tif (local) {\n\t\t\t\t\tnewPosition = target.position;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.getWorldPosition(worldPosition);\n\t\t\t\t\tnewPosition = worldPosition;\n\t\t\t\t}\n\n\t\t\t\tconst steps = 1 * decay;\n\t\t\t\tfor (let i = 0; i < steps; i++) {\n\t\t\t\t\tif (newPosition.distanceTo(prevPosition) < stride) continue;\n\n\t\t\t\t\tshiftLeft(points, 3);\n\t\t\t\t\tpoints.set(newPosition.toArray(), points.length - 3);\n\t\t\t\t}\n\t\t\t\tprevPosition.copy(newPosition);\n\t\t\t}\n\n\t\t\tframeCount++;\n\t\t\tframeCount = frameCount % interval;\n\t\t});\n\n\t\treturn _points.asReadonly();\n\t});\n}\n\nexport type NgtsTrailState = {\n\tcolor: THREE.ColorRepresentation;\n\tattenuation: (width: number) => number;\n\tsettings: NgtsTrailSettings;\n\ttarget?: NgtRef<THREE.Object3D>;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'ngts-trail': NgtsTrailState;\n\t}\n}\n\nextend({ Group, Mesh });\n\n@Component({\n\tselector: 'ngts-trail',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-portal [container]=\"scene()\" [autoRender]=\"false\">\n\t\t\t\t<ng-template ngtPortalContent>\n\t\t\t\t\t<ngt-mesh [ref]=\"trailRef\" [geometry]=\"geometry\" [material]=\"material()\" />\n\t\t\t\t</ng-template>\n\t\t\t</ngt-portal>\n\t\t\t<ngt-group [ref]=\"groupRef\">\n\t\t\t\t<ng-content />\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\timports: [NgtPortal, NgtPortalContent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsTrail {\n\tprivate inputs = signalStore<NgtsTrailState>({ settings: defaultSettings, color: 'hotpink' });\n\n\t@Input() trailRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'attenuation' }) set _attenuation(attenuation: (width: number) => number) {\n\t\tthis.inputs.set({ attenuation });\n\t}\n\n\t@Input({ alias: 'target' }) set _target(target: NgtRef<THREE.Object3D>) {\n\t\tthis.inputs.set({ target });\n\t}\n\n\t@Input({ alias: 'settings' }) set _settings(settings: Partial<NgtsTrailSettings>) {\n\t\tthis.inputs.set({ settings: { ...defaultSettings, ...settings } });\n\t}\n\n\tgroupRef = injectNgtRef<Group>();\n\n\tprivate children = this.groupRef.children('both');\n\n\tprivate store = injectNgtStore();\n\tprivate size = this.store.select('size');\n\n\tprivate target = this.inputs.select('target');\n\tprivate settings = this.inputs.select('settings');\n\tprivate width = computed(() => this.settings().width);\n\tprivate color = this.inputs.select('color');\n\tprivate attenuation = this.inputs.select('attenuation');\n\n\tprivate anchor = computed(() => {\n\t\tconst target = this.target();\n\t\tif (target) return target;\n\t\tconst group = this.groupRef.nativeElement;\n\t\tif (group) {\n\t\t\treturn group.children.find((child) => child instanceof THREE.Object3D) || null;\n\t\t}\n\t\treturn null;\n\t});\n\n\tprivate points = injectNgtsTrail(this.anchor, this.settings);\n\n\tscene = this.store.select('scene');\n\tgeometry = new MeshLineGeometry();\n\tmaterial = computed(() => {\n\t\tconst [width, color, size] = [this.width(), this.color(), this.size()];\n\n\t\tconst m = new MeshLineMaterial({\n\t\t\tlineWidth: 0.1 * width,\n\t\t\tcolor,\n\t\t\tsizeAttenuation: 1,\n\t\t\tresolution: new THREE.Vector2(size.width, size.height),\n\t\t});\n\n\t\t// TODO: understand this first\n\t\t// Get and apply first <meshLineMaterial /> from children\n\t\t// let matOverride: React.ReactElement | undefined;\n\t\t// if (children) {\n\t\t// \tif (Array.isArray(children)) {\n\t\t// \t\tmatOverride = children.find((child: React.ReactNode) => {\n\t\t// \t\t\tconst c = child as React.ReactElement;\n\t\t// \t\t\treturn typeof c.type === 'string' && c.type === 'meshLineMaterial';\n\t\t// \t\t}) as React.ReactElement | undefined;\n\t\t// \t} else {\n\t\t// \t\tconst c = children as React.ReactElement;\n\t\t// \t\tif (typeof c.type === 'string' && c.type === 'meshLineMaterial') {\n\t\t// \t\t\tmatOverride = c;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\t\t// if (typeof matOverride?.props === 'object') {\n\t\t// \tm.setValues(matOverride.props);\n\t\t// }\n\n\t\treturn m;\n\t});\n\n\tconstructor() {\n\t\tthis.setMaterialSize();\n\t\tthis.beforeRender();\n\t}\n\n\tprivate setMaterialSize() {\n\t\teffect(() => {\n\t\t\tconst [material, size] = [this.material(), this.size()];\n\t\t\tmaterial.uniforms['resolution'].value.set(size.width, size.height);\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [points, attenuation] = [this.points(), this.attenuation()];\n\t\t\tthis.geometry.setPoints(points, attenuation);\n\t\t});\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKgB,SAAA,oBAAoB,CACnC,iBAA8C,EAC9C,EACC,GAAG,EACH,QAAQ,EACR,aAAa,GAAG,IAAI,MAC+D,EAAE,EAAA;AAEtF,IAAA,QAAQ,GAAG,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,IAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,EAA2C,CAAC;IAC5D,IAAI,MAAM,GAAG,EAA2C,CAAC;IACzD,IAAI,MAAM,GAA0B,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,EAAc,CAAC;IAC7B,MAAM,KAAK,GAAG,EAA2B,CAAC;AAE1C,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC3C,QAAA,IAAI,SAAS,GAAG,YAAY,EAAkB,CAAC;AAE/C,QAAA,IAAI,GAAG,EAAE;AACR,YAAA,IAAI,GAAG,YAAY,KAAK,CAAC,QAAQ,EAAE;AAClC,gBAAA,SAAS,CAAC,aAAa,GAAG,GAAG,CAAC;AAC9B,aAAA;AAAM,iBAAA;gBACN,SAAS,GAAG,GAAG,CAAC;AAChB,aAAA;AACD,SAAA;AAED,QAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;AAExF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,GAAG,MAAM,CAAC;AAChB,YAAA,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAE3B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEjB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;AACzC,oBAAA,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,MAAK;wBACT,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;qBACjF;AACD,iBAAA,CAAC,CAAC;AAEH,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,aAAa,EAAE;oBAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,iBAAA;AACD,aAAA;YAED,SAAS,CAAC,MAAK;;gBAEd,MAAM,GAAG,EAAE,CAAC;;gBAEZ,KAAK,CAAC,aAAa,EAAE,CAAC;;gBAEtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzC,oBAAA,KAAK,CAAC,aAAa,CAAC,MAAwC,EAAE,MAAO,CAAC,CAAC;AACxE,iBAAC,CAAC,CAAC;gBAEH,MAAM,GAAG,IAAI,CAAC;AACf,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChE,KAAC,CAAC,CAAC;AACJ;;MCzEa,eAAe,CAAA;AAC3B,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;AAChC,YAAA,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;AAC7B,YAAA,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAC7B,SAAS,CAAC,MAAK;gBACd,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACrD,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACH;8GAZW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;;ACyBxD,SAAU,aAAa,CAAC,SAA8B,EAAE,EAAE,QAAQ,KAA8B,EAAE,EAAA;AACvG,IAAA,QAAQ,GAAG,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACnD,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC3C,QAAA,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;AAC/B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEtC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAiC,IAAI,CAAC,CAAC;AAElE,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAE9D,QAAA,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG;AAC1C,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9B,YAAA,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;SAC/B,CAAC;AACF,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;YAChD,OAAO;AACN,gBAAA,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,YAAY,EAAE,GAAG,GAAG,EAAE;AAC1D,gBAAA,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,aAAa,EAAE,GAAG,GAAG,EAAE;AAC7D,gBAAA,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAI,KAAqB,KAAK,EAAE;aAC5D,CAAC;AACZ,SAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC;AAC3E,YAAA,IAAI,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,EAAE;gBACrB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE;oBACzD,SAAS,EAAE,KAAK,CAAC,YAAY;oBAC7B,SAAS,EAAE,KAAK,CAAC,YAAY;oBAC7B,IAAI,EAAE,KAAK,CAAC,aAAa;AACzB,oBAAA,GAAG,QAAQ;AACX,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,KAAK;AAAE,oBAAA,MAAM,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAExF,gBAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;gBACzB,SAAS,CAAC,MAAK;AACd,oBAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACH,gBAAA,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAC1C,aAAA;AAED,YAAA,IAAI,eAAe,EAAE;AACpB,gBAAA,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvC,gBAAA,IAAI,OAAO;AAAE,oBAAA,eAAe,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC/C,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA;AACF,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;AAClC,KAAC,CAAC,CAAC;AACJ;;ACrEA,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAEjH,MAAM,WAAW,GAAG;AACnB,IAAA,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,KAAK,CAAC,YAAY;IAC7B,SAAS,EAAE,KAAK,CAAC,YAAY;IAC7B,IAAI,EAAE,KAAK,CAAC,gBAAgB;CAC5B,CAAC;AAEF,MAAM,YAAY,GAAG;IACpB,SAAS,EAAE,KAAK,CAAC,wBAAwB;IACzC,SAAS,EAAE,KAAK,CAAC,YAAY;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS;AACrB,IAAA,eAAe,EAAE,IAAI;CACrB,CAAC;AA8BF,SAAS,oBAAoB,CAAC,IAAmB,GAAA,KAAK,CAAC,SAAS,EAAA;IAC/D,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;AAClD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;QAC5D,UAAU;AACV,QAAA,eAAe,EAAE,CAAC,MAAW,KAAI;AAChC,YAAA,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;AACxC,YAAA,MAAM,CAAC,cAAc;AACpB,gBAAA,CAAA;;AAES,YAAA,CAAA;AACT,oBAAA,MAAM,CAAC,cAAc,CAAC,OAAO,CAC5B,iCAAiC,EACjC,CAAA;AACkE,sEAAA,CAAA,CAClE,CAAC;SACH;AACD,KAAA,CAAC,CAAC;AACJ,CAAC;MAoEY,YAAY,CAAA;;IAsBxB,IAAgC,OAAO,CAAC,MAAc,EAAA;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;;IAED,IAA+B,MAAM,CAAC,KAAc,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;;IAED,IAAsC,aAAa,CAAC,YAAqB,EAAA;QACxE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;KAClC;;IAED,IAAkC,SAAS,CAAC,QAAiB,EAAA;QAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;;IAED,IAA6B,IAAI,CAAC,GAAW,EAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KACzB;;IAED,IAAqC,YAAY,CAAC,WAAmB,EAAA;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;;IAED,IAAqC,YAAY,CAAC,WAAmB,EAAA;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;;IAED,IAAmC,UAAU,CAAC,SAAiB,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;;IAED,IAA+B,MAAM,CAAC,KAAgC,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;;IAED,IAAoC,WAAW,CAAC,UAAkB,EAAA;QACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;;IAED,IAAqC,YAAY,CAChD,WAA2E,EAAA;QAE3E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;AAkCD,IAAA,WAAA,GAAA;AAnGA,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AACtC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QACtC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;QAEJ,IAAM,CAAA,MAAA,GAAG,WAAW,CAAoB;AAC/C,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,GAAG;AAChB,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,SAAA,CAAC,CAAC;QAEM,IAAW,CAAA,WAAA,GAAG,YAAY,EAAe,CAAC;QAiD3C,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAE9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,OAAO;AAC9C,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,YAAA,QAAQ,EAAE,WAAW;AACrB,SAAA,CAAC,CAAC,CAAC;AAEI,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,OAAO;AAChD,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AACzB,YAAA,QAAQ,EAAE,YAAY;AACtB,SAAA,CAAC,CAAC,CAAC;AAEI,QAAA,IAAA,CAAA,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACpE,QAAA,IAAA,CAAA,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAExD,IAAK,CAAA,KAAA,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAc,CAAC;QACtC,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAe,CAAC;QACvC,IAAS,CAAA,SAAA,GAAG,YAAY,EAA4B,CAAC;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAGtD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;KACvB;IAEO,iBAAiB,GAAA;QACxB,MAAM,CAAC,MAAK;YACX,MAAM,CAAC,QAAQ,CAAC,GAAG;gBAClB,IAAI,CAAC,WAAW,CAAC,aAAa;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACnB,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,aAAa,EAAE;aACpB,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ;gBAAE,OAAO;AACtB,YAAA,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;KACH;IAEO,eAAe,GAAA;AACtB,QAAA,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAA0B,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAE1D,QAAA,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE7D,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,CACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,KAAK,EACL,aAAa,EACb,GAAG;gBACH,IAAI,CAAC,WAAW,CAAC,aAAa;gBAC9B,IAAI,CAAC,QAAQ,CAAC,aAAa;gBAC3B,IAAI,CAAC,SAAS,CAAC,aAAa;gBAC5B,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,QAAQ,CAAC,aAAa;gBAC3B,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,aAAa,EAAE;aACpB,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ;gBAAE,OAAO;AACtB,YAAA,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAExC,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAChC,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAChC,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAE9B,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACrC,gBAAA,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACxC,gBAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAChC,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAErC,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAI;oBAC3D,MAAM,EACL,MAAM,EACN,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,WAAW,EACX,GAAG,EACH,YAAY,GACZ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAEtB,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5C,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;4BAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;;4BAE3E,QAAQ,CAAC,IAAI,CACZ,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAChF,CAAC;wBAEH,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;wBAE9C,IAAI,cAAc,GAAoB,EAAE,CAAC;AACzC,wBAAA,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;AACrC,wBAAA,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAClC,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjF,wBAAA,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAExD,wBAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC3B,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACpE,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBAC3C,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAC3C,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAC/C,CAAC;wBAEF,MAAM,WAAW,GAAG,cAAc;6BAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,6BAAA,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBACtC,MAAM,MAAM,GAAG,cAAc;AAC3B,6BAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACrC,6BAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,wBAAA,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;wBAG9F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,wBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBACpD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,wBAAA,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC;AACtB,wBAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;AACtB,wBAAA,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AACpB,wBAAA,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;AACxB,wBAAA,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC5D,wBAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;AAC3D,wBAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB,wBAAA,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;wBACnB,MAAM,CAAC,sBAAsB,EAAE,CAAC;wBAChC,MAAM,CAAC,iBAAiB,EAAE,CAAC;;AAG3B,wBAAA,MAAM,qBAAqB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAC9C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CACzD,CAAC;wBACF,MAAM,SAAS,GAAG,qBAAqB;6BACrC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,6BAAA,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;wBAC7C,MAAM,OAAO,GACZ,CAAC;4BACD,qBAAqB;iCACnB,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5D,iCAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,wBAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAK/B,wBAAA,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;wBAE/F,MAAM,iBAAiB,GAAG,GAAG,CAAC,uBAAuB,CACpD,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CACxE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEZ,wBAAA,gBAAgB,CAAC,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;AACxD,wBAAA,gBAAgB,CAAC,yBAAyB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC5E,wBAAA,gBAAgB,CAAC,QAAQ,GAAG,WAAW,CAAC;AAExC,wBAAA,gBAAgB,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAC7D,wBAAA,gBAAgB,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEjE,wBAAA,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,wBAAA,gBAAgB,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAClC,wBAAA,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;AACzC,wBAAA,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC;AAC/B,wBAAA,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;AACvC,wBAAA,gBAAgB,CAAC,WAAW,GAAG,WAAW,CAAC;;AAG3C,wBAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;;AAGrB,wBAAA,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;wBACjC,EAAE,CAAC,KAAK,EAAE,CAAC;AACX,wBAAA,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC;AACxC,wBAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;AAGzB,wBAAA,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;wBAClC,EAAE,CAAC,KAAK,EAAE,CAAC;AACX,wBAAA,IAAI,QAAQ,EAAE;AACb,4BAAA,KAAK,CAAC,gBAAgB,GAAG,eAAe,CAAC;AACzC,4BAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,yBAAA;;AAGD,wBAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;;AAG9B,wBAAA,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;wBAC1B,KAAK,CAAC,QAA2C,CAAC,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;wBAC5F,KAAK,CAAC,QAA2C,CAAC,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/F,wBAAA,gBAAgB,CAAC,aAAa,GAAG,YAAY,EAAE,OAAO,CAAC;AACvD,wBAAA,gBAAgB,CAAC,YAAY,GAAG,YAAY,EAAE,YAAY,CAAC;AAC3D,wBAAA,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;wBACnC,EAAE,CAAC,KAAK,EAAE,CAAC;AACX,wBAAA,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAGxB,wBAAA,gBAAgB,CAAC,GAAG,GAAG,WAAW,CAAC;AACnC,wBAAA,gBAAgB,CAAC,aAAa,GAAG,aAAa,EAAE,OAAO,CAAC;AACxD,wBAAA,gBAAgB,CAAC,YAAY,GAAG,aAAa,EAAE,YAAY,CAAC;AAC5D,wBAAA,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;wBACpC,EAAE,CAAC,KAAK,EAAE,CAAC;AACX,wBAAA,IAAI,QAAQ;AAAE,4BAAA,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAGtC,wBAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;AAGzB,wBAAA,IAAI,YAAY;AAAE,4BAAA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACxC,qBAAA;AACF,iBAAC,CAAC,CAAC;AAEH,gBAAA,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AACvB,aAAA;AACF,SAAC,CAAC,CAAC;KACH;8GA7TW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EA7Bd,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,IAAA,EAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,WAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAG9B,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhCxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,CAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;oBAC3C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;0EAoBS,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAG0B,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIK,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIa,aAAa,EAAA,CAAA;sBAAlD,KAAK;uBAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;gBAIE,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIC,IAAI,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;gBAIc,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;gBAIM,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;gBAII,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;gBAIE,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIW,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAIO,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;;;ACzLhC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,CAAC;AAsB9D,SAAS,UAAU,CAAC,GAAiD,GAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA;AAC7E,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACvB,QAAA,OAAO,GAAG,CAAC;AACX,KAAA;IAED,IAAI,GAAG,YAAY,KAAK,CAAC,OAAO,IAAI,GAAG,YAAY,KAAK,CAAC,KAAK,EAAE;AAC/D,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAA;AAED,IAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC;MAwBY,SAAS,CAAA;IAYrB,IAA+B,MAAM,CAAC,KAAc,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAA8B,KAAK,CAAC,IAAwB,EAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAC1B;IAED,IAAkC,SAAS,CAAC,QAAoB,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAAkC,SAAS,CAAC,QAA2B,EAAA;QACtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAA+B,MAAM,CAAC,KAAiB,EAAA;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAA6B,IAAI,CAAC,GAAkB,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KACzB;IAED,IAA6C,oBAAoB,CAAC,mBAA2B,EAAA;QAC5F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC;KACzC;IAED,IAAmC,UAAU,CAAC,SAAkB,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;AAiBD,IAAA,WAAA,GAAA;QA1DQ,IAAM,CAAA,MAAA,GAAG,WAAW,CAAiB;AAC5C,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,SAAS,EAAE,KAAK;YAChB,mBAAmB,EAAE,CAAC,EAAE;AACxB,YAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,YAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,YAAA,KAAK,EAAE,CAAC;AACR,SAAA,CAAC,CAAC;QAEM,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAQ,CAAC;QAkCjC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAS,CAAA,SAAA,GAAG,YAAY,EAAQ,CAAC;QAEjC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAmB,CAAA,mBAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAG,CAAA,GAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAG/B,IAAI,CAAC,YAAY,EAAE,CAAC;KACpB;IAEO,YAAY,GAAA;AACnB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG;gBACjD,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,SAAS,CAAC,aAAa;aAC5B,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;AAChF,YAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;AAC9B,gBAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;AAC/F,aAAA;AAED,YAAA,MAAM,KAAK,GAAG;AACb,gBAAA,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC7B,gBAAA,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC3B,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACjC,CAAC;AAEF,YAAA,IAAI,MAAM,EAAE;gBACX,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;;gBAGvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC/C,gBAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAE9B,gBAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9C,oBAAA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAE/B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChC,oBAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,wBAAA,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACtD,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5C,iBAAA;AAAM,qBAAA;AACN,oBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChC,iBAAA;gBAED,KAAK,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACxF,gBAAA,IAAI,MAAM,EAAE;AACX,oBAAA,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;AAE1B,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC;AACzD,iBAAA;;AAED,gBAAA,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;gBAEjC,SAAS,CAAC,MAAK;AACd,oBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACH,aAAA;AACF,SAAC,CAAC,CAAC;KACH;8GAvHW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAnBX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,KAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,IAAA,EAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,qBAAA,EAAA,sBAAA,CAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;AAeT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGF,SAAS,EAAA,UAAA,EAAA,CAAA;kBAtBrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;AAeT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;0EAWS,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEyB,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIK,KAAK,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;gBAIU,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIM,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIG,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAII,IAAI,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;gBAIsB,oBAAoB,EAAA,CAAA;sBAAhE,KAAK;uBAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAA;gBAIJ,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;;;AC7Fd,SAAA,qBAAqB,CACpC,aAAA,GAAsD,OAAO,EAAE,CAAC,EAChE,EAAE,QAAQ,KAA8B,EAAE,EAAA;AAE1C,IAAA,QAAQ,GAAG,cAAc,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;AAC3D,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC3C,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;AAClE,QAAA,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;AAC/B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEtC,QAAA,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG;AAC1C,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9B,YAAA,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;SAC/B,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,GAAG,GAAG,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,aAAa,EAAE,GAAG,GAAG,EAAE,CAAC;YACtD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3D,YAAA,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;AACxC,YAAA,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC;AACtD,SAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;AACnB,YAAA,IAAI,GAAG,EAAE;gBACR,SAAS,CAAC,MAAK;AACd,oBAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACzC,iBAAC,CAAC,CAAC;gBACH,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA;AACF,SAAC,CAAC,CAAC;QAEH,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,kBAAkB,CACjB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AACjE,gBAAA,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACxB,gBAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,gBAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzB,gBAAA,KAAK,EAAE,CAAC;AACR,aAAA;AACF,SAAC,EACD,EAAE,QAAQ,EAAE,CACZ,CAAC;AAEF,QAAA,OAAO,iBAAiB,CAAC,UAAU,EAAE,CAAC;AACvC,KAAC,CAAC,CAAC;AACJ;;ACzDA;;;;;;;;;;;;;AAaE;AAEF;;AAEG;AACH,MAAM,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAE5D;;;;;AAKG;AACU,MAAA,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,GAAG,oBAAoB,CAChF,CAAC,OAAoB,KAAK,OAAO,CAAC,GAAG,EACrC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,WAAW,CAAC,CAAC,EAAE,EACvD;AAqCF;;AAEG;MACU,WAAW,CAAA;AAtCxB,IAAA,WAAA,GAAA;AAuCC;;AAEG;AACK,QAAA,IAAA,CAAA,MAAM,GAAG,WAAW,CAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpG;;AAEG;QACM,IAAU,CAAA,UAAA,GAAG,YAAY,EAAS,CAAC;AAwB5C;;AAEG;QACH,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAEpC;;AAEG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAElB;;AAEG;AACH,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,OAAO;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,SAAS,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChD,YAAA,SAAS,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChD,SAAA,CAAC,CAAC,CAAC;AACJ,KAAA;AA3CA;;;;;AAKG;IACH,IAA8C,KAAK,CAAC,IAAY,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAC1B;IAED,IAA+B,MAAM,CAAC,KAAgC,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAA+B,MAAM,CAAC,KAAc,EAAA;QACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAAmC,UAAU,CAAC,SAAiB,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;8GA/BW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EANZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,SAAA,EAAA,CAAC,qBAAqB,EAAE,CAAC,EA7B1B,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIS,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAU1B,WAAW,EAAA,UAAA,EAAA,CAAA;kBAtCvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,CAAA,CAAA;AACD;;AAEG;AACH,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;AACvC;;AAEG;AACH,oBAAA,SAAS,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;8BAaS,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAQwC,KAAK,EAAA,CAAA;sBAAlD,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAIT,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIM,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIU,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;;;;ACnG9B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;SAEf,wBAAwB,CACvC,EAAkB,EAClB,MAAoB,EACpB,IAAuC,EAAA;IAEvC,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAC3D,IAAA,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAkB,EAAE,MAAoB,EAAA;IACrE,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC5C,IAAA,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CACvB,EAAkB,EAClB,MAAoB,EACpB,SAA0B,EAC1B,OAAyB,EAAA;IAEzB,MAAM,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AACvD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AAChC,IAAA,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B,IAAA,SAAS,CAAC,aAAa,CAAC,SAAgB,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,EAAE;QACtB,MAAM,oBAAoB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,aAAa,GAAG,oBAAoB,CAAC;AAC5C,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,EAAkB,EAAE,MAAoB,EAAA;AAC5D,IAAA,IAAI,MAAM,YAAY,KAAK,CAAC,kBAAkB,EAAE;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC;AACnB,KAAA;AAAM,SAAA,IAAI,MAAM,YAAY,KAAK,CAAC,iBAAiB,EAAE;QACrD,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/D,QAAA,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC/C,OAAO,CAAC,GAAG,QAAQ,CAAC;AACpB,KAAA;AAAM,SAAA;AACN,QAAA,OAAO,CAAC,CAAC;AACT,KAAA;AACF,CAAC;AAED,SAAS,YAAY,CAAC,EAAkB,EAAE,MAAoB,EAAE,WAA0B,EAAA;IACzF,IAAI,MAAM,YAAY,KAAK,CAAC,iBAAiB,IAAI,MAAM,YAAY,KAAK,CAAC,kBAAkB,EAAE;QAC5F,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AAChC,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAa,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAEzE,SAAS,YAAY,CAAC,MAAqB,EAAE,WAAqB,EAAE,OAAO,GAAG,EAAE,EAAA;IAC/E,IAAI,QAAQ,GAAG,WAAW,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;AAC9B,QAAA,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAClF,KAAA;IACD,OAAO,OAAO,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAqB,KAAI;IACrD,OAAO,CAAC,MAAqB,KAAK,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEzD,MAAM,kBAAkB,GAAG,CAAC,CAAC,gBAAyC,KAAI;AACzE,IAAA,OAAO,CAAC,MAAqB,EAAE,MAAc,KAC5C,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACzE,CAAC,EAAE,CAAC,CAAS,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MAsB/F,eAAe,CAAA;kBACnB,IAAI,CAAA,EAAA;aAAL,IAAM,CAAA,EAAA,CAAA,GAAG,IAAH,CAAQ,EAAA;AA2ErB,IAAA,WAAA,GAAA;QAzEA,IAAU,CAAA,UAAA,GAAG,oBAAoB,EAAE,CAAC;QAS5B,IAAK,CAAA,KAAA,GAAG,cAAc,EAAE,CAAC;QACzB,IAAE,CAAA,EAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzC,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE/B,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAC;AACzB,YAAA,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;AACvD,SAAC,CAAC,CAAC;QAEK,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAgB,CAAC,CAAC;AAC3F,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC3C,YAAA,IAAI,aAAa;AAAE,gBAAA,OAAO,aAAa,CAAC;AACxC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACnC,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAwB,CAAC;YAC/C,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,aAAc,CAAC;AAC5C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YACtB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG;AACpD,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBAC3B,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;aAC5B,CAAC;AAEF,YAAA,IAAI,SAAS,EAAE;gBACd,OAAO;AACN,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,oBAAA,cAAc,EAAE,aAAa;AAC7B,oBAAA,aAAa,EAAE,MAAM;iBACrB,CAAC;AACF,aAAA;YAED,OAAO;AACN,gBAAA,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,MAAM,GAAG,0BAA0B,GAAG,MAAM;gBACvD,IAAI,UAAU,IAAI;AACjB,oBAAA,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACrB,oBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACnB,CAAC;AACF,gBAAA,IAAI,KAAK,IAAI,EAAE,CAAC;aAChB,CAAC;AACH,SAAC,CAAC,CAAC;QACH,IAAoB,CAAA,oBAAA,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;QAGjH,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;KACpB;IAEO,qBAAqB,GAAA;QAC5B,MAAM,CAAC,MAAK;YACX,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAW,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1C,YAAA,IAAI,OAAO,IAAI,OAAO,KAAK,UAAU,EAAE;gBACtC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAE,CAAC;AACjF,gBAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC/B,gBAAA,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAChC,aAAA;AAAM,iBAAA;AACN,gBAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAK,CAAC;AACxB,gBAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAK,CAAC;AAC1B,gBAAA,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,IAAK,CAAC;AAC/B,aAAA;AACF,SAAC,CAAC,CAAC;KACH;IAEO,aAAa,GAAA;AACpB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACpB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,IAAI,KAAK,IAAI,OAAO,EAAE;AACrB,gBAAA,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG;oBAC5E,IAAI,CAAC,MAAM,EAAE;AACb,oBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC3B,oBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACrB,oBAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACtB,oBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,oBAAA,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;AAC5C,oBAAA,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;iBAClC,CAAC;gBACF,KAAK,CAAC,iBAAiB,EAAE,CAAC;AAC1B,gBAAA,IAAI,SAAS,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,qEAAqE,CAAC;AAC9F,iBAAA;AAAM,qBAAA;oBACN,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACnD,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,wDAAwD,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAChI,iBAAA;AAED,gBAAA,IAAI,MAAM,EAAE;AACX,oBAAA,IAAI,OAAO;AAAE,wBAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;AAChC,wBAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACjC,iBAAA;gBAED,SAAS,CAAC,MAAK;AACd,oBAAA,IAAI,MAAM;AAAE,wBAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAC,CAAC,CAAC;AACH,aAAA;AACF,SAAC,CAAC,CAAC;KACH;IAEO,eAAe,GAAA;QACtB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;YACjF,IAAI,OAAO,IAAI,YAAY,EAAE;AAC5B,gBAAA,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;AACjC,aAAA;AACF,SAAC,CAAC,CAAC;KACH;IAEO,MAAM,GAAA;AACb,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACpB,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG;AACzC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACvB,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;aACzB,CAAC;AAEF,YAAA,IAAI,OAAO,EAAE;AACZ,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,MAAM,MAAM,GAAuD,SAAS;AAC3E,sBAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAC9B,sBAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAElD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,CAAC;AACnD,gBAAA,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE;AACvB,oBAAA,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;wBAC5B,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1C,qBAAA;AAAM,yBAAA;wBACN,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,qBAAA;AACD,iBAAA;gBACD,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAEvB,gBAAA,IAAI,UAAoC,CAAC;AACzC,gBAAA,IAAI,aAA0B,CAAC;AAC/B;;;AAGG;AACH,gBAAA,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAK;AACtC,oBAAA,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;wBACjC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC3D,wBAAA,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtE,wBAAA,OAAO,aAAa,IAAI,aAAa,CAAC,gBAAgB,EAAE;AACvD,4BAAA,aAAa,GAAG,aAAa,CAAC,gBAA+B,CAAC;AAC9D,yBAAA;AACD,wBAAA,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE;AAC9B,4BAAA,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE;gCAClC,aAAa,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACvD,6BAAA;AAAM,iCAAA;gCACN,aAAa,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9C,6BAAA;AACD,yBAAA;wBACD,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC9B,qBAAA;AACF,iBAAC,CAAC,CAAC;gBAEH,SAAS,CAAC,MAAK;oBACd,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBAE1B,IAAI,UAAU,IAAI,aAAa,EAAE;wBAChC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrC,4BAAA,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE;AAClC,gCAAA,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAChC,6BAAA;4BACD,IAAI,CAAC,MAAM,EAAE,CAAC;AACf,yBAAC,CAAC,CAAC;wBAEH,UAAU,CAAC,OAAO,EAAE,CAAC;AACrB,qBAAA;oBAED,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,wBAAA,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;AAC5B,4BAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1B,yBAAA;wBACD,IAAI,CAAC,MAAM,EAAE,CAAC;AACf,qBAAC,CAAC,CAAC;oBACH,GAAG,CAAC,OAAO,EAAE,CAAC;AACd,oBAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;AAC3B,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AAClB,iBAAC,CAAC,CAAC;AACH,aAAA;AACF,SAAC,CAAC,CAAC;KACH;IAEO,YAAY,GAAA;AACnB,QAAA,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,QAAA,kBAAkB,CAAC,CAAC,EAAE,KAAI;AACzB,YAAA,MAAM,CACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,IAAI,EACJ,GAAG,EACH,kBAAkB,EAClB,OAAO,EACP,KAAK,EACL,SAAS,EACT,OAAO,EACP,WAAW,EACX,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,GAAG;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa;gBACtC,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;gBACnC,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBACzB,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa;AAC9C,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC1B,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;aACvB,CAAC;YACF,IAAI,KAAK,IAAI,OAAO,EAAE;gBACrB,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAC3B,gBAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,gBAAA,MAAM,GAAG,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAE7E,gBAAA,IACC,SAAS;oBACT,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG;AACrC,oBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AACvC,oBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EACtC;oBACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC3D,IAAI,cAAc,GAAkD,KAAK,CAAC;AAE1E,oBAAA,IAAI,kBAAkB,EAAE;AACvB,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3B,4BAAA,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;AACnF,yBAAA;6BAAM,IAAI,OAAO,KAAK,UAAU,EAAE;AAClC,4BAAA,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,yBAAA;AACD,qBAAA;oBAED,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,oBAAA,IAAI,cAAc,EAAE;AACnB,wBAAA,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC5E,wBAAA,OAAO,GAAG,SAAS,IAAI,CAAC,cAAc,CAAC;AACvC,qBAAA;AAAM,yBAAA;wBACN,OAAO,GAAG,CAAC,cAAc,CAAC;AAC1B,qBAAA;oBAED,IAAI,iBAAiB,KAAK,OAAO,EAAE;AAClC,wBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE;4BACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACxC,yBAAA;AAAM,6BAAA;AACN,4BAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AACnD,yBAAA;AACD,qBAAA;AAED,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,OAAO;0BACnB,kBAAkB;8BACjB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AAC7B,8BAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;0BACnB,WAAW,CAAC;AAEf,oBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAEhE,oBAAA,IAAI,SAAS,EAAE;AACd,wBAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClE,wBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC7D,wBAAA,MAAM,EAAE,oBAAoB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAkC,CAAC;wBAC9F,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;wBACnE,MAAM,eAAe,GAAG,oBAAoB;8BACzC,CAAS,MAAA,EAAA,GAAG,CAAc,WAAA,EAAA,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA,GAAA,EAAM,OAAO,CACnE,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,CACjB,CAAK,GAAA,CAAA;AACR,8BAAE,CAAA,WAAA,EAAc,GAAG,CAAA,GAAA,CAAK,CAAC;AAC1B,wBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;AAC/B,wBAAA,IAAI,MAAM,EAAE;4BACX,MAAM,GAAG,MAAM,CAAC,kBAAkB;AAChC,iCAAA,KAAK,EAAE;AACP,iCAAA,SAAS,EAAE;iCACX,YAAY,CAAC,MAAM,CAAC;AACpB,iCAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACrB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAClE,4BAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxB,yBAAA;wBACD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;wBACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC1C,wBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,oBAAoB,GAAG,EAAE,GAAG,CAAG,EAAA,GAAG,IAAI,CAAC;wBACnE,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;AACjE,4BAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC5D,4BAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC9D,4BAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAG,EAAA,eAAe,GAAG,YAAY,CAAA,UAAA,EAAa,SAAS,CAAM,GAAA,EAAA,UAAU,KAAK,CAAC;4BAC3H,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAC/D,MAAM,EACN,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,IAAI,GAAG,CAAC,CAClC,CAAC;AACF,yBAAA;AACD,qBAAA;AAAM,yBAAA;wBACN,MAAM,KAAK,GAAG,cAAc,KAAK,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,cAAc,CAAC;AAC7F,wBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,GAAG,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,GAAG,CAAC,CAAC,CAAC,CAAe,YAAA,EAAA,KAAK,GAAG,CAAC;AACnF,qBAAA;oBACD,WAAW,GAAG,GAAG,CAAC;AAClB,oBAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AACtB,iBAAA;AACD,aAAA;YAED,IAAI,CAAC,kBAAkB,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACnE,gBAAA,IAAI,SAAS,EAAE;AACd,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;AACjC,wBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnD,wBAAA,IAAI,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,YAAY,EAAE;AACxC,4BAAA,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAkC,CAAC;4BAEpE,IAAI,oBAAoB,IAAI,QAAQ,EAAE;gCACrC,IAAI,KAAK,KAAK,CAAC,EAAE;AAChB,oCAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wCAC1B,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAI,KAAgB,CAAC,CAAC;AACxD,qCAAA;AAAM,yCAAA,IAAI,KAAK,YAAY,KAAK,CAAC,OAAO,EAAE;AAC1C,wCAAA,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,qCAAA;AAAM,yCAAA;wCACN,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,qCAAA;AACD,iCAAA;AACD,6BAAA;AAAM,iCAAA;gCACN,MAAM,KAAK,GAAG,CAAC,cAAc,IAAI,EAAE,IAAI,GAAG,CAAC;AAC3C,gCAAA,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC;AACjC,gCAAA,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC;gCAElC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,6BAAA;AAED,4BAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,yBAAA;AACD,qBAAA;AACD,iBAAA;AAAM,qBAAA;oBACN,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhC,oBAAA,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,YAAY,EAAE;AAC1C,wBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAClC,wBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AAClC,wBAAA,MAAM,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;wBAEnC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEpC,wBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,qBAAA;oBAED,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,iBAAA;AACD,aAAA;AACF,SAAC,CAAC,CAAC;KACH;8GA7YW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAUQ,gBAAgB,EA3BzC,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;AAcT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEd,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;AAcT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,iBAAA,CAAA;0EAMkD,iBAAiB,EAAA,CAAA;sBAAlE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACD,cAAc,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAEX,QAAQ,EAAA,CAAA;sBAAzC,SAAS;uBAAC,qBAAqB,CAAA;gBACE,QAAQ,EAAA,CAAA;sBAAzC,SAAS;uBAAC,qBAAqB,CAAA;gBACuB,YAAY,EAAA,CAAA;sBAAlE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;;;ACrHtD,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;MAwC1C,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,GAAG,oBAAoB,CAChF,CAAC,IAAc,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EACjE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,EACpD;MAsCW,QAAQ,CAAA;AA3BrB,IAAA,WAAA,GAAA;AA4BC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAE9B,IAAM,CAAA,MAAA,GAAG,WAAW,CAAgB;AACnC,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1B,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,iBAAiB,EAAE,wBAAwB;AAC3C,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,aAAa,EAAE,KAAK;AACpB,SAAA,CAAC,CAAC;QAMM,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAS,CAAC;AAwFhC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAW,CAAC;QAEjD,IAAgB,CAAA,gBAAA,GAAG,YAAY,EAAQ,CAAC;QAEhC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEpD,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC/B,YAAA,QACC,CAAC,OAAO,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EACxG;AACH,SAAC,CAAC,CAAC;QAEH,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACpD,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAEpC,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO;gBACN,YAAY,EAAE,CAAC,SAAS;iCACV,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCV,MAAA,CAAA;AACH,sBAAE,SAAS;gBACZ,cAAc,aAAa,CAAA;;;;AAIvB,MAAA,CAAA;aACJ,CAAC;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,KAAK,GAAG;YACP,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;YAChD,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACxD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;YAClD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACpD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC;AACF,KAAA;IAxLA,IAA0D,OAAO,CAAC,OAA6B,EAAA;QAC9F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC7B;IAID,IAA4B,GAAG,CAAC,EAA+B,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KACxB;IAED,IAAqC,YAAY,CAAC,WAA0B,EAAA;QAC3E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;IAED,IAAgC,OAAO,CAAC,MAA2B,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAiC,QAAQ,CAAC,OAAiC,EAAA;QAC1E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC7B;IAED,IAAoC,WAAW,CAAC,UAAuC,EAAA;QACtF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;IAED,IAAuC,cAAc,CAAC,aAA6C,EAAA;QAClG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;KACnC;IAED,IAAkC,SAAS,CAAC,QAAmC,EAAA;QAC9E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAAkC,SAAS,CAAC,QAAmC,EAAA;QAC9E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAA+B,MAAM,CAAC,KAA6B,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAAiC,QAAQ,CAAC,OAAgB,EAAA;QACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC7B;IAED,IAAmC,UAAU,CAAC,SAAkB,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;IAED,IAAgC,OAAO,CAAC,MAAe,EAAA;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAgC,OAAO,CAAC,MAAe,EAAA;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAoC,WAAW,CAAC,UAAmB,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;IAED,IAA6B,IAAI,CAAC,GAAW,EAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KACzB;IAED,IAAwC,eAAe,CAAC,cAAsB,EAAA;QAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;KACpC;IAED,IAAsC,aAAa,CAAC,YAAoB,EAAA;QACvE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;KAClC;IAED,IAA0C,iBAAiB,CAAC,gBAAwB,EAAA;QACnF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;KACtC;IAED,IAA+B,MAAM,CAAC,KAA0B,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAAuC,cAAc,CAAC,aAAsC,EAAA;QAC3F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;KACnC;IAED,IAA2C,kBAAkB,CAC5D,iBAAqD,EAAA;QAErD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACvC;8GA9GW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,WAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,cAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,WAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,IAAA,EAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,eAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,cAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAHT,CAAC,qBAAqB,EAAE,CAAC,EAuBtB,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,eAAe,EAAU,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,EA5CxC,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;EAmBT,EACS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,6FAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAInB,QAAQ,EAAA,UAAA,EAAA,CAAA;kBA3BpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,CAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC;AAChC,oBAAA,SAAS,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;8BAqB0D,OAAO,EAAA,CAAA;sBAAhE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;gBAI3C,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEsB,GAAG,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;gBAIe,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;gBAIC,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIO,QAAQ,EAAA,CAAA;sBAAxC,KAAK;uBAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;gBAIS,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAIS,cAAc,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;gBAIC,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIM,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIG,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIQ,QAAQ,EAAA,CAAA;sBAAxC,KAAK;uBAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;gBAIQ,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;gBAIG,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIM,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIU,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAID,IAAI,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;gBAIiB,eAAe,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA;gBAII,aAAa,EAAA,CAAA;sBAAlD,KAAK;uBAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;gBAIU,iBAAiB,EAAA,CAAA;sBAA1D,KAAK;uBAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAA;gBAIL,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIc,cAAc,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;gBAIU,kBAAkB,EAAA,CAAA;sBAA5D,KAAK;uBAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;gBAM3B,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;AC3JR,MAAM,YAAY,GAA0C;AAC3D,IAAA,KAAK,EAAE,EAAE;CACT,CAAC;AAEI,SAAU,wBAAwB,CACvC,mBAAiH,EACjH,EAAE,QAAQ,KAA8B,EAAE,EAAA;AAE1C,IAAA,QAAQ,GAAG,cAAc,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;AAC9D,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,YAAY,EAAE,IAAI,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,QAAA,MAAM,OAAO,GAAG,MAAM,CACrB,CAAC,MAAK;AACL,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM;AACvD,gBAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aAC9C,CAAC,CAAC,IAAI,EAAE,CAAC;AACV,YAAA,OAAO,IAAI,KAAK,CAAC,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;SACtE,GAAG,CACJ,CAAC;QAEF,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AAClE,YAAA,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AACzD,YAAA,IAAI,CAAC,OAAO;gBAAE,OAAO;AACrB,YAAA,MAAM,gBAAgB,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC;AAC7F,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAElC,YAAA,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAEhD,YAAA,IAAI,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACnC,aAAA;YAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAChC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAEnC,YAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAExC,gBAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AACpC,oBAAA,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AACvE,iBAAA;AAAM,qBAAA;AACN,oBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,iBAAA;gBAED,KAAK,CAAC,YAAY,EAAE,CAAC;AAErB,gBAAA,IAAI,gBAAgB,EAAE;oBACrB,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C,iBAAA;AAED,gBAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3C,aAAA;AAED,YAAA,IAAI,gBAAgB,EAAE;AACrB,gBAAA,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAC7C,aAAA;YAED,WAAW,CAAC,MAAM,CAAC,CAAC;YAEpB,SAAS,CAAC,MAAK;gBACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAoC,CAAC,CAAC;AAC/D,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,KAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;MAqBL,WAAW,CAAA;IAKvB,IAA+B,MAAM,CAAC,KAAa,EAAA;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAA8B,KAAK,CAAC,IAAwB,EAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAC1B;IAED,IAAmC,UAAU,CAAC,SAAwC,EAAA;QACrF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;IAED,IAAgC,OAAO,CAAC,MAAc,EAAA;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAuC,cAAc,CAAC,aAA0C,EAAA;QAC/F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;KACnC;AAgBD,IAAA,WAAA,GAAA;QAtCQ,IAAM,CAAA,MAAA,GAAG,WAAW,CAA0B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5D,IAAU,CAAA,UAAA,GAAG,YAAY,EAAS,CAAC;AAsBpC,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAC9C,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,IAAI,CAAC;AAC1B,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAE9E,MAAM,gBAAgB,GACrB,aAAa;AACZ,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAyB,CAAC;YAEnG,MAAM,OAAO,GAAG,IAAI,IAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,CAAgB,CAAC;AAEhG,YAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AACrF,SAAC,CAAC,CAAC;AAGF,QAAA,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACnD;8GAzCW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAPb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,KAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,cAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAGW,WAAW,EAAA,UAAA,EAAA,CAAA;kBAVvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;0EAIS,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEyB,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIK,KAAK,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;gBAIW,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;gBAIG,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIa,cAAc,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;;;ACxJlC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,CAAC;MAuBrD,UAAU,CAAA;AArBvB,IAAA,WAAA,GAAA;QAsBC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AACZ,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEtB,IAAM,CAAA,MAAA,GAAG,WAAW,CAAkB;AAC7C,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,GAAG;AACZ,SAAA,CAAC,CAAC;QAEM,IAAS,CAAA,SAAA,GAAG,YAAY,EAAQ,CAAC;QAsBlC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,IAAG,CAAA,GAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAE9C,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,YAAA,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;AACnB,YAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;AACpE,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAC5C,MAAM,CAAC,KAAK,GAAG,CAAC,EAChB,MAAM,CAAC,MAAM,GAAG,CAAC,EACjB,CAAC,EACD,MAAM,CAAC,KAAK,GAAG,CAAC,EAChB,MAAM,CAAC,MAAM,GAAG,CAAC,EACjB,MAAM,CAAC,KAAK,GAAG,CAAC,CAChB,CAAC;AACF,YAAA,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpE,YAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC1C,YAAA,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC7B,YAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACpD,YAAA,OAAO,MAAM,CAAC;AACf,SAAC,CAAC,CAAC;AACH,KAAA;IA/CA,IAAmC,UAAU,CAAC,SAAiB,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;IAED,IAA6B,IAAI,CAAC,GAAY,EAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KACzB;IAED,IAA+B,MAAM,CAAC,KAAgC,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAAiC,QAAQ,CAAC,OAAe,EAAA;QACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC7B;IAED,IAAoC,WAAW,CAAC,UAAmB,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;8GAhCW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAlBZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,IAAA,EAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,WAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;AAcT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACS,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGL,UAAU,EAAA,UAAA,EAAA,CAAA;kBArBtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;AAcT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;8BAaS,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAE6B,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;gBAIA,IAAI,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;gBAIQ,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIQ,QAAQ,EAAA,CAAA;sBAAxC,KAAK;uBAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;gBAIS,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;;;MC/DlB,WAAW,CAAA;IAGvB,IAAgC,OAAO,CAAC,MAA2B,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAwC,eAAe,CAAC,cAAsB,EAAA;QAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;KACpC;IAED,IAAgC,OAAO,CAAC,MAAkC,EAAA;QACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;AAiBD,IAAA,WAAA,GAAA;QA7BQ,IAAM,CAAA,MAAA,GAAG,WAAW,EAAoB,CAAC;AAczC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAK,CAAA,KAAA,GAAG,cAAc,EAAE,CAAC;QACzB,IAAE,CAAA,EAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEtD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAC1B,YAAA,OAAO,KAAK,CAAC;AACd,SAAC,CAAC,CAAC;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACpB,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7F,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5F,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,YAAA,IAAI,cAAc;gBAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhG,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,YAAA,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,GAAG,EAAE,CAAC;AACP,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACH;8GA7CW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,eAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;0EAIzB,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIc,eAAe,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA;gBAIF,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;;;ACO3B;AACA,MAAM,aAAa,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvE;AACA,SAAS,aAAa,CAAC,OAAe,EAAE,WAAmB,EAAE,SAAS,GAAG,GAAG,EAAA;IAC3E,OAAO,WAAW,GAAG,SAAS,GAAG,OAAO,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC;AAC9D,CAAC;MAEY,YAAY,CAAA;AAgBxB,IAAA,WAAA,CAAY,EACX,IAAI,GAAG,GAAG,EACV,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,GAAG,EACZ,SAAS,GAAG,GAAG,EACf,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,CAAC,EACb,QAAQ,GAAG,GAAG,EACd,KAAK,GAAG,QAAQ;IAChB,IAAI,GAAG,aAAa,GAAA,GACJ,EAAE,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAiC,CAAC;AAE/C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,WAAW,EAAE,CAAC;KACnB;IAED,WAAW,GAAA;QACV,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAExC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,cAAc,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,EAAA,CAAI,CAAC;KAC9E;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;;QAGb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC/B,YAAA,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC;;AAE1B,YAAA,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,aAAA;AACF,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;KAChC;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,aAAa,CAAC;AAClD,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC/D;AAED,IAAA,QAAQ,CAAC,KAA6B,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAE/C,QAAA,IAAI,IAAI,EAAE;YACT,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/D,YAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAE9D,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBAElF,IAAI,KAAK,GAAG,CAAC,EAAE;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,wBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;4BACf,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;4BAC5B,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;AAC5B,4BAAA,GAAG,EAAE,CAAC;4BACN,KAAK;AACL,yBAAA,CAAC,CAAC;AACH,qBAAA;AACD,iBAAA;AACD,aAAA;AACD,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACvE;AAED,IAAA,SAAS,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,GAAG,GAAG;AACX,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;YACtB,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI;SAC5B,CAAC;QAEF,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AAClC,YAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACvD,SAAA;AAAM,aAAA;YACN,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACjF,SAAA;AAED,QAAA,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC;;QAGzB,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CACxC,GAAG,CAAC,CAAC,EACL,GAAG,CAAC,CAAC,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAC1B,GAAG,CAAC,CAAC,EACL,GAAG,CAAC,CAAC,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CACnB,CAAC;QACF,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAuB,oBAAA,EAAA,IAAI,CAAC,SAAS,CAAG,CAAA,CAAA,CAAC,CAAC;AAC9D,QAAA,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAA,kBAAA,CAAoB,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KAChB;AACD;;ACrLK,SAAU,sBAAsB,CACrC,aAAyC,EACzC,EAAE,QAAQ,KAA8B,EAAE,EAAA;AAE1C,IAAA,QAAQ,GAAG,cAAc,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AAC5D,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC3C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtE,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;AAEhD,QAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AAChC,YAAA,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,MAAM,GAAG,CAAC,EAA+B,KAAK,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAG,CAAC,CAAC;AAE7E,QAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5B,KAAC,CAAC,CAAC;AACJ;;ACKA,MAAM,SAAS,GAAG,CAAC,UAAwB,EAAE,KAAK,GAAG,CAAC,KAAkB;IACvE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;AACnC,IAAA,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AAgBF,MAAM,eAAe,GAAsB;AAC1C,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,QAAQ,EAAE,CAAC;CACX,CAAC;AAEI,SAAU,eAAe,CAC9B,aAAkD,EAClD,eAAiD,EACjD,EAAE,QAAQ,EAAA,GAA8B,EAAE,EAAA;AAE1C,IAAA,QAAQ,GAAG,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AACrD,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAe,IAAI,YAAY,EAAE,CAAC,CAAC;QACzD,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,QAAA,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAE1C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAChC,YAAA,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC,aAAa,CAAC;AAClD,YAAA,OAAO,OAAO,CAAC;AAChB,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AACjF,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAChD,YAAA,IAAI,MAAM,EAAE;gBACX,SAAS,CAAC,MAAK;AACd,oBAAA,OAAO,CAAC,GAAG,CACV,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7F,CAAC;AACH,iBAAC,CAAC,CAAC;AACH,aAAA;AACF,SAAC,CAAC,CAAC;QAEH,kBAAkB,CAAC,MAAK;YACvB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACjG,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO;YAE/B,IAAI,UAAU,KAAK,CAAC,EAAE;AACrB,gBAAA,IAAI,WAA0B,CAAC;AAC/B,gBAAA,IAAI,KAAK,EAAE;AACV,oBAAA,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC9B,iBAAA;AAAM,qBAAA;AACN,oBAAA,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;oBACvC,WAAW,GAAG,aAAa,CAAC;AAC5B,iBAAA;AAED,gBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,oBAAA,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,MAAM;wBAAE,SAAS;AAE5D,oBAAA,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACrB,oBAAA,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrD,iBAAA;AACD,gBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/B,aAAA;AAED,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AACpC,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,KAAC,CAAC,CAAC;AACJ,CAAC;AAeD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;MAoBX,SAAS,CAAA;IAKrB,IAA+B,MAAM,CAAC,KAAgC,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3B;IAED,IAAqC,YAAY,CAAC,WAAsC,EAAA;QACvF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;IAED,IAAgC,OAAO,CAAC,MAA8B,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAkC,SAAS,CAAC,QAAoC,EAAA;AAC/E,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;KACnE;AA8DD,IAAA,WAAA,GAAA;AAhFQ,QAAA,IAAA,CAAA,MAAM,GAAG,WAAW,CAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAErF,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAQ,CAAC;QAkBzC,IAAQ,CAAA,QAAA,GAAG,YAAY,EAAS,CAAC;QAEzB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAK,CAAA,KAAA,GAAG,cAAc,EAAE,CAAC;QACzB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,MAAM,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1C,YAAA,IAAI,KAAK,EAAE;AACV,gBAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC/E,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAC,CAAC,CAAC;QAEK,IAAM,CAAA,MAAA,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAEvE,YAAA,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC;gBAC9B,SAAS,EAAE,GAAG,GAAG,KAAK;gBACtB,KAAK;AACL,gBAAA,eAAe,EAAE,CAAC;AAClB,gBAAA,UAAU,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtD,aAAA,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AAsBH,YAAA,OAAO,CAAC,CAAC;AACV,SAAC,CAAC,CAAC;QAGF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;KACpB;IAEO,eAAe,GAAA;QACtB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,YAAA,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACH;IAEO,YAAY,GAAA;QACnB,kBAAkB,CAAC,MAAK;AACvB,YAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KACH;8GAlGW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAfX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;EAWT,EACS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,sJAAE,gBAAgB,EAAA,QAAA,EAAA,+BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGzB,SAAS,EAAA,UAAA,EAAA,CAAA;kBAlBrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,CAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC;oBACtC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,iBAAA,CAAA;0EAIS,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEyB,MAAM,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;gBAIY,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;gBAIC,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIQ,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;;;AC1K7B;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/animations/animations.ts","../../../../libs/soba/misc/src/bake-shadows/bake-shadows.ts","../../../../libs/soba/misc/src/fbo/fbo.ts","../../../../libs/soba/misc/src/caustics/caustics.ts","../../../../libs/soba/misc/src/decal/decal.ts","../../../../libs/soba/misc/src/depth-buffer/depth-buffer.ts","../../../../libs/soba/misc/src/example/example.ts","../../../../libs/soba/misc/src/html/html-wrapper.ts","../../../../libs/soba/misc/src/html/html.ts","../../../../libs/soba/misc/src/sampler/sampler.ts","../../../../libs/soba/misc/src/shadow/shadow.ts","../../../../libs/soba/misc/src/stats-gl/stats-gl.ts","../../../../libs/soba/misc/src/trail-texture/trail-texture.ts","../../../../libs/soba/misc/src/trail-texture/inject-trail-texture.ts","../../../../libs/soba/misc/src/trail/trail.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { Injector, computed, effect, runInInjectionContext } from '@angular/core';\nimport { injectBeforeRender, injectNgtRef, type NgtRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport function injectNgtsAnimations(\n\tanimationsFactory: () => THREE.AnimationClip[],\n\t{\n\t\tref,\n\t\tinjector,\n\t\tplayFirstClip = true,\n\t}: { ref?: NgtRef<THREE.Object3D>; playFirstClip?: boolean; injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsAnimations, injector);\n\n\tconst mixer = new THREE.AnimationMixer(null!);\n\tconst actions = {} as Record<string, THREE.AnimationAction>;\n\tlet cached = {} as Record<string, THREE.AnimationAction>;\n\tlet object: THREE.Object3D | null = null;\n\tconst names = [] as string[];\n\tconst clips = [] as THREE.AnimationClip[];\n\n\treturn runInInjectionContext(injector, () => {\n\t\tlet actualRef = injectNgtRef<THREE.Object3D>();\n\n\t\tif (ref) {\n\t\t\tif (ref instanceof THREE.Object3D) {\n\t\t\t\tactualRef.nativeElement = ref;\n\t\t\t} else {\n\t\t\t\tactualRef = ref;\n\t\t\t}\n\t\t}\n\n\t\tinjectBeforeRender(({ delta }) => mixer.update(delta));\n\n\t\tconst ready = computed(() => !!actualRef.nativeElement && !!animationsFactory().length);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst actual = actualRef.nativeElement;\n\t\t\tif (!actual) return;\n\t\t\tobject = actual;\n\t\t\tconst animations = animationsFactory();\n\n\t\t\tfor (let i = 0; i < animations.length; i++) {\n\t\t\t\tconst clip = animations[i];\n\n\t\t\t\tnames.push(clip.name);\n\t\t\t\tclips.push(clip);\n\n\t\t\t\tObject.defineProperty(actions, clip.name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\treturn cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (i === 0 && playFirstClip) {\n\t\t\t\t\tactions[clip.name].play();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonCleanup(() => {\n\t\t\t\t// clear cached\n\t\t\t\tcached = {};\n\t\t\t\t// stop all actions\n\t\t\t\tmixer.stopAllAction();\n\t\t\t\t// uncache actions\n\t\t\t\tObject.values(actions).forEach((action) => {\n\t\t\t\t\tmixer.uncacheAction(action as unknown as THREE.AnimationClip, object!);\n\t\t\t\t});\n\n\t\t\t\tobject = null;\n\t\t\t});\n\t\t});\n\n\t\treturn { ref: actualRef, actions, mixer, names, clips, ready };\n\t});\n}\n","import { Directive, effect } from '@angular/core';\nimport { injectNgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows {\n\tconstructor() {\n\t\tconst store = injectNgtStore();\n\t\tconst glShadowMap = store.select('gl', 'shadowMap');\n\t\teffect((onCleanup) => {\n\t\t\tconst shadowMap = glShadowMap();\n\t\t\tshadowMap.autoUpdate = false;\n\t\t\tshadowMap.needsUpdate = true;\n\t\t\tonCleanup(() => {\n\t\t\t\tshadowMap.autoUpdate = shadowMap.needsUpdate = true;\n\t\t\t});\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDestroyRef,\n\tcomputed,\n\teffect,\n\tinject,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport { injectNgtStore, safeDetectChanges } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n\t/** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n\tsamples?: number;\n\t/** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n\tdepth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n\twidth?: number | FBOSettings;\n\theight?: number;\n\tsettings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(fboParams: () => NgtsFBOParams, { injector }: { injector?: Injector } = {}) {\n\tinjector = assertInjector(injectNgtsFBO, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst store = injectNgtStore();\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\tconst targetSignal = signal<THREE.WebGLRenderTarget | null>(null);\n\n\t\tinject(DestroyRef).onDestroy(() => targetSignal()?.dispose());\n\n\t\tconst [defaultWidth, defaultHeight, dpr] = [\n\t\t\tstore.select('size', 'width'),\n\t\t\tstore.select('size', 'height'),\n\t\t\tstore.select('viewport', 'dpr'),\n\t\t];\n\t\tconst fboSettings = computed(() => {\n\t\t\tconst { width, height, settings } = fboParams();\n\t\t\treturn [\n\t\t\t\ttypeof width === 'number' ? width : defaultWidth() * dpr(),\n\t\t\t\ttypeof height === 'number' ? height : defaultHeight() * dpr(),\n\t\t\t\t(typeof width === 'number' ? settings : (width as FBOSettings)) || {},\n\t\t\t] as const;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [width, height, { samples = 0, depth, ...settings }] = fboSettings();\n\t\t\tlet untrackedTarget = untracked(targetSignal);\n\t\t\tif (!untrackedTarget) {\n\t\t\t\tconst target = new THREE.WebGLRenderTarget(width, height, {\n\t\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\t\ttype: THREE.HalfFloatType,\n\t\t\t\t\t...settings,\n\t\t\t\t});\n\t\t\t\tif (depth) target.depthTexture = new THREE.DepthTexture(width, height, THREE.FloatType);\n\n\t\t\t\ttarget.samples = samples;\n\t\t\t\tuntracked(() => {\n\t\t\t\t\ttargetSignal.set(target);\n\t\t\t\t});\n\t\t\t\tuntrackedTarget = untracked(targetSignal);\n\t\t\t}\n\n\t\t\tif (untrackedTarget) {\n\t\t\t\tuntrackedTarget.setSize(width, height);\n\t\t\t\tif (samples) untrackedTarget.samples = samples;\n\t\t\t\tsafeDetectChanges(cdr);\n\t\t\t}\n\t\t});\n\n\t\treturn targetSignal.asReadonly();\n\t});\n}\n","import { NgIf } from '@angular/common';\nimport { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, ElementRef, Input } from '@angular/core';\nimport { extend, injectNgtRef, injectNgtStore, signalStore, type NgtGroup } from 'angular-three';\nimport { NgtsEdges } from 'angular-three-soba/abstractions';\nimport { CausticsMaterial, CausticsProjectionMaterial } from 'angular-three-soba/shaders';\nimport { NgtsSobaContent } from 'angular-three-soba/utils';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, Mesh, OrthographicCamera, PlaneGeometry, Scene } from 'three';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nextend({ Group, Scene, Mesh, PlaneGeometry, OrthographicCamera, CausticsProjectionMaterial, LineBasicMaterial });\n\nconst NORMALPROPS = {\n\tdepth: true,\n\tminFilter: THREE.LinearFilter,\n\tmagFilter: THREE.LinearFilter,\n\ttype: THREE.UnsignedByteType,\n};\n\nconst CAUSTICPROPS = {\n\tminFilter: THREE.LinearMipmapLinearFilter,\n\tmagFilter: THREE.LinearFilter,\n\ttype: THREE.FloatType,\n\tgenerateMipmaps: true,\n};\n\ntype CausticsMaterialType = THREE.ShaderMaterial & {\n\tcameraMatrixWorld?: THREE.Matrix4;\n\tcameraProjectionMatrixInv?: THREE.Matrix4;\n\tlightPlaneNormal?: THREE.Vector3;\n\tlightPlaneConstant?: number;\n\tnormalTexture?: THREE.Texture | null;\n\tdepthTexture?: THREE.Texture | null;\n\tlightDir?: THREE.Vector3;\n\tnear?: number;\n\tfar?: number;\n\tmodelMatrix?: THREE.Matrix4;\n\tworldRadius?: number;\n\tior?: number;\n\tbounces?: number;\n\tresolution?: number;\n\tsize?: number;\n\tintensity?: number;\n};\n\ntype CausticsProjectionMaterialType = THREE.MeshNormalMaterial & {\n\tviewMatrix: { value?: THREE.Matrix4 };\n\tcolor?: THREE.Color;\n\tcausticsTexture?: THREE.Texture;\n\tcausticsTextureB?: THREE.Texture;\n\tlightProjMatrix?: THREE.Matrix4;\n\tlightViewMatrix?: THREE.Matrix4;\n};\n\nfunction createNormalMaterial(side: THREE.Side = THREE.FrontSide) {\n\tconst viewMatrix = { value: new THREE.Matrix4() };\n\treturn Object.assign(new THREE.MeshNormalMaterial({ side }), {\n\t\tviewMatrix,\n\t\tonBeforeCompile: (shader: any) => {\n\t\t\tshader.uniforms.viewMatrix = viewMatrix;\n\t\t\tshader.fragmentShader =\n\t\t\t\t`vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n }\\n` +\n\t\t\t\tshader.fragmentShader.replace(\n\t\t\t\t\t'#include <normal_fragment_maps>',\n\t\t\t\t\t`#include <normal_fragment_maps>\n normal = inverseTransformDirection( normal, viewMatrix );\\n`,\n\t\t\t\t);\n\t\t},\n\t});\n}\n\nexport type NgtsCausticsState = {\n\t/** How many frames it will render, set it to Infinity for runtime, default: 1 */\n\tframes: number;\n\t/** Enables visual cues to help you stage your scene, default: false */\n\tdebug: boolean;\n\t/** Will display caustics only and skip the models, default: false */\n\tcausticsOnly: boolean;\n\t/** Will include back faces and enable the backsideIOR prop, default: false */\n\tbackside: boolean;\n\t/** The IOR refraction index, default: 1.1 */\n\tior: number;\n\t/** The IOR refraction index for back faces (only available when backside is enabled), default: 1.1 */\n\tbacksideIOR: number;\n\t/** The texel size, default: 0.3125 */\n\tworldRadius: number;\n\t/** Intensity of the prjected caustics, default: 0.05 */\n\tintensity: number;\n\t/** Caustics color, default: white */\n\tcolor: THREE.ColorRepresentation;\n\t/** Buffer resolution, default: 2048 */\n\tresolution: number;\n\t/** Camera position, it will point towards the contents bounds center, default: [5, 5, 5] */\n\tlightSource: [x: number, y: number, z: number] | ElementRef<THREE.Object3D>;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-caustics': NgtsCausticsState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-caustics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group [ref]=\"causticsRef\" ngtCompound>\n\t\t\t<ngt-scene [ref]=\"sceneRef\">\n\t\t\t\t<ngt-orthographic-camera [ref]=\"cameraRef\" [up]=\"[0, 1, 0]\" />\n\t\t\t\t<ng-content />\n\t\t\t</ngt-scene>\n\t\t\t<ngt-mesh [renderOrder]=\"2\" [ref]=\"planeRef\" [rotation]=\"[-Math.PI / 2, 0, 0]\">\n\t\t\t\t<ngt-plane-geometry />\n\t\t\t\t<ngt-caustics-projection-material\n\t\t\t\t\t*ngIf=\"causticsTargetFbo() && causticsTargetBFbo()\"\n\t\t\t\t\t[transparent]=\"true\"\n\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t[causticsTexture]=\"causticsTargetFbo()!.texture\"\n\t\t\t\t\t[causticsTextureB]=\"causticsTargetBFbo()!.texture\"\n\t\t\t\t\t[blending]=\"CustomBlending\"\n\t\t\t\t\t[blendSrc]=\"OneFactor\"\n\t\t\t\t\t[blendDst]=\"SrcAlphaFactor\"\n\t\t\t\t\t[depthWrite]=\"false\"\n\t\t\t\t/>\n\n\t\t\t\t<ngts-edges *ngIf=\"debug()\">\n\t\t\t\t\t<ngt-line-basic-material *ngtsSobaContent color=\"#ffff00\" [toneMapped]=\"false\" />\n\t\t\t\t</ngts-edges>\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\t`,\n\timports: [NgIf, NgtsEdges, NgtsSobaContent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsCaustics {\n\tCustomBlending = THREE.CustomBlending;\n\tOneFactor = THREE.OneFactor;\n\tSrcAlphaFactor = THREE.SrcAlphaFactor;\n\tMath = Math;\n\n\tprivate inputs = signalStore<NgtsCausticsState>({\n\t\tframes: 1,\n\t\tior: 1.1,\n\t\tcolor: 'white',\n\t\tcausticsOnly: false,\n\t\tbackside: false,\n\t\tbacksideIOR: 1.1,\n\t\tworldRadius: 0.3125,\n\t\tintensity: 0.05,\n\t\tresolution: 2024,\n\t\tlightSource: [5, 5, 5],\n\t});\n\n\t@Input() causticsRef = injectNgtRef<THREE.Group>();\n\n\t/** How many frames it will render, set it to Infinity for runtime, default: 1 */\n\t@Input({ alias: 'frames' }) set _frames(frames: number) {\n\t\tthis.inputs.set({ frames });\n\t}\n\t/** Enables visual cues to help you stage your scene, default: false */\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\t/** Will display caustics only and skip the models, default: false */\n\t@Input({ alias: 'causticsOnly' }) set _causticsOnly(causticsOnly: boolean) {\n\t\tthis.inputs.set({ causticsOnly });\n\t}\n\t/** Will include back faces and enable the backsideIOR prop, default: false */\n\t@Input({ alias: 'backside' }) set _backside(backside: boolean) {\n\t\tthis.inputs.set({ backside });\n\t}\n\t/** The IOR refraction index, default: 1.1 */\n\t@Input({ alias: 'ior' }) set _ior(ior: number) {\n\t\tthis.inputs.set({ ior });\n\t}\n\t/** The IOR refraction index for back faces (only available when backside is enabled), default: 1.1 */\n\t@Input({ alias: 'backsideIOR' }) set _backsideIOR(backsideIOR: number) {\n\t\tthis.inputs.set({ backsideIOR });\n\t}\n\t/** The texel size, default: 0.3125 */\n\t@Input({ alias: 'worldRadius' }) set _worldRadius(worldRadius: number) {\n\t\tthis.inputs.set({ worldRadius });\n\t}\n\t/** Intensity of the prjected caustics, default: 0.05 */\n\t@Input({ alias: 'intensity' }) set _intensity(intensity: number) {\n\t\tthis.inputs.set({ intensity });\n\t}\n\t/** Caustics color, default: white */\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\t/** Buffer resolution, default: 2048 */\n\t@Input({ alias: 'resolution' }) set _resolution(resolution: number) {\n\t\tthis.inputs.set({ resolution });\n\t}\n\t/** Camera position, it will point towards the contents bounds center, default: [5, 5, 5] */\n\t@Input({ alias: 'lightSource' }) set _lightSource(\n\t\tlightSource: [x: number, y: number, z: number] | ElementRef<THREE.Object3D>,\n\t) {\n\t\tthis.inputs.set({ lightSource });\n\t}\n\n\tprivate resolution = this.inputs.select('resolution');\n\n\tprivate normalTargetSettings = computed(() => ({\n\t\twidth: this.resolution(),\n\t\theight: this.resolution(),\n\t\tsettings: NORMALPROPS,\n\t}));\n\n\tprivate causticsTargetSettings = computed(() => ({\n\t\twidth: this.resolution(),\n\t\theight: this.resolution(),\n\t\tsettings: CAUSTICPROPS,\n\t}));\n\n\tprivate normalTargetFbo = injectNgtsFBO(this.normalTargetSettings);\n\tprivate normalTargetBFbo = injectNgtsFBO(this.normalTargetSettings);\n\tcausticsTargetFbo = injectNgtsFBO(this.causticsTargetSettings);\n\tcausticsTargetBFbo = injectNgtsFBO(this.causticsTargetSettings);\n\n\tprivate store = injectNgtStore();\n\n\tcolor = this.inputs.select('color');\n\tdebug = this.inputs.select('debug');\n\n\tplaneRef = injectNgtRef<THREE.Mesh>();\n\tsceneRef = injectNgtRef<THREE.Scene>();\n\tcameraRef = injectNgtRef<THREE.OrthographicCamera>();\n\n\tprivate sceneChildren = this.sceneRef.children();\n\tprivate planeChildren = this.planeRef.children('both');\n\tprivate causticsChildren = this.causticsRef.children();\n\n\tconstructor() {\n\t\tthis.updateWorldMatrix();\n\t\tthis.setBeforeRender();\n\t}\n\n\tprivate updateWorldMatrix() {\n\t\teffect(() => {\n\t\t\tconst [caustics] = [\n\t\t\t\tthis.causticsRef.nativeElement,\n\t\t\t\tthis.inputs.state(),\n\t\t\t\tthis.causticsChildren(),\n\t\t\t\tthis.sceneChildren(),\n\t\t\t];\n\t\t\tif (!caustics) return;\n\t\t\tcaustics.updateWorldMatrix(false, true);\n\t\t});\n\t}\n\n\tprivate setBeforeRender() {\n\t\tconst causticsMaterial = new CausticsMaterial() as CausticsMaterialType;\n\t\tconst causticsQuad = new FullScreenQuad(causticsMaterial);\n\n\t\tconst normalMaterial = createNormalMaterial();\n\t\tconst normalMaterialB = createNormalMaterial(THREE.BackSide);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst [\n\t\t\t\tcaustics,\n\t\t\t\tscene,\n\t\t\t\tcamera,\n\t\t\t\tnormalTarget,\n\t\t\t\tnormalTargetB,\n\t\t\t\tcausticsTarget,\n\t\t\t\tcausticsTargetB,\n\t\t\t\tplane,\n\t\t\t\tsceneChildren,\n\t\t\t] = [\n\t\t\t\tthis.causticsRef.nativeElement,\n\t\t\t\tthis.sceneRef.nativeElement,\n\t\t\t\tthis.cameraRef.nativeElement,\n\t\t\t\tthis.normalTargetFbo(),\n\t\t\t\tthis.normalTargetBFbo(),\n\t\t\t\tthis.causticsTargetFbo(),\n\t\t\t\tthis.causticsTargetBFbo(),\n\t\t\t\tthis.planeRef.nativeElement,\n\t\t\t\tthis.sceneChildren(),\n\t\t\t\tthis.planeChildren(),\n\t\t\t];\n\n\t\t\tif (!caustics) return;\n\t\t\tcaustics.updateWorldMatrix(false, true);\n\n\t\t\tif (sceneChildren.length > 1) {\n\t\t\t\tconst v = new THREE.Vector3();\n\t\t\t\tconst lpF = new THREE.Frustum();\n\t\t\t\tconst lpM = new THREE.Matrix4();\n\t\t\t\tconst lpP = new THREE.Plane();\n\n\t\t\t\tconst lightDir = new THREE.Vector3();\n\t\t\t\tconst lightDirInv = new THREE.Vector3();\n\t\t\t\tconst bounds = new THREE.Box3();\n\t\t\t\tconst focusPos = new THREE.Vector3();\n\n\t\t\t\tlet count = 0;\n\t\t\t\tconst sub = this.store.get('internal').subscribe(({ gl }) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tframes,\n\t\t\t\t\t\tlightSource,\n\t\t\t\t\t\tresolution,\n\t\t\t\t\t\tworldRadius,\n\t\t\t\t\t\tintensity,\n\t\t\t\t\t\tbackside,\n\t\t\t\t\t\tbacksideIOR,\n\t\t\t\t\t\tior,\n\t\t\t\t\t\tcausticsOnly,\n\t\t\t\t\t} = this.inputs.get();\n\n\t\t\t\t\tif (frames === Infinity || count++ < frames) {\n\t\t\t\t\t\tif (Array.isArray(lightSource)) lightDir.fromArray(lightSource).normalize();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlightDir.copy(\n\t\t\t\t\t\t\t\tcaustics.worldToLocal(lightSource.nativeElement.getWorldPosition(v)).normalize(),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlightDirInv.copy(lightDir).multiplyScalar(-1);\n\n\t\t\t\t\t\tlet boundsVertices: THREE.Vector3[] = [];\n\t\t\t\t\t\tscene.parent?.matrixWorld.identity();\n\t\t\t\t\t\tbounds.setFromObject(scene, true);\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.min.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.min.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.max.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.min.x, bounds.max.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.min.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.min.y, bounds.max.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.max.y, bounds.min.z));\n\t\t\t\t\t\tboundsVertices.push(new THREE.Vector3(bounds.max.x, bounds.max.y, bounds.max.z));\n\n\t\t\t\t\t\tconst worldVerts = boundsVertices.map((v) => v.clone());\n\n\t\t\t\t\t\tbounds.getCenter(focusPos);\n\t\t\t\t\t\tboundsVertices = boundsVertices.map((v) => v.clone().sub(focusPos));\n\t\t\t\t\t\tconst lightPlane = lpP.set(lightDirInv, 0);\n\t\t\t\t\t\tconst projectedVerts = boundsVertices.map((v) =>\n\t\t\t\t\t\t\tlightPlane.projectPoint(v, new THREE.Vector3()),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst centralVert = projectedVerts\n\t\t\t\t\t\t\t.reduce((a, b) => a.add(b), v.set(0, 0, 0))\n\t\t\t\t\t\t\t.divideScalar(projectedVerts.length);\n\t\t\t\t\t\tconst radius = projectedVerts\n\t\t\t\t\t\t\t.map((v) => v.distanceTo(centralVert))\n\t\t\t\t\t\t\t.reduce((a, b) => Math.max(a, b));\n\t\t\t\t\t\tconst dirLength = boundsVertices.map((x) => x.dot(lightDir)).reduce((a, b) => Math.max(a, b));\n\n\t\t\t\t\t\t// Shadows\n\t\t\t\t\t\tcamera.position.copy(lightDir.clone().multiplyScalar(dirLength).add(focusPos));\n\t\t\t\t\t\tcamera.lookAt(scene.localToWorld(focusPos.clone()));\n\t\t\t\t\t\tconst dirMatrix = lpM.lookAt(camera.position, focusPos, v.set(0, 1, 0));\n\t\t\t\t\t\tcamera.left = -radius;\n\t\t\t\t\t\tcamera.right = radius;\n\t\t\t\t\t\tcamera.top = radius;\n\t\t\t\t\t\tcamera.bottom = -radius;\n\t\t\t\t\t\tconst yOffset = v.set(0, radius, 0).applyMatrix4(dirMatrix);\n\t\t\t\t\t\tconst yTime = (camera.position.y + yOffset.y) / lightDir.y;\n\t\t\t\t\t\tcamera.near = 0.1;\n\t\t\t\t\t\tcamera.far = yTime;\n\t\t\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\t\t\tcamera.updateMatrixWorld();\n\n\t\t\t\t\t\t// Now find size of ground plane\n\t\t\t\t\t\tconst groundProjectedCoords = worldVerts.map((v) =>\n\t\t\t\t\t\t\tv.add(lightDir.clone().multiplyScalar(-v.y / lightDir.y)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst centerPos = groundProjectedCoords\n\t\t\t\t\t\t\t.reduce((a, b) => a.add(b), v.set(0, 0, 0))\n\t\t\t\t\t\t\t.divideScalar(groundProjectedCoords.length);\n\t\t\t\t\t\tconst maxSize =\n\t\t\t\t\t\t\t2 *\n\t\t\t\t\t\t\tgroundProjectedCoords\n\t\t\t\t\t\t\t\t.map((v) => Math.hypot(v.x - centerPos.x, v.z - centerPos.z))\n\t\t\t\t\t\t\t\t.reduce((a, b) => Math.max(a, b));\n\t\t\t\t\t\tplane.scale.setScalar(maxSize);\n\t\t\t\t\t\tplane.position.copy(centerPos);\n\n\t\t\t\t\t\t// if (debug) helper.current?.update();\n\n\t\t\t\t\t\t// Inject uniforms\n\t\t\t\t\t\tnormalMaterialB.viewMatrix.value = normalMaterial.viewMatrix.value = camera.matrixWorldInverse;\n\n\t\t\t\t\t\tconst dirLightNearPlane = lpF.setFromProjectionMatrix(\n\t\t\t\t\t\t\tlpM.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse),\n\t\t\t\t\t\t).planes[4];\n\n\t\t\t\t\t\tcausticsMaterial.cameraMatrixWorld = camera.matrixWorld;\n\t\t\t\t\t\tcausticsMaterial.cameraProjectionMatrixInv = camera.projectionMatrixInverse;\n\t\t\t\t\t\tcausticsMaterial.lightDir = lightDirInv;\n\n\t\t\t\t\t\tcausticsMaterial.lightPlaneNormal = dirLightNearPlane.normal;\n\t\t\t\t\t\tcausticsMaterial.lightPlaneConstant = dirLightNearPlane.constant;\n\n\t\t\t\t\t\tcausticsMaterial.near = camera.near;\n\t\t\t\t\t\tcausticsMaterial.far = camera.far;\n\t\t\t\t\t\tcausticsMaterial.resolution = resolution;\n\t\t\t\t\t\tcausticsMaterial.size = radius;\n\t\t\t\t\t\tcausticsMaterial.intensity = intensity;\n\t\t\t\t\t\tcausticsMaterial.worldRadius = worldRadius;\n\n\t\t\t\t\t\t// Switch the scene on\n\t\t\t\t\t\tscene.visible = true;\n\n\t\t\t\t\t\t// Render front face normals\n\t\t\t\t\t\tgl.setRenderTarget(normalTarget);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tscene.overrideMaterial = normalMaterial;\n\t\t\t\t\t\tgl.render(scene, camera);\n\n\t\t\t\t\t\t// Render back face normals, if enabled\n\t\t\t\t\t\tgl.setRenderTarget(normalTargetB);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tif (backside) {\n\t\t\t\t\t\t\tscene.overrideMaterial = normalMaterialB;\n\t\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Remove the override material\n\t\t\t\t\t\tscene.overrideMaterial = null;\n\n\t\t\t\t\t\t// Render front face caustics\n\t\t\t\t\t\tcausticsMaterial.ior = ior;\n\t\t\t\t\t\t(plane.material as CausticsProjectionMaterialType).lightProjMatrix = camera.projectionMatrix;\n\t\t\t\t\t\t(plane.material as CausticsProjectionMaterialType).lightViewMatrix = camera.matrixWorldInverse;\n\t\t\t\t\t\tcausticsMaterial.normalTexture = normalTarget?.texture;\n\t\t\t\t\t\tcausticsMaterial.depthTexture = normalTarget?.depthTexture;\n\t\t\t\t\t\tgl.setRenderTarget(causticsTarget);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tcausticsQuad.render(gl);\n\n\t\t\t\t\t\t// Render back face caustics, if enabled\n\t\t\t\t\t\tcausticsMaterial.ior = backsideIOR;\n\t\t\t\t\t\tcausticsMaterial.normalTexture = normalTargetB?.texture;\n\t\t\t\t\t\tcausticsMaterial.depthTexture = normalTargetB?.depthTexture;\n\t\t\t\t\t\tgl.setRenderTarget(causticsTargetB);\n\t\t\t\t\t\tgl.clear();\n\t\t\t\t\t\tif (backside) causticsQuad.render(gl);\n\n\t\t\t\t\t\t// Reset render target\n\t\t\t\t\t\tgl.setRenderTarget(null);\n\n\t\t\t\t\t\t// Switch the scene off if caustics is all that's wanted\n\t\t\t\t\t\tif (causticsOnly) scene.visible = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tonCleanup(() => sub());\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NgIf } from '@angular/common';\nimport { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, Input } from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tinjectNgtRef,\n\tis,\n\tsignalStore,\n\ttype NgtEuler,\n\ttype NgtMesh,\n\ttype NgtRef,\n\ttype NgtVector3,\n} from 'angular-three';\nimport * as THREE from 'three';\nimport { AxesHelper, BoxGeometry, Mesh, MeshNormalMaterial } from 'three';\nimport { DecalGeometry } from 'three-stdlib';\n\nextend({ Mesh, BoxGeometry, MeshNormalMaterial, AxesHelper });\n\nexport type NgtsDecalState = {\n\tdebug: boolean;\n\tmesh?: NgtRef<THREE.Mesh>;\n\tposition: NgtVector3;\n\trotation: NgtEuler | number;\n\tscale: NgtVector3;\n\tmap?: THREE.Texture;\n\tpolygonOffsetFactor: number;\n\tdepthTest: boolean;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-mesh\n\t\t */\n\t\t'ngts-decal': NgtsDecalState & NgtMesh;\n\t}\n}\n\nfunction vecToArray(vec: number[] | NgtVector3 | NgtEuler | number = [0, 0, 0]) {\n\tif (Array.isArray(vec)) {\n\t\treturn vec;\n\t}\n\n\tif (vec instanceof THREE.Vector3 || vec instanceof THREE.Euler) {\n\t\treturn [vec.x, vec.y, vec.z];\n\t}\n\n\treturn [vec, vec, vec];\n}\n\n@Component({\n\tselector: 'ngts-decal',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-mesh [ref]=\"decalRef\" ngtCompound>\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.transparent\" />\n\t\t\t<ngt-value [rawValue]=\"true\" attach=\"material.polygonOffset\" />\n\t\t\t<ngt-value [rawValue]=\"polygonOffsetFactor()\" attach=\"material.polygonOffsetFactor\" />\n\t\t\t<ngt-value [rawValue]=\"depthTest()\" attach=\"material.depthTest\" />\n\t\t\t<ngt-value [rawValue]=\"map()\" attach=\"material.map\" />\n\t\t\t<ng-content />\n\n\t\t\t<ngt-mesh *ngIf=\"debug()\" [ref]=\"helperRef\">\n\t\t\t\t<ngt-box-geometry />\n\t\t\t\t<ngt-mesh-normal-material [wireframe]=\"true\" />\n\t\t\t\t<ngt-axes-helper />\n\t\t\t</ngt-mesh>\n\t\t</ngt-mesh>\n\t`,\n\timports: [NgIf],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsDecal {\n\tprivate inputs = signalStore<NgtsDecalState>({\n\t\tdebug: false,\n\t\tdepthTest: false,\n\t\tpolygonOffsetFactor: -10,\n\t\tposition: [0, 0, 0],\n\t\trotation: [0, 0, 0],\n\t\tscale: 1,\n\t});\n\n\t@Input() decalRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\n\t@Input({ alias: 'mesh' }) set _mesh(mesh: NgtRef<THREE.Mesh>) {\n\t\tthis.inputs.set({ mesh });\n\t}\n\n\t@Input({ alias: 'position' }) set _position(position: NgtVector3) {\n\t\tthis.inputs.set({ position });\n\t}\n\n\t@Input({ alias: 'rotation' }) set _rotation(rotation: NgtEuler | number) {\n\t\tthis.inputs.set({ rotation });\n\t}\n\n\t@Input({ alias: 'scale' }) set _scale(scale: NgtVector3) {\n\t\tthis.inputs.set({ scale });\n\t}\n\n\t@Input({ alias: 'map' }) set _map(map: THREE.Texture) {\n\t\tthis.inputs.set({ map });\n\t}\n\n\t@Input({ alias: 'polygonOffsetFactor' }) set _polygonOffsetFactor(polygonOffsetFactor: number) {\n\t\tthis.inputs.set({ polygonOffsetFactor });\n\t}\n\n\t@Input({ alias: 'depthTest' }) set _depthTest(depthTest: boolean) {\n\t\tthis.inputs.set({ depthTest });\n\t}\n\n\tprivate mesh = this.inputs.select('mesh');\n\tprivate __position = this.inputs.select('position');\n\tprivate __rotation = this.inputs.select('rotation');\n\tprivate __scale = this.inputs.select('scale');\n\tprivate position = computed(() => vecToArray(this.__position()));\n\tprivate rotation = computed(() => vecToArray(this.__rotation()));\n\tprivate scale = computed(() => vecToArray(this.__scale()));\n\n\thelperRef = injectNgtRef<Mesh>();\n\n\tdebug = this.inputs.select('debug');\n\tdepthTest = this.inputs.select('depthTest');\n\tpolygonOffsetFactor = this.inputs.select('polygonOffsetFactor');\n\tmap = this.inputs.select('map');\n\n\tconstructor() {\n\t\tthis.processDecal();\n\t}\n\n\tprivate processDecal() {\n\t\teffect((onCleanup) => {\n\t\t\tconst decal = this.decalRef.nativeElement;\n\t\t\tif (!decal) return;\n\n\t\t\tconst [mesh, position, rotation, scale, helper] = [\n\t\t\t\tthis.mesh(),\n\t\t\t\tthis.position(),\n\t\t\t\tthis.rotation(),\n\t\t\t\tthis.scale(),\n\t\t\t\tthis.helperRef.nativeElement,\n\t\t\t];\n\n\t\t\tconst parent = mesh ? (is.ref(mesh) ? mesh.nativeElement : mesh) : decal.parent;\n\t\t\tif (!(parent instanceof Mesh)) {\n\t\t\t\tthrow new Error('[NGT] ngts-decal must have a ngt-mesh as parent or specify its \"mesh\" input');\n\t\t\t}\n\n\t\t\tconst state = {\n\t\t\t\tposition: new THREE.Vector3(),\n\t\t\t\trotation: new THREE.Euler(),\n\t\t\t\tscale: new THREE.Vector3(1, 1, 1),\n\t\t\t};\n\n\t\t\tif (parent) {\n\t\t\t\tapplyProps(state, { position, scale });\n\n\t\t\t\t// Zero out the parents matrix world for this operation\n\t\t\t\tconst matrixWorld = parent.matrixWorld.clone();\n\t\t\t\tparent.matrixWorld.identity();\n\n\t\t\t\tif (!rotation || typeof rotation === 'number') {\n\t\t\t\t\tconst o = new THREE.Object3D();\n\n\t\t\t\t\to.position.copy(state.position);\n\t\t\t\t\to.lookAt(parent.position);\n\t\t\t\t\tif (typeof rotation === 'number') o.rotateZ(rotation);\n\t\t\t\t\tapplyProps(state, { rotation: o.rotation });\n\t\t\t\t} else {\n\t\t\t\t\tapplyProps(state, { rotation });\n\t\t\t\t}\n\n\t\t\t\tdecal.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale);\n\t\t\t\tif (helper) {\n\t\t\t\t\tapplyProps(helper, state);\n\t\t\t\t\t// Prevent the helpers from blocking rays\n\t\t\t\t\thelper.traverse((child) => (child.raycast = () => null));\n\t\t\t\t}\n\t\t\t\t// Reset parents matix-world\n\t\t\t\tparent.matrixWorld = matrixWorld;\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tdecal.geometry.dispose();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\teffect,\n\tinject,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport { injectBeforeRender, injectNgtStore, safeDetectChanges } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n\tsize: number;\n\tframes: number;\n}\n\nexport function injectNgtsDepthBuffer(\n\tparamsFactory: () => Partial<NgtsDepthBufferParams> = () => ({}),\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsDepthBuffer, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst depthBufferSignal = signal<THREE.DepthTexture | null>(null);\n\t\tconst store = injectNgtStore();\n\t\tconst cdr = inject(ChangeDetectorRef);\n\n\t\tconst [defaultWidth, defaultHeight, dpr] = [\n\t\t\tstore.select('size', 'width'),\n\t\t\tstore.select('size', 'height'),\n\t\t\tstore.select('viewport', 'dpr'),\n\t\t];\n\n\t\tconst fboParams = computed(() => {\n\t\t\tconst params = { size: 256, frames: Infinity, ...paramsFactory() };\n\t\t\tconst width = params.size || defaultWidth() * dpr();\n\t\t\tconst height = params.size || defaultHeight() * dpr();\n\t\t\tconst depthTexture = new THREE.DepthTexture(width, height);\n\t\t\tdepthTexture.format = THREE.DepthFormat;\n\t\t\tdepthTexture.type = THREE.UnsignedShortType;\n\t\t\treturn { width, height, settings: { depthTexture } };\n\t\t});\n\n\t\tconst _fbo = injectNgtsFBO(fboParams, { injector });\n\n\t\teffect(() => {\n\t\t\tconst fbo = _fbo();\n\t\t\tif (fbo) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tdepthBufferSignal.set(fbo.depthTexture);\n\t\t\t\t});\n\t\t\t\tsafeDetectChanges(cdr);\n\t\t\t}\n\t\t});\n\n\t\tlet count = 0;\n\t\tinjectBeforeRender(\n\t\t\t({ gl, scene, camera }) => {\n\t\t\t\tconst params = { size: 256, frames: Infinity, ...paramsFactory() };\n\t\t\t\tconst fbo = _fbo();\n\t\t\t\tif ((params.frames === Infinity || count < params.frames) && fbo) {\n\t\t\t\t\tgl.setRenderTarget(fbo);\n\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector },\n\t\t);\n\n\t\treturn depthBufferSignal.asReadonly();\n\t});\n}\n","import { NgIf } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, forwardRef, signal } from '@angular/core';\nimport { extend, injectNgtRef, signalStore } from 'angular-three';\nimport { NgtsText3D } from 'angular-three-soba/abstractions';\nimport { NgtsCenter } from 'angular-three-soba/staging';\nimport { createInjectionToken } from 'ngxtension/create-injection-token';\nimport { Group, MeshNormalMaterial, MeshStandardMaterial } from 'three';\n\n/**\n * define states of a component. usually acts for inputs signalStore\n */\nexport type NgtsExampleState = {\n\tfont: string;\n\tcolor: THREE.ColorRepresentation;\n\tdebug: boolean;\n\tbevelSize: number;\n};\n\n/**\n * augment HTMLElementTagNameMap with the selector of the component.\n * the type is usually the Inputs' state and the root THREE element\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t\\/**\n\t\t * @extends ngt-group\n\t\t *\\/\n\t\t'ngts-example': NgtsExampleState & NgtGroup;\n\t}\n}\n\n*/\n\n/**\n * make sure soba's component extends all regular THREE entities that it needs\n */\nextend({ Group, MeshNormalMaterial, MeshStandardMaterial });\n\n/**\n * We can setup public API for this soba component with createInjectionToken + forwardRef\n * the `example.api` is **usually** a computed property in the component class\n *\n * @see Bounds for example\n */\nexport const [injectNgtsExampleApi, provideNgtsExampleApi] = createInjectionToken(\n\t(example: NgtsExample) => example.api,\n\t{ isRoot: false, deps: [forwardRef(() => NgtsExample)] },\n);\n\n@Component({\n\tselector: 'ngts-example',\n\tstandalone: true,\n\ttemplate: `\n\t\t<!-- ngtCompound is used by the Renderer to spread props from ngts-example down to ngt-group -->\n\t\t<!-- i.e: <ngts-example [position]=\"[1, 1, 1]\" />, [1, 1, 1] will be passed down to ngt-group -->\n\t\t<!-- [ref] is used with the Input so that the consumer can pass an external ref and control this internal ngt-group -->\n\t\t<ngt-group ngtCompound [ref]=\"exampleRef\">\n\t\t\t<ngts-center [top]=\"true\">\n\t\t\t\t<ngts-text-3d\n\t\t\t\t\t[bevelEnabled]=\"true\"\n\t\t\t\t\t[bevelSize]=\"bevelSize()\"\n\t\t\t\t\t[font]=\"font()\"\n\t\t\t\t\t[text]=\"count().toString()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-mesh-standard-material *ngIf=\"!debug(); else withDebug\" [color]=\"color()\" />\n\t\t\t\t\t<ng-template #withDebug>\n\t\t\t\t\t\t<ngt-mesh-normal-material [wireframe]=\"true\" />\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ngts-text-3d>\n\t\t\t</ngts-center>\n\t\t\t<!-- use Content Projection here so consumers can pass in children for ngt-group -->\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\t/**\n\t * can definitely use other Soba components\n\t */\n\timports: [NgtsCenter, NgtsText3D, NgIf],\n\t/**\n\t * call the API provider here to actually provide the API for the component's children\n\t */\n\tproviders: [provideNgtsExampleApi()],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\n/**\n * @description this component is only for documentation purposes.\n */\nexport class NgtsExample {\n\t/**\n\t * use signalStore to store inputs with default inputs\n\t */\n\tprivate inputs = signalStore<NgtsExampleState>({ color: '#cbcbcb', bevelSize: 0.04, debug: false });\n\n\t/**\n\t * a soba component usually has a Input for the component ref and this Input always has a default value with injectNgtRef\n\t */\n\t@Input() exampleRef = injectNgtRef<Group>();\n\n\t/**\n\t * setup Input for the Inputs state. Use alias to have an easier time to setup computed\n\t *\n\t * @example: this way \"private font\" and \"set _font\" won't conflict\n\t * private font = this.inputs.select('font');\n\t */\n\t@Input({ alias: 'font', required: true }) set _font(font: string) {\n\t\tthis.inputs.set({ font });\n\t}\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'debug' }) set _debug(debug: boolean) {\n\t\tthis.inputs.set({ debug });\n\t}\n\n\t@Input({ alias: 'bevelSize' }) set _bevelSize(bevelSize: number) {\n\t\tthis.inputs.set({ bevelSize });\n\t}\n\n\t/**\n\t * exposes signals from inputs\n\t */\n\tbevelSize = this.inputs.select('bevelSize');\n\tfont = this.inputs.select('font');\n\tdebug = this.inputs.select('debug');\n\tcolor = this.inputs.select('color');\n\n\t/**\n\t * can have internal state\n\t */\n\tcount = signal(0);\n\n\t/**\n\t * Expose the public API for this soba component\n\t */\n\tapi = computed(() => ({\n\t\tbevelSize: this.bevelSize(),\n\t\tincrement: () => this.count.update((v) => v + 1),\n\t\tdecrement: () => this.count.update((v) => v - 1),\n\t}));\n}\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tElementRef,\n\tEmbeddedViewRef,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tuntracked,\n} from '@angular/core';\nimport { HTML, injectBeforeRender, injectNgtStore, is, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\nimport { injectNgtsHtmlInputs } from './html';\n\nconst v1 = new THREE.Vector3();\nconst v2 = new THREE.Vector3();\nconst v3 = new THREE.Vector3();\n\nexport function defaultCalculatePosition(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\tsize: { width: number; height: number },\n) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tobjectPos.project(camera);\n\tconst widthHalf = size.width / 2;\n\tconst heightHalf = size.height / 2;\n\treturn [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\n\nfunction isObjectBehindCamera(el: THREE.Object3D, camera: THREE.Camera) {\n\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\tconst deltaCamObj = objectPos.sub(cameraPos);\n\tconst camDir = camera.getWorldDirection(v3);\n\treturn deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\n\nfunction isObjectVisible(\n\tel: THREE.Object3D,\n\tcamera: THREE.Camera,\n\traycaster: THREE.Raycaster,\n\tocclude: THREE.Object3D[],\n) {\n\tconst elPos = v1.setFromMatrixPosition(el.matrixWorld);\n\tconst screenPos = elPos.clone();\n\tscreenPos.project(camera);\n\traycaster.setFromCamera(screenPos as any, camera);\n\tconst intersects = raycaster.intersectObjects(occlude, true);\n\tif (intersects.length) {\n\t\tconst intersectionDistance = intersects[0].distance;\n\t\tconst pointDistance = elPos.distanceTo(raycaster.ray.origin);\n\t\treturn pointDistance < intersectionDistance;\n\t}\n\treturn true;\n}\n\nfunction objectScale(el: THREE.Object3D, camera: THREE.Camera) {\n\tif (camera instanceof THREE.OrthographicCamera) {\n\t\treturn camera.zoom;\n\t} else if (camera instanceof THREE.PerspectiveCamera) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst vFOV = (camera.fov * Math.PI) / 180;\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n\t\treturn 1 / scaleFOV;\n\t} else {\n\t\treturn 1;\n\t}\n}\n\nfunction objectZIndex(el: THREE.Object3D, camera: THREE.Camera, zIndexRange: Array<number>) {\n\tif (camera instanceof THREE.PerspectiveCamera || camera instanceof THREE.OrthographicCamera) {\n\t\tconst objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n\t\tconst cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n\t\tconst dist = objectPos.distanceTo(cameraPos);\n\t\tconst A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n\t\tconst B = zIndexRange[1] - A * camera.far;\n\t\treturn Math.round(A * dist + B);\n\t}\n\treturn undefined;\n}\n\nconst epsilon = (value: number) => (Math.abs(value) < 1e-10 ? 0 : value);\n\nfunction getCSSMatrix(matrix: THREE.Matrix4, multipliers: number[], prepend = '') {\n\tlet matrix3d = 'matrix3d(';\n\tfor (let i = 0; i !== 16; i++) {\n\t\tmatrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n\t}\n\treturn prepend + matrix3d;\n}\n\nconst getCameraCSSMatrix = ((multipliers: number[]) => {\n\treturn (matrix: THREE.Matrix4) => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\n\nconst getObjectCSSMatrix = ((scaleMultipliers: (n: number) => number[]) => {\n\treturn (matrix: THREE.Matrix4, factor: number) =>\n\t\tgetCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');\n})((f: number) => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);\n\n@Component({\n\tselector: 'ngts-html-wrapper',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-template #transformTemplate>\n\t\t\t<div #transformedOuterDiv [style]=\"styles()\">\n\t\t\t\t<div #transformedInnerDiv [style]=\"transformInnerStyles()\">\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"renderTemplate; context: { styles: htmlInputs.style }\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ng-template>\n\n\t\t<ng-template #renderTemplate let-renderedStyles=\"styles\">\n\t\t\t<div #renderedDiv [class]=\"htmlInputs.renderedDivClass()\" [style]=\"renderedStyles()\">\n\t\t\t\t<ng-container #renderAnchor />\n\t\t\t</div>\n\t\t</ng-template>\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgtsHtmlWrapper {\n\tstatic [HTML] = true;\n\n\thtmlInputs = injectNgtsHtmlInputs();\n\n\t@ViewChild('transformTemplate', { static: true }) transformTemplate!: TemplateRef<unknown>;\n\t@ViewChild('renderTemplate', { static: true }) renderTemplate!: TemplateRef<unknown>;\n\n\t@ViewChild('transformedOuterDiv') outerDiv?: ElementRef<HTMLElement>;\n\t@ViewChild('transformedInnerDiv') innerDiv?: ElementRef<HTMLElement>;\n\t@ViewChild('renderAnchor', { read: ViewContainerRef }) renderAnchor?: ViewContainerRef;\n\n\tprivate store = injectNgtStore();\n\tprivate gl = this.store.select('gl');\n\tprivate connected = this.store.select('events', 'connected');\n\tprivate viewport = this.store.select('viewport');\n\tprivate scene = this.store.select('scene');\n\tprivate camera = this.store.select('camera');\n\tprivate size = this.store.select('size');\n\tprivate raycaster = this.store.select('raycaster');\n\n\tprivate isMeshSizeSet = false;\n\n\tprivate document = inject(DOCUMENT);\n\tprivate vcr = inject(ViewContainerRef);\n\n\tprivate portalElement = computed(() => {\n\t\tconst portal = this.htmlInputs.portal();\n\t\tif (!portal) return null;\n\t\treturn is.ref(portal) ? portal.nativeElement : portal;\n\t});\n\n\tprivate element = computed(() => this.document.createElement(this.htmlInputs.as()) as HTMLElement);\n\tprivate target = computed(() => {\n\t\tconst portalElement = this.portalElement();\n\t\tif (portalElement) return portalElement;\n\t\tconst connected = this.connected();\n\t\tif (connected) return connected as HTMLElement;\n\t\treturn this.gl().domElement.parentElement!;\n\t});\n\n\tstyles = computed(() => {\n\t\tconst [style, center, transform, size, fullscreen] = [\n\t\t\tthis.htmlInputs.style(),\n\t\t\tthis.htmlInputs.center(),\n\t\t\tthis.htmlInputs.transform(),\n\t\t\tthis.size(),\n\t\t\tthis.htmlInputs.fullscreen(),\n\t\t];\n\n\t\tif (transform) {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: size.width,\n\t\t\t\theight: size.height,\n\t\t\t\ttransformStyle: 'preserve-3d',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tposition: 'absolute',\n\t\t\ttransform: center ? 'translate3d(-50%,-50%,0)' : 'none',\n\t\t\t...(fullscreen && {\n\t\t\t\ttop: -size.height / 2,\n\t\t\t\tleft: -size.width / 2,\n\t\t\t\twidth: size.width,\n\t\t\t\theight: size.height,\n\t\t\t}),\n\t\t\t...(style || {}),\n\t\t};\n\t});\n\ttransformInnerStyles = computed(() => ({ position: 'absolute', pointerEvents: this.htmlInputs.pointerEvents() }));\n\n\tconstructor() {\n\t\tthis.setCanvasElementStyle();\n\t\tthis.appendElement();\n\t\tthis.setWrapperClass();\n\t\tthis.render();\n\t\tthis.beforeRender();\n\t}\n\n\tprivate setCanvasElementStyle() {\n\t\teffect(() => {\n\t\t\tconst el = untracked(this.gl).domElement!;\n\t\t\tconst occlude = this.htmlInputs.occlude();\n\t\t\tif (occlude && occlude === 'blending') {\n\t\t\t\tel.style.zIndex = `${Math.floor(untracked(this.htmlInputs.zIndexRange)[0] / 2)}`;\n\t\t\t\tel.style.position = 'absolute';\n\t\t\t\tel.style.pointerEvents = 'none';\n\t\t\t} else {\n\t\t\t\tel.style.zIndex = null!;\n\t\t\t\tel.style.position = null!;\n\t\t\t\tel.style.pointerEvents = null!;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate appendElement() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [group, element] = [this.htmlInputs.groupRef.nativeElement, this.element()];\n\t\t\tif (group && element) {\n\t\t\t\tconst [target, transform, scene, camera, size, calculatePosition, prepend] = [\n\t\t\t\t\tthis.target(),\n\t\t\t\t\tthis.htmlInputs.transform(),\n\t\t\t\t\tuntracked(this.scene),\n\t\t\t\t\tuntracked(this.camera),\n\t\t\t\t\tuntracked(this.size),\n\t\t\t\t\tuntracked(this.htmlInputs.calculatePosition),\n\t\t\t\t\tuntracked(this.htmlInputs.prepend),\n\t\t\t\t];\n\t\t\t\tscene.updateMatrixWorld();\n\t\t\t\tif (transform) {\n\t\t\t\t\telement.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;\n\t\t\t\t} else {\n\t\t\t\t\tconst vec = calculatePosition(group, camera, size);\n\t\t\t\t\telement.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;\n\t\t\t\t}\n\n\t\t\t\tif (target) {\n\t\t\t\t\tif (prepend) target.prepend(element);\n\t\t\t\t\telse target.appendChild(element);\n\t\t\t\t}\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tif (target) target.removeChild(element);\n\t\t\t\t\tthis.vcr.clear();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setWrapperClass() {\n\t\teffect(() => {\n\t\t\tconst [element, wrapperClass] = [this.element(), this.htmlInputs.wrapperClass()];\n\t\t\tif (element && wrapperClass) {\n\t\t\t\telement.className = wrapperClass;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate render() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [{ transform }, element, content] = [\n\t\t\t\tthis.htmlInputs.state(),\n\t\t\t\tthis.element(),\n\t\t\t\tthis.htmlInputs.content(),\n\t\t\t];\n\n\t\t\tif (element) {\n\t\t\t\tthis.isMeshSizeSet = false;\n\t\t\t\tconst params: Parameters<ViewContainerRef['createEmbeddedView']> = transform\n\t\t\t\t\t? [this.transformTemplate, {}]\n\t\t\t\t\t: [this.renderTemplate, { styles: this.styles }];\n\n\t\t\t\tconst ref = this.vcr.createEmbeddedView(...params);\n\t\t\t\tif (ref.rootNodes?.[0]) {\n\t\t\t\t\tif (element.hasChildNodes()) {\n\t\t\t\t\t\telement.replaceChildren(...ref.rootNodes);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.append(...ref.rootNodes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsafeDetectChanges(ref);\n\n\t\t\t\tlet contentRef: EmbeddedViewRef<unknown>;\n\t\t\t\tlet contentParent: HTMLElement;\n\t\t\t\t/**\n\t\t\t\t * NOTE: utilizing rAF here so that renderAnchor (ViewContainerRef) has a chance to be resolved\n\t\t\t\t * TODO: Another approach is to call render() in ngOnInit and pass in an injector to the effect\n\t\t\t\t */\n\t\t\t\tconst rAF = requestAnimationFrame(() => {\n\t\t\t\t\tif (content && this.renderAnchor) {\n\t\t\t\t\t\tcontentRef = this.renderAnchor.createEmbeddedView(content);\n\t\t\t\t\t\tcontentParent = ref.rootNodes[0].lastElementChild || ref.rootNodes[0];\n\t\t\t\t\t\twhile (contentParent && contentParent.lastElementChild) {\n\t\t\t\t\t\t\tcontentParent = contentParent.lastElementChild as HTMLElement;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (contentRef.rootNodes?.[0]) {\n\t\t\t\t\t\t\tif (contentParent.hasChildNodes()) {\n\t\t\t\t\t\t\t\tcontentParent.replaceChildren(...contentRef.rootNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcontentParent.append(...contentRef.rootNodes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafeDetectChanges(contentRef);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tcancelAnimationFrame(rAF);\n\n\t\t\t\t\tif (contentRef && contentParent) {\n\t\t\t\t\t\tcontentRef.rootNodes.forEach((node) => {\n\t\t\t\t\t\t\tif (contentParent.hasChildNodes()) {\n\t\t\t\t\t\t\t\tcontentParent.removeChild(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode.remove();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tcontentRef.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tref.rootNodes.forEach((node) => {\n\t\t\t\t\t\tif (element.hasChildNodes()) {\n\t\t\t\t\t\t\telement.removeChild(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.remove();\n\t\t\t\t\t});\n\t\t\t\t\tref.destroy();\n\t\t\t\t\tthis.renderAnchor?.clear();\n\t\t\t\t\tthis.vcr.clear();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tlet oldPosition = [0, 0];\n\t\tlet oldZoom = 0;\n\t\tlet visible = true;\n\t\tinjectBeforeRender((gl) => {\n\t\t\tconst [\n\t\t\t\tgroup,\n\t\t\t\tcamera,\n\t\t\t\ttransform,\n\t\t\t\tcalculatePosition,\n\t\t\t\tsize,\n\t\t\t\teps,\n\t\t\t\tisRayCastOcclusion,\n\t\t\t\tocclude,\n\t\t\t\tscene,\n\t\t\t\traycaster,\n\t\t\t\telement,\n\t\t\t\tzIndexRange,\n\t\t\t\tsprite,\n\t\t\t\tdistanceFactor,\n\t\t\t\tocclusionMeshRef,\n\t\t\t\tgeometry,\n\t\t\t\tviewport,\n\t\t\t\tscale,\n\t\t\t] = [\n\t\t\t\tthis.htmlInputs.groupRef.nativeElement,\n\t\t\t\tthis.camera(),\n\t\t\t\tthis.htmlInputs.transform(),\n\t\t\t\tthis.htmlInputs.calculatePosition(),\n\t\t\t\tthis.size(),\n\t\t\t\tthis.htmlInputs.eps(),\n\t\t\t\tthis.htmlInputs.isRayCastOcclusion(),\n\t\t\t\tthis.htmlInputs.occlude(),\n\t\t\t\tthis.scene(),\n\t\t\t\tthis.raycaster(),\n\t\t\t\tthis.element(),\n\t\t\t\tthis.htmlInputs.zIndexRange(),\n\t\t\t\tthis.htmlInputs.sprite(),\n\t\t\t\tthis.htmlInputs.distanceFactor(),\n\t\t\t\tthis.htmlInputs.occlusionMeshRef.nativeElement,\n\t\t\t\tthis.htmlInputs.geometry(),\n\t\t\t\tthis.viewport(),\n\t\t\t\tthis.htmlInputs.scale(),\n\t\t\t];\n\t\t\tif (group && element) {\n\t\t\t\tcamera.updateMatrixWorld();\n\t\t\t\tgroup.updateWorldMatrix(true, false);\n\t\t\t\tconst vec = transform ? oldPosition : calculatePosition(group, camera, size);\n\n\t\t\t\tif (\n\t\t\t\t\ttransform ||\n\t\t\t\t\tMath.abs(oldZoom - camera.zoom) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[0] - vec[0]) > eps ||\n\t\t\t\t\tMath.abs(oldPosition[1] - vec[1]) > eps\n\t\t\t\t) {\n\t\t\t\t\tconst isBehindCamera = isObjectBehindCamera(group, camera);\n\t\t\t\t\tlet raytraceTarget: null | undefined | boolean | THREE.Object3D[] = false;\n\n\t\t\t\t\tif (isRayCastOcclusion) {\n\t\t\t\t\t\tif (Array.isArray(occlude)) {\n\t\t\t\t\t\t\traytraceTarget = occlude.map((item) => (is.ref(item) ? item.nativeElement : item));\n\t\t\t\t\t\t} else if (occlude !== 'blending') {\n\t\t\t\t\t\t\traytraceTarget = [scene];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst previouslyVisible = visible;\n\t\t\t\t\tif (raytraceTarget) {\n\t\t\t\t\t\tconst isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);\n\t\t\t\t\t\tvisible = isVisible && !isBehindCamera;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisible = !isBehindCamera;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (previouslyVisible !== visible) {\n\t\t\t\t\t\tif (this.htmlInputs.occluded.observed) {\n\t\t\t\t\t\t\tthis.htmlInputs.occluded.emit(!visible);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.display = visible ? 'block' : 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst halfRange = Math.floor(zIndexRange[0] / 2);\n\t\t\t\t\tconst zRange = occlude\n\t\t\t\t\t\t? isRayCastOcclusion //\n\t\t\t\t\t\t\t? [zIndexRange[0], halfRange]\n\t\t\t\t\t\t\t: [halfRange - 1, 0]\n\t\t\t\t\t\t: zIndexRange;\n\n\t\t\t\t\telement.style.zIndex = `${objectZIndex(group, camera, zRange)}`;\n\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tconst [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n\t\t\t\t\t\tconst fov = camera.projectionMatrix.elements[5] * heightHalf;\n\t\t\t\t\t\tconst { isOrthographicCamera, top, left, bottom, right } = camera as THREE.OrthographicCamera;\n\t\t\t\t\t\tconst cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n\t\t\t\t\t\tconst cameraTransform = isOrthographicCamera\n\t\t\t\t\t\t\t? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon(\n\t\t\t\t\t\t\t\t\t(top + bottom) / 2,\n\t\t\t\t\t\t\t )}px)`\n\t\t\t\t\t\t\t: `translateZ(${fov}px)`;\n\t\t\t\t\t\tlet matrix = group.matrixWorld;\n\t\t\t\t\t\tif (sprite) {\n\t\t\t\t\t\t\tmatrix = camera.matrixWorldInverse\n\t\t\t\t\t\t\t\t.clone()\n\t\t\t\t\t\t\t\t.transpose()\n\t\t\t\t\t\t\t\t.copyPosition(matrix)\n\t\t\t\t\t\t\t\t.scale(group.scale);\n\t\t\t\t\t\t\tmatrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n\t\t\t\t\t\t\tmatrix.elements[15] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.style.width = size.width + 'px';\n\t\t\t\t\t\telement.style.height = size.height + 'px';\n\t\t\t\t\t\telement.style.perspective = isOrthographicCamera ? '' : `${fov}px`;\n\t\t\t\t\t\tif (this.outerDiv?.nativeElement && this.innerDiv?.nativeElement) {\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.width = size.width + 'px';\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.height = size.height + 'px';\n\t\t\t\t\t\t\tthis.outerDiv.nativeElement.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;\n\t\t\t\t\t\t\tthis.innerDiv.nativeElement.style.transform = getObjectCSSMatrix(\n\t\t\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\t\t\t1 / ((distanceFactor || 10) / 400),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;\n\t\t\t\t\t\telement.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;\n\t\t\t\t\t}\n\t\t\t\t\toldPosition = vec;\n\t\t\t\t\toldZoom = camera.zoom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isRayCastOcclusion && occlusionMeshRef && !this.isMeshSizeSet) {\n\t\t\t\tif (transform) {\n\t\t\t\t\tif (this.outerDiv?.nativeElement) {\n\t\t\t\t\t\tconst el = this.outerDiv.nativeElement.children[0];\n\n\t\t\t\t\t\tif (el?.clientWidth && el?.clientHeight) {\n\t\t\t\t\t\t\tconst { isOrthographicCamera } = camera as THREE.OrthographicCamera;\n\n\t\t\t\t\t\t\tif (isOrthographicCamera || geometry) {\n\t\t\t\t\t\t\t\tif (scale !== 1) {\n\t\t\t\t\t\t\t\t\tif (!Array.isArray(scale)) {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.setScalar(1 / (scale as number));\n\t\t\t\t\t\t\t\t\t} else if (scale instanceof THREE.Vector3) {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.copy(scale.clone().divideScalar(1));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tocclusionMeshRef.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst ratio = (distanceFactor || 10) / 400;\n\t\t\t\t\t\t\t\tconst w = el.clientWidth * ratio;\n\t\t\t\t\t\t\t\tconst h = el.clientHeight * ratio;\n\n\t\t\t\t\t\t\t\tocclusionMeshRef.scale.set(w, h, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.isMeshSizeSet = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst ele = element.children[0];\n\n\t\t\t\t\tif (ele?.clientWidth && ele?.clientHeight) {\n\t\t\t\t\t\tconst ratio = 1 / viewport.factor;\n\t\t\t\t\t\tconst w = ele.clientWidth * ratio;\n\t\t\t\t\t\tconst h = ele.clientHeight * ratio;\n\n\t\t\t\t\t\tocclusionMeshRef.scale.set(w, h, 1);\n\n\t\t\t\t\t\tthis.isMeshSizeSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tocclusionMeshRef.lookAt(gl.camera.position);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NgIf } from '@angular/common';\nimport {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tContentChild,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tTemplateRef,\n\tcomputed,\n\tforwardRef,\n} from '@angular/core';\nimport { extend, injectNgtRef, is, signalStore, type NgtGroup, type NgtRef, type NgtVector3 } from 'angular-three';\nimport { NgtsSobaContent } from 'angular-three-soba/utils';\nimport { createInjectionToken } from 'ngxtension/create-injection-token';\nimport * as THREE from 'three';\nimport { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';\nimport { NgtsHtmlWrapper, defaultCalculatePosition } from './html-wrapper';\n\nextend({ Group, PlaneGeometry, Mesh, ShaderMaterial });\n\ntype PointerEventsProperties =\n\t| 'auto'\n\t| 'none'\n\t| 'visiblePainted'\n\t| 'visibleFill'\n\t| 'visibleStroke'\n\t| 'visible'\n\t| 'painted'\n\t| 'fill'\n\t| 'stroke'\n\t| 'all'\n\t| 'inherit';\n\nexport type NgtsHtmlState = {\n\tas: keyof HTMLElementTagNameMap;\n\tprepend: boolean;\n\ttransform: boolean;\n\tzIndexRange: Array<number>;\n\tcalculatePosition: typeof defaultCalculatePosition;\n\tfullscreen: boolean;\n\tcenter: boolean;\n\tsprite: boolean;\n\tpointerEvents: PointerEventsProperties;\n\teps: number;\n\tscale: NgtVector3;\n\tcontent?: TemplateRef<unknown>;\n\tdistanceFactor?: number;\n\tstyle?: CSSStyleDeclaration;\n\trenderedDivClass?: string;\n\twrapperClass?: string;\n\tportal?: NgtRef<HTMLElement>;\n\tocclude: NgtRef<THREE.Object3D>[] | boolean | 'raycast' | 'blending';\n\tmaterial?: NgtRef<THREE.Material>;\n\tgeometry?: NgtRef<THREE.BufferGeometry>;\n\tcastShadow: boolean; // Cast shadow for occlusion plane\n\treceiveShadow: boolean; // Receive shadow for occlusion plane\n};\n\nexport const [injectNgtsHtmlInputs, provideNgtsHtmlInputs] = createInjectionToken(\n\t(html: NgtsHtml) => ({ state: html.inputs.state, ...html.state }),\n\t{ isRoot: false, deps: [forwardRef(() => NgtsHtml)] },\n);\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-html': NgtsHtmlState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-html',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group ngtCompound [ref]=\"groupRef\" [scale]=\"scale()\">\n\t\t\t<ngt-mesh\n\t\t\t\t*ngIf=\"occlude() && !isRayCastOcclusion()\"\n\t\t\t\t[castShadow]=\"castShadow()\"\n\t\t\t\t[receiveShadow]=\"receiveShadow()\"\n\t\t\t\t[ref]=\"occlusionMeshRef\"\n\t\t\t>\n\t\t\t\t<ngt-plane-geometry *ngIf=\"geometry()\" />\n\t\t\t\t<ngt-shader-material\n\t\t\t\t\t*ngIf=\"material()\"\n\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t[vertexShader]=\"shaders().vertexShader\"\n\t\t\t\t\t[fragmentShader]=\"shaders().fragmentShader\"\n\t\t\t\t/>\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\n\t\t<ngts-html-wrapper />\n\t`,\n\timports: [NgIf, NgtsHtmlWrapper],\n\tproviders: [provideNgtsHtmlInputs()],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsHtml {\n\tDoubleSide = THREE.DoubleSide;\n\n\tinputs = signalStore<NgtsHtmlState>({\n\t\tas: 'div',\n\t\tprepend: false,\n\t\ttransform: false,\n\t\tfullscreen: false,\n\t\tcenter: false,\n\t\tsprite: false,\n\t\tzIndexRange: [16777271, 0],\n\t\teps: 0.001,\n\t\tscale: 1,\n\t\tcalculatePosition: defaultCalculatePosition,\n\t\tpointerEvents: 'auto',\n\t\tocclude: false,\n\t\tcastShadow: false,\n\t\treceiveShadow: false,\n\t});\n\n\t@ContentChild(NgtsSobaContent, { read: TemplateRef }) set content(content: TemplateRef<unknown>) {\n\t\tthis.inputs.set({ content });\n\t}\n\n\t@Input() groupRef = injectNgtRef<Group>();\n\n\t@Input({ alias: 'as' }) set _as(as: keyof HTMLElementTagNameMap) {\n\t\tthis.inputs.set({ as });\n\t}\n\n\t@Input({ alias: 'zIndexRange' }) set _zIndexRange(zIndexRange: Array<number>) {\n\t\tthis.inputs.set({ zIndexRange });\n\t}\n\n\t@Input({ alias: 'portal' }) set _portal(portal: NgtRef<HTMLElement>) {\n\t\tthis.inputs.set({ portal });\n\t}\n\n\t@Input({ alias: 'occlude' }) set _occlude(occlude: NgtsHtmlState['occlude']) {\n\t\tthis.inputs.set({ occlude });\n\t}\n\n\t@Input({ alias: 'castShadow' }) set _castShadow(castShadow: NgtsHtmlState['castShadow']) {\n\t\tthis.inputs.set({ castShadow });\n\t}\n\n\t@Input({ alias: 'receiveShadow' }) set _receiveShadow(receiveShadow: NgtsHtmlState['receiveShadow']) {\n\t\tthis.inputs.set({ receiveShadow });\n\t}\n\n\t@Input({ alias: 'material' }) set _material(material: NgtsHtmlState['material']) {\n\t\tthis.inputs.set({ material });\n\t}\n\n\t@Input({ alias: 'geometry' }) set _geometry(geometry: NgtsHtmlState['geometry']) {\n\t\tthis.inputs.set({ geometry });\n\t}\n\n\t@Input({ alias: 'scale' }) set _scale(scale: NgtsHtmlState['scale']) {\n\t\tthis.inputs.set({ scale });\n\t}\n\n\t@Input({ alias: 'prepend' }) set _prepend(prepend: boolean) {\n\t\tthis.inputs.set({ prepend });\n\t}\n\n\t@Input({ alias: 'transform' }) set _transform(transform: boolean) {\n\t\tthis.inputs.set({ transform });\n\t}\n\n\t@Input({ alias: 'center' }) set _center(center: boolean) {\n\t\tthis.inputs.set({ center });\n\t}\n\n\t@Input({ alias: 'sprite' }) set _sprite(sprite: boolean) {\n\t\tthis.inputs.set({ sprite });\n\t}\n\n\t@Input({ alias: 'fullscreen' }) set _fullscreen(fullscreen: boolean) {\n\t\tthis.inputs.set({ fullscreen });\n\t}\n\n\t@Input({ alias: 'eps' }) set _eps(eps: number) {\n\t\tthis.inputs.set({ eps });\n\t}\n\n\t@Input({ alias: 'distanceFactor' }) set _distanceFactor(distanceFactor: number) {\n\t\tthis.inputs.set({ distanceFactor });\n\t}\n\n\t@Input({ alias: 'wrapperClass' }) set _wrapperClass(wrapperClass: string) {\n\t\tthis.inputs.set({ wrapperClass });\n\t}\n\n\t@Input({ alias: 'renderedDivClass' }) set _renderedDivClass(renderedDivClass: string) {\n\t\tthis.inputs.set({ renderedDivClass });\n\t}\n\n\t@Input({ alias: 'style' }) set _style(style: CSSStyleDeclaration) {\n\t\tthis.inputs.set({ style });\n\t}\n\n\t@Input({ alias: 'pointerEvents' }) set _pointerEvents(pointerEvents: PointerEventsProperties) {\n\t\tthis.inputs.set({ pointerEvents });\n\t}\n\n\t@Input({ alias: 'calculatePosition' }) set _calculatePosition(\n\t\tcalculatePosition: NgtsHtmlState['calculatePosition'],\n\t) {\n\t\tthis.inputs.set({ calculatePosition });\n\t}\n\n\t@Output() occluded = new EventEmitter<boolean>();\n\n\tocclusionMeshRef = injectNgtRef<Mesh>();\n\n\tprivate transform = this.inputs.select('transform');\n\n\tisRayCastOcclusion = computed(() => {\n\t\tconst occlude = this.occlude();\n\t\treturn (\n\t\t\t(occlude && occlude !== 'blending') || (Array.isArray(occlude) && !!occlude.length && is.ref(occlude[0]))\n\t\t);\n\t});\n\n\tocclude = this.inputs.select('occlude');\n\tcastShadow = this.inputs.select('castShadow');\n\treceiveShadow = this.inputs.select('receiveShadow');\n\tgeometry = this.inputs.select('geometry');\n\tmaterial = this.inputs.select('material');\n\tscale = this.inputs.select('scale');\n\n\tshaders = computed(() => {\n\t\tconst transform = this.transform();\n\t\treturn {\n\t\t\tvertexShader: !transform\n\t\t\t\t? /* glsl */ `\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include <common>\n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n `\n\t\t\t\t: undefined,\n\t\t\tfragmentShader: /* glsl */ `\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `,\n\t\t};\n\t});\n\n\tstate = {\n\t\tzIndexRange: this.inputs.select('zIndexRange'),\n\t\tprepend: this.inputs.select('prepend'),\n\t\ttransform: this.transform,\n\t\tcenter: this.inputs.select('center'),\n\t\tfullscreen: this.inputs.select('fullscreen'),\n\t\tcalculatePosition: this.inputs.select('calculatePosition'),\n\t\twrapperClass: this.inputs.select('wrapperClass'),\n\t\trenderedDivClass: this.inputs.select('renderedDivClass'),\n\t\tstyle: this.inputs.select('style'),\n\t\tpointerEvents: this.inputs.select('pointerEvents'),\n\t\teps: this.inputs.select('eps'),\n\t\tdistanceFactor: this.inputs.select('distanceFactor'),\n\t\tsprite: this.inputs.select('sprite'),\n\t\tas: this.inputs.select('as'),\n\t\tportal: this.inputs.select('portal'),\n\t\tcontent: this.inputs.select('content'),\n\t\tocclude: this.occlude,\n\t\tisRayCastOcclusion: this.isRayCastOcclusion,\n\t\tocclusionMeshRef: this.occlusionMeshRef,\n\t\toccluded: this.occluded,\n\t\tgeometry: this.geometry,\n\t\tscale: this.scale,\n\t\tgroupRef: this.groupRef,\n\t};\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tInjector,\n\tInput,\n\tcomputed,\n\teffect,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { checkUpdate, extend, injectNgtRef, is, signalStore, type NgtGroup, type NgtRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { MeshSurfaceSampler } from 'three-stdlib';\n\ntype SamplePayload = {\n\t/**\n\t * The position of the sample.\n\t */\n\tposition: THREE.Vector3;\n\t/**\n\t * The normal of the mesh at the sampled position.\n\t */\n\tnormal: THREE.Vector3;\n\t/**\n\t * The vertex color of the mesh at the sampled position.\n\t */\n\tcolor: THREE.Color;\n};\n\ntype TransformPayload = SamplePayload & {\n\t/**\n\t * The dummy object used to transform each instance.\n\t * This object's matrix will be updated after transforming & it will be used\n\t * to set the instance's matrix.\n\t */\n\tdummy: THREE.Object3D;\n\t/**\n\t * The mesh that's initially passed to the sampler.\n\t * Use this if you need to apply transforms from your mesh to your instances\n\t * or if you need to grab attributes from the geometry.\n\t */\n\tsampledMesh: THREE.Mesh;\n};\n\nexport type NgtsSurfaceSamplerTransformFn = (payload: TransformPayload, i: number) => void;\n\nexport type NgtsSurfaceSamplerState = {\n\tcount: number;\n\tmesh: NgtRef<THREE.Mesh>;\n\ttransform?: NgtsSurfaceSamplerTransformFn;\n\tweight?: string;\n\tinstancedMesh?: NgtRef<THREE.InstancedMesh>;\n};\n\nconst defaultState: Omit<NgtsSurfaceSamplerState, 'mesh'> = {\n\tcount: 16,\n};\n\nexport function injectNgtsSurfaceSampler(\n\tsurfaceSamplerState: () => (Partial<Omit<NgtsSurfaceSamplerState, 'mesh'>> & { mesh: NgtRef<THREE.Mesh> }) | null,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsSurfaceSampler, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst state = computed(() => ({ ...defaultState, ...(surfaceSamplerState() || {}) }));\n\t\tconst _buffer = signal(\n\t\t\t(() => {\n\t\t\t\tconst arr = Array.from({ length: state().count }, () => [\n\t\t\t\t\t1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,\n\t\t\t\t]).flat();\n\t\t\t\treturn new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);\n\t\t\t})(),\n\t\t);\n\n\t\teffect(() => {\n\t\t\tconst { mesh, count, transform, instancedMesh, weight } = state();\n\t\t\tconst meshObj = is.ref(mesh) ? mesh.nativeElement : mesh;\n\t\t\tif (!meshObj) return;\n\t\t\tconst instancedMeshObj = is.ref(instancedMesh) ? instancedMesh.nativeElement : instancedMesh;\n\t\t\tconst buffer = untracked(_buffer);\n\n\t\t\tconst sampler = new MeshSurfaceSampler(meshObj);\n\n\t\t\tif (weight) {\n\t\t\t\tsampler.setWeightAttribute(weight);\n\t\t\t}\n\n\t\t\tsampler.build();\n\n\t\t\tconst position = new THREE.Vector3();\n\t\t\tconst normal = new THREE.Vector3();\n\t\t\tconst color = new THREE.Color();\n\t\t\tconst dummy = new THREE.Object3D();\n\n\t\t\tmeshObj.updateMatrixWorld(true);\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tsampler.sample(position, normal, color);\n\n\t\t\t\tif (typeof transform === 'function') {\n\t\t\t\t\ttransform({ dummy, sampledMesh: meshObj, position, normal, color }, i);\n\t\t\t\t} else {\n\t\t\t\t\tdummy.position.copy(position);\n\t\t\t\t}\n\n\t\t\t\tdummy.updateMatrix();\n\n\t\t\t\tif (instancedMeshObj) {\n\t\t\t\t\tinstancedMeshObj.setMatrixAt(i, dummy.matrix);\n\t\t\t\t}\n\n\t\t\t\tdummy.matrix.toArray(buffer.array, i * 16);\n\t\t\t}\n\n\t\t\tif (instancedMeshObj) {\n\t\t\t\tcheckUpdate(instancedMeshObj.instanceMatrix);\n\t\t\t}\n\n\t\t\tcheckUpdate(buffer);\n\n\t\t\tuntracked(() => {\n\t\t\t\t_buffer.set(buffer.clone() as THREE.InstancedBufferAttribute);\n\t\t\t});\n\t\t});\n\n\t\treturn _buffer.asReadonly();\n\t});\n}\n\nextend({ Group });\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-group\n\t\t */\n\t\t'ngts-sampler': NgtsSurfaceSamplerState & NgtGroup;\n\t}\n}\n\n@Component({\n\tselector: 'ngts-sampler',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group ngtCompound [ref]=\"samplerRef\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsSampler {\n\tprivate inputs = signalStore<NgtsSurfaceSamplerState>({ count: 16 });\n\n\t@Input() samplerRef = injectNgtRef<Group>();\n\n\t@Input({ alias: 'count' }) set _count(count: number) {\n\t\tthis.inputs.set({ count });\n\t}\n\n\t@Input({ alias: 'mesh' }) set _mesh(mesh: NgtRef<THREE.Mesh>) {\n\t\tthis.inputs.set({ mesh });\n\t}\n\n\t@Input({ alias: 'transform' }) set _transform(transform: NgtsSurfaceSamplerTransformFn) {\n\t\tthis.inputs.set({ transform });\n\t}\n\n\t@Input({ alias: 'weight' }) set _weight(weight: string) {\n\t\tthis.inputs.set({ weight });\n\t}\n\n\t@Input({ alias: 'instancedMesh' }) set _instancedMesh(instancedMesh: NgtRef<THREE.InstancedMesh>) {\n\t\tthis.inputs.set({ instancedMesh });\n\t}\n\n\tprivate surfaceSamplerState = computed(() => {\n\t\tconst sampler = this.samplerRef.nativeElement;\n\t\tif (!sampler) return null;\n\t\tconst { count, weight, transform, mesh, instancedMesh } = this.inputs.state();\n\n\t\tconst instancedMeshRef =\n\t\t\tinstancedMesh ??\n\t\t\t(sampler.children.find((child) => child.hasOwnProperty('instanceMatrix')) as THREE.InstancedMesh);\n\n\t\tconst meshRef = mesh ?? (sampler.children.find((child) => child.type === 'Mesh') as THREE.Mesh);\n\n\t\treturn { count, weight, transform, mesh: meshRef, instancedMesh: instancedMeshRef };\n\t});\n\n\tconstructor() {\n\t\tinjectNgtsSurfaceSampler(this.surfaceSamplerState);\n\t}\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed } from '@angular/core';\nimport { NgtArgs, extend, injectNgtRef, signalStore, type NgtMesh } from 'angular-three';\nimport * as THREE from 'three';\nimport { CanvasTexture, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\n\nexport type NgtsShadowState = {\n\tcolorStop: number;\n\tfog: boolean;\n\tcolor: THREE.ColorRepresentation;\n\topacity: number;\n\tdepthWrite: boolean;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t/**\n\t\t * @extends ngt-mesh\n\t\t */\n\t\t'ngts-shadow': NgtsShadowState & NgtMesh;\n\t}\n}\n\nextend({ Mesh, CanvasTexture, PlaneGeometry, MeshBasicMaterial });\n\n@Component({\n\tselector: 'ngts-shadow',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-mesh ngtCompound [ref]=\"shadowRef\" [rotation]=\"[-Math.PI / 2, 0, 0]\">\n\t\t\t<ngt-plane-geometry />\n\t\t\t<ngt-mesh-basic-material\n\t\t\t\t[transparent]=\"true\"\n\t\t\t\t[opacity]=\"opacity()\"\n\t\t\t\t[fog]=\"fog()\"\n\t\t\t\t[depthWrite]=\"depthWrite()\"\n\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t>\n\t\t\t\t<ngt-canvas-texture *args=\"[canvas()]\" attach=\"map\" />\n\t\t\t</ngt-mesh-basic-material>\n\t\t\t<ng-content />\n\t\t</ngt-mesh>\n\t`,\n\timports: [NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsShadow {\n\tMath = Math;\n\tDoubleSide = THREE.DoubleSide;\n\n\tprivate inputs = signalStore<NgtsShadowState>({\n\t\tfog: false,\n\t\tdepthWrite: false,\n\t\tcolorStop: 0.0,\n\t\tcolor: 'black',\n\t\topacity: 0.5,\n\t});\n\n\t@Input() shadowRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'colorStop' }) set _colorStop(colorStop: number) {\n\t\tthis.inputs.set({ colorStop });\n\t}\n\n\t@Input({ alias: 'fog' }) set _fog(fog: boolean) {\n\t\tthis.inputs.set({ fog });\n\t}\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'opacity' }) set _opacity(opacity: number) {\n\t\tthis.inputs.set({ opacity });\n\t}\n\n\t@Input({ alias: 'depthWrite' }) set _depthWrite(depthWrite: boolean) {\n\t\tthis.inputs.set({ depthWrite });\n\t}\n\n\tprivate colorStop = this.inputs.select('colorStop');\n\tprivate color = this.inputs.select('color');\n\n\topacity = this.inputs.select('opacity');\n\tfog = this.inputs.select('fog');\n\tdepthWrite = this.inputs.select('depthWrite');\n\n\tcanvas = computed(() => {\n\t\tconst [colorStop, color] = [this.colorStop(), this.color()];\n\t\tconst canvas = document.createElement('canvas');\n\t\tcanvas.width = 128;\n\t\tcanvas.height = 128;\n\t\tconst context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tconst gradient = context.createRadialGradient(\n\t\t\tcanvas.width / 2,\n\t\t\tcanvas.height / 2,\n\t\t\t0,\n\t\t\tcanvas.width / 2,\n\t\t\tcanvas.height / 2,\n\t\t\tcanvas.width / 2,\n\t\t);\n\t\tgradient.addColorStop(colorStop, new THREE.Color(color).getStyle());\n\t\tgradient.addColorStop(1, 'rgba(0,0,0,0)');\n\t\tcontext.fillStyle = gradient;\n\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\t\treturn canvas;\n\t});\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, Input, computed, effect, inject } from '@angular/core';\nimport { addAfterEffect, addEffect, injectNgtStore, is, signalStore, type NgtRef } from 'angular-three';\nimport Stats from 'stats-gl';\n\nexport type NgtsStatsGLState = {\n\tparent?: NgtRef<HTMLElement>;\n\tcontainerClass?: string;\n\tconfig?: ConstructorParameters<typeof Stats>[0];\n};\n\n@Directive({ selector: 'ngts-stats-gl', standalone: true })\nexport class NgtsStatsGL {\n\tprivate inputs = signalStore<NgtsStatsGLState>();\n\n\t@Input({ alias: 'parent' }) set _parent(parent: NgtRef<HTMLElement>) {\n\t\tthis.inputs.set({ parent });\n\t}\n\n\t@Input({ alias: 'containerClass' }) set _containerClass(containerClass: string) {\n\t\tthis.inputs.set({ containerClass });\n\t}\n\n\t@Input({ alias: 'config' }) set _config(config: NgtsStatsGLState['config']) {\n\t\tthis.inputs.set({ config });\n\t}\n\n\tprivate document = inject(DOCUMENT);\n\tprivate store = injectNgtStore();\n\tprivate gl = this.store.select('gl');\n\n\tprivate config = this.inputs.select('config');\n\tprivate parent = this.inputs.select('parent');\n\tprivate containerClass = this.inputs.select('containerClass');\n\n\tprivate stats = computed(() => {\n\t\tconst [config, gl] = [this.config() || {}, this.gl()];\n\t\tconst stats = new Stats(config);\n\t\tstats.init(gl.domElement);\n\t\treturn stats;\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [parent, stats, containerClass] = [this.parent(), this.stats(), this.containerClass()];\n\t\t\tconst node = parent ? (is.ref(parent) ? parent.nativeElement : parent) : this.document.body;\n\t\t\tnode.appendChild(stats.container);\n\t\t\tif (containerClass) stats.container.classList.add(...containerClass.split(' ').filter(Boolean));\n\n\t\t\tconst begin = addEffect(() => stats.begin());\n\t\t\tconst end = addAfterEffect(() => stats.end());\n\t\t\tonCleanup(() => {\n\t\t\t\tnode.removeChild(stats.container);\n\t\t\t\tbegin();\n\t\t\t\tend();\n\t\t\t});\n\t\t});\n\t}\n}\n","import { Texture } from 'three';\n\nexport type Point = {\n\tx: number;\n\ty: number;\n\tage: number;\n\tforce: number;\n};\n\nexport type TrailConfig = {\n\t/** texture size (default: 256x256) */\n\tsize?: number;\n\t/** Max age (ms) of trail points (default: 750) */\n\tmaxAge?: number;\n\t/** Trail radius (default: 0.3) */\n\tradius?: number;\n\t/** Canvas trail opacity (default: 0.2) */\n\tintensity?: number;\n\t/** Add points in between slow pointer events (default: 0) */\n\tinterpolate?: number;\n\t/** Moving average of pointer force (default: 0) */\n\tsmoothing?: number;\n\t/** Minimum pointer force (default: 0.3) */\n\tminForce?: number;\n\t/** Blend mode (default: 'screen') */\n\tblend?: CanvasRenderingContext2D['globalCompositeOperation'];\n\t/** Easing (default: easeCircOut) */\n\tease?: (t: number) => number;\n};\n\n// default ease\nconst easeCircleOut = (x: number) => Math.sqrt(1 - Math.pow(x - 1, 2));\n\n// smooth new sample (measurement) based on previous sample (current)\nfunction smoothAverage(current: number, measurement: number, smoothing = 0.9) {\n\treturn measurement * smoothing + current * (1.0 - smoothing);\n}\n\nexport class TrailTexture {\n\ttrail: Point[];\n\tcanvas!: HTMLCanvasElement;\n\tctx!: CanvasRenderingContext2D;\n\ttexture!: Texture;\n\tforce: number;\n\tsize: number;\n\tmaxAge: number;\n\tradius: number;\n\tintensity: number;\n\tease: (t: number) => number;\n\tminForce: number;\n\tinterpolate: number;\n\tsmoothing: number;\n\tblend: CanvasRenderingContext2D['globalCompositeOperation'];\n\n\tconstructor({\n\t\tsize = 256,\n\t\tmaxAge = 750,\n\t\tradius = 0.3,\n\t\tintensity = 0.2,\n\t\tinterpolate = 0,\n\t\tsmoothing = 0,\n\t\tminForce = 0.3,\n\t\tblend = 'screen', // source-over is canvas default. Others are slower\n\t\tease = easeCircleOut,\n\t}: TrailConfig = {}) {\n\t\tthis.size = size;\n\t\tthis.maxAge = maxAge;\n\t\tthis.radius = radius;\n\t\tthis.intensity = intensity;\n\t\tthis.ease = ease;\n\t\tthis.interpolate = interpolate;\n\t\tthis.smoothing = smoothing;\n\t\tthis.minForce = minForce;\n\t\tthis.blend = blend as GlobalCompositeOperation;\n\n\t\tthis.trail = [];\n\t\tthis.force = 0;\n\t\tthis.initTexture();\n\t}\n\n\tinitTexture() {\n\t\tthis.canvas = document.createElement('canvas');\n\t\tthis.canvas.width = this.canvas.height = this.size;\n\t\tthis.ctx = this.canvas.getContext('2d')!;\n\t\tthis.ctx.fillStyle = 'black';\n\t\tthis.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n\t\tthis.texture = new Texture(this.canvas);\n\n\t\tthis.canvas.id = 'touchTexture';\n\t\tthis.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;\n\t}\n\n\tupdate(delta: number) {\n\t\tthis.clear();\n\n\t\t// age points\n\t\tthis.trail.forEach((point, i) => {\n\t\t\tpoint.age += delta * 1000;\n\t\t\t// remove old\n\t\t\tif (point.age > this.maxAge) {\n\t\t\t\tthis.trail.splice(i, 1);\n\t\t\t}\n\t\t});\n\n\t\t// reset force when empty (when smoothing)\n\t\tif (!this.trail.length) this.force = 0;\n\n\t\tthis.trail.forEach((point) => {\n\t\t\tthis.drawTouch(point);\n\t\t});\n\n\t\tthis.texture.needsUpdate = true;\n\t}\n\n\tclear() {\n\t\tthis.ctx.globalCompositeOperation = 'source-over';\n\t\tthis.ctx.fillStyle = 'black';\n\t\tthis.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\t}\n\n\taddTouch(point: Pick<Point, 'x' | 'y'>) {\n\t\tconst last = this.trail[this.trail.length - 1];\n\n\t\tif (last) {\n\t\t\tconst dx = last.x - point.x;\n\t\t\tconst dy = last.y - point.y;\n\t\t\tconst dd = dx * dx + dy * dy;\n\n\t\t\tconst force = Math.max(this.minForce, Math.min(dd * 10000, 1));\n\n\t\t\tthis.force = smoothAverage(force, this.force, this.smoothing);\n\n\t\t\tif (!!this.interpolate) {\n\t\t\t\tconst lines = Math.ceil(dd / Math.pow((this.radius * 0.5) / this.interpolate, 2));\n\n\t\t\t\tif (lines > 1) {\n\t\t\t\t\tfor (let i = 1; i < lines; i++) {\n\t\t\t\t\t\tthis.trail.push({\n\t\t\t\t\t\t\tx: last.x - (dx / lines) * i,\n\t\t\t\t\t\t\ty: last.y - (dy / lines) * i,\n\t\t\t\t\t\t\tage: 0,\n\t\t\t\t\t\t\tforce,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.trail.push({ x: point.x, y: point.y, age: 0, force: this.force });\n\t}\n\n\tdrawTouch(point: Point) {\n\t\tconst pos = {\n\t\t\tx: point.x * this.size,\n\t\t\ty: (1 - point.y) * this.size,\n\t\t};\n\n\t\tlet intensity = 1;\n\t\tif (point.age < this.maxAge * 0.3) {\n\t\t\tintensity = this.ease(point.age / (this.maxAge * 0.3));\n\t\t} else {\n\t\t\tintensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));\n\t\t}\n\n\t\tintensity *= point.force;\n\n\t\t// apply blending\n\t\tthis.ctx.globalCompositeOperation = this.blend;\n\n\t\tconst radius = this.size * this.radius * intensity;\n\t\tconst grd = this.ctx.createRadialGradient(\n\t\t\tpos.x,\n\t\t\tpos.y,\n\t\t\tMath.max(0, radius * 0.25),\n\t\t\tpos.x,\n\t\t\tpos.y,\n\t\t\tMath.max(0, radius),\n\t\t);\n\t\tgrd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);\n\t\tgrd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);\n\n\t\tthis.ctx.beginPath();\n\t\tthis.ctx.fillStyle = grd;\n\t\tthis.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);\n\t\tthis.ctx.fill();\n\t}\n}\n","import { Injector, computed, runInInjectionContext } from '@angular/core';\nimport { injectBeforeRender, type NgtThreeEvent } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { TrailTexture, type TrailConfig } from './trail-texture';\n\nexport function injectNgtsTrailTexture(\n\ttrailConfigFn: () => Partial<TrailConfig>,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsTrailTexture, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst trail = computed(() => new TrailTexture(trailConfigFn() || {}));\n\t\tconst texture = computed(() => trail().texture);\n\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\ttrail().update(delta);\n\t\t});\n\n\t\tconst onMove = (ev: NgtThreeEvent<PointerEvent>) => trail().addTouch(ev.uv!);\n\n\t\treturn { texture, onMove };\n\t});\n}\n","import {\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tComponent,\n\tInput,\n\tcomputed,\n\teffect,\n\trunInInjectionContext,\n\tsignal,\n\tuntracked,\n\ttype Injector,\n} from '@angular/core';\nimport {\n\tNgtPortal,\n\tNgtPortalContent,\n\textend,\n\tinjectBeforeRender,\n\tinjectNgtRef,\n\tinjectNgtStore,\n\tis,\n\tsignalStore,\n\ttype NgtRef,\n} from 'angular-three';\nimport { MeshLineGeometry, MeshLineMaterial } from 'meshline';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { Group, Mesh } from 'three';\n\nconst shiftLeft = (collection: Float32Array, steps = 1): Float32Array => {\n\tcollection.set(collection.subarray(steps));\n\tcollection.fill(-Infinity, -steps);\n\treturn collection;\n};\n\nexport type NgtsTrailSettings = {\n\twidth: number;\n\tlength: number;\n\tdecay: number;\n\t/**\n\t * Wether to use the target's world or local positions\n\t */\n\tlocal: boolean;\n\t// Min distance between previous and current points\n\tstride: number;\n\t// Number of frames to wait before next calculation\n\tinterval: number;\n};\n\nconst defaultSettings: NgtsTrailSettings = {\n\twidth: 0.2,\n\tlength: 1,\n\tdecay: 1,\n\tlocal: false,\n\tstride: 0,\n\tinterval: 1,\n};\n\nexport function injectNgtsTrail(\n\ttargetFactory: () => NgtRef<THREE.Object3D> | null,\n\tsettingsFactory: () => Partial<NgtsTrailSettings>,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\tinjector = assertInjector(injectNgtsTrail, injector);\n\treturn runInInjectionContext(injector, () => {\n\t\tconst _points = signal<Float32Array>(new Float32Array());\n\t\tlet frameCount = 0;\n\n\t\tconst prevPosition = new THREE.Vector3();\n\t\tconst worldPosition = new THREE.Vector3();\n\n\t\tconst _target = computed(() => {\n\t\t\tconst _target = targetFactory();\n\t\t\tif (is.ref(_target)) return _target.nativeElement;\n\t\t\treturn _target;\n\t\t});\n\n\t\tconst _settings = computed(() => ({ ...defaultSettings, ...settingsFactory() }));\n\t\tconst _length = computed(() => _settings().length);\n\n\t\teffect(() => {\n\t\t\tconst [target, length] = [_target(), _length()];\n\t\t\tif (target) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\t_points.set(\n\t\t\t\t\t\tFloat32Array.from({ length: length * 10 * 3 }, (_, i) => target.position.getComponent(i % 3)),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [target, points, { local, decay, stride, interval }] = [_target(), _points(), _settings()];\n\t\t\tif (!target || !points) return;\n\n\t\t\tif (frameCount === 0) {\n\t\t\t\tlet newPosition: THREE.Vector3;\n\t\t\t\tif (local) {\n\t\t\t\t\tnewPosition = target.position;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.getWorldPosition(worldPosition);\n\t\t\t\t\tnewPosition = worldPosition;\n\t\t\t\t}\n\n\t\t\t\tconst steps = 1 * decay;\n\t\t\t\tfor (let i = 0; i < steps; i++) {\n\t\t\t\t\tif (newPosition.distanceTo(prevPosition) < stride) continue;\n\n\t\t\t\t\tshiftLeft(points, 3);\n\t\t\t\t\tpoints.set(newPosition.toArray(), points.length - 3);\n\t\t\t\t}\n\t\t\t\tprevPosition.copy(newPosition);\n\t\t\t}\n\n\t\t\tframeCount++;\n\t\t\tframeCount = frameCount % interval;\n\t\t});\n\n\t\treturn _points.asReadonly();\n\t});\n}\n\nexport type NgtsTrailState = {\n\tcolor: THREE.ColorRepresentation;\n\tattenuation: (width: number) => number;\n\tsettings: NgtsTrailSettings;\n\ttarget?: NgtRef<THREE.Object3D>;\n};\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'ngts-trail': NgtsTrailState;\n\t}\n}\n\nextend({ Group, Mesh });\n\n@Component({\n\tselector: 'ngts-trail',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-portal [container]=\"scene()\" [autoRender]=\"false\">\n\t\t\t\t<ng-template ngtPortalContent>\n\t\t\t\t\t<ngt-mesh [ref]=\"trailRef\" [geometry]=\"geometry\" [material]=\"material()\" />\n\t\t\t\t</ng-template>\n\t\t\t</ngt-portal>\n\t\t\t<ngt-group [ref]=\"groupRef\">\n\t\t\t\t<ng-content />\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\timports: [NgtPortal, NgtPortalContent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtsTrail {\n\tprivate inputs = signalStore<NgtsTrailState>({ settings: defaultSettings, color: 'hotpink' });\n\n\t@Input() trailRef = injectNgtRef<Mesh>();\n\n\t@Input({ alias: 'color' }) set _color(color: THREE.ColorRepresentation) {\n\t\tthis.inputs.set({ color });\n\t}\n\n\t@Input({ alias: 'attenuation' }) set _attenuation(attenuation: (width: number) => number) {\n\t\tthis.inputs.set({ attenuation });\n\t}\n\n\t@Input({ alias: 'target' }) set _target(target: NgtRef<THREE.Object3D>) {\n\t\tthis.inputs.set({ target });\n\t}\n\n\t@Input({ alias: 'settings' }) set _settings(settings: Partial<NgtsTrailSettings>) {\n\t\tthis.inputs.set({ settings: { ...defaultSettings, ...settings } });\n\t}\n\n\tgroupRef = injectNgtRef<Group>();\n\n\tprivate children = this.groupRef.children('both');\n\n\tprivate store = injectNgtStore();\n\tprivate size = this.store.select('size');\n\n\tprivate target = this.inputs.select('target');\n\tprivate settings = this.inputs.select('settings');\n\tprivate width = computed(() => this.settings().width);\n\tprivate color = this.inputs.select('color');\n\tprivate attenuation = this.inputs.select('attenuation');\n\n\tprivate anchor = computed(() => {\n\t\tconst target = this.target();\n\t\tif (target) return target;\n\t\tconst group = this.groupRef.nativeElement;\n\t\tif (group) {\n\t\t\treturn group.children.find((child) => child instanceof THREE.Object3D) || null;\n\t\t}\n\t\treturn null;\n\t});\n\n\tprivate points = injectNgtsTrail(this.anchor, this.settings);\n\n\tscene = this.store.select('scene');\n\tgeometry = new MeshLineGeometry();\n\tmaterial = computed(() => {\n\t\tconst [width, color, size] = [this.width(), this.color(), this.size()];\n\n\t\tconst m = new MeshLineMaterial({\n\t\t\tlineWidth: 0.1 * width,\n\t\t\tcolor,\n\t\t\tsizeAttenuation: 1,\n\t\t\tresolution: new THREE.Vector2(size.width, size.height),\n\t\t});\n\n\t\t// TODO: understand this first\n\t\t// Get and apply first <meshLineMaterial /> from children\n\t\t// let matOverride: React.ReactElement | undefined;\n\t\t// if (children) {\n\t\t// \tif (Array.isArray(children)) {\n\t\t// \t\tmatOverride = children.find((child: React.ReactNode) => {\n\t\t// \t\t\tconst c = child as React.ReactElement;\n\t\t// \t\t\treturn typeof c.type === 'string' && c.type === 'meshLineMaterial';\n\t\t// \t\t}) as React.ReactElement | undefined;\n\t\t// \t} else {\n\t\t// \t\tconst c = children as React.ReactElement;\n\t\t// \t\tif (typeof c.type === 'string' && c.type === 'meshLineMaterial') {\n\t\t// \t\t\tmatOverride = c;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\t\t// if (typeof matOverride?.props === 'object') {\n\t\t// \tm.setValues(matOverride.props);\n\t\t// }\n\n\t\treturn m;\n\t});\n\n\tconstructor() {\n\t\tthis.setMaterialSize();\n\t\tthis.beforeRender();\n\t}\n\n\tprivate setMaterialSize() {\n\t\teffect(() => {\n\t\t\tconst [material, size] = [this.material(), this.size()];\n\t\t\tmaterial.uniforms['resolution'].value.set(size.width, size.height);\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tinjectBeforeRender(() => {\n\t\t\tconst [points, attenuation] = [this.points(), this.attenuation()];\n\t\t\tthis.geometry.setPoints(points, attenuation);\n\t\t});\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "angular-three-soba",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.41",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
"esm": "./esm2022/abstractions/angular-three-soba-abstractions.mjs",
|
|
40
40
|
"default": "./fesm2022/angular-three-soba-abstractions.mjs"
|
|
41
41
|
},
|
|
42
|
-
"./
|
|
43
|
-
"types": "./
|
|
44
|
-
"esm2022": "./esm2022/
|
|
45
|
-
"esm": "./esm2022/
|
|
46
|
-
"default": "./fesm2022/angular-three-soba-
|
|
42
|
+
"./cameras": {
|
|
43
|
+
"types": "./cameras/index.d.ts",
|
|
44
|
+
"esm2022": "./esm2022/cameras/angular-three-soba-cameras.mjs",
|
|
45
|
+
"esm": "./esm2022/cameras/angular-three-soba-cameras.mjs",
|
|
46
|
+
"default": "./fesm2022/angular-three-soba-cameras.mjs"
|
|
47
47
|
},
|
|
48
48
|
"./gizmos": {
|
|
49
49
|
"types": "./gizmos/index.d.ts",
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
"esm": "./esm2022/gizmos/angular-three-soba-gizmos.mjs",
|
|
52
52
|
"default": "./fesm2022/angular-three-soba-gizmos.mjs"
|
|
53
53
|
},
|
|
54
|
-
"./
|
|
55
|
-
"types": "./
|
|
56
|
-
"esm2022": "./esm2022/
|
|
57
|
-
"esm": "./esm2022/
|
|
58
|
-
"default": "./fesm2022/angular-three-soba-
|
|
54
|
+
"./controls": {
|
|
55
|
+
"types": "./controls/index.d.ts",
|
|
56
|
+
"esm2022": "./esm2022/controls/angular-three-soba-controls.mjs",
|
|
57
|
+
"esm": "./esm2022/controls/angular-three-soba-controls.mjs",
|
|
58
|
+
"default": "./fesm2022/angular-three-soba-controls.mjs"
|
|
59
59
|
},
|
|
60
60
|
"./loaders": {
|
|
61
61
|
"types": "./loaders/index.d.ts",
|
|
@@ -63,18 +63,18 @@
|
|
|
63
63
|
"esm": "./esm2022/loaders/angular-three-soba-loaders.mjs",
|
|
64
64
|
"default": "./fesm2022/angular-three-soba-loaders.mjs"
|
|
65
65
|
},
|
|
66
|
-
"./materials": {
|
|
67
|
-
"types": "./materials/index.d.ts",
|
|
68
|
-
"esm2022": "./esm2022/materials/angular-three-soba-materials.mjs",
|
|
69
|
-
"esm": "./esm2022/materials/angular-three-soba-materials.mjs",
|
|
70
|
-
"default": "./fesm2022/angular-three-soba-materials.mjs"
|
|
71
|
-
},
|
|
72
66
|
"./misc": {
|
|
73
67
|
"types": "./misc/index.d.ts",
|
|
74
68
|
"esm2022": "./esm2022/misc/angular-three-soba-misc.mjs",
|
|
75
69
|
"esm": "./esm2022/misc/angular-three-soba-misc.mjs",
|
|
76
70
|
"default": "./fesm2022/angular-three-soba-misc.mjs"
|
|
77
71
|
},
|
|
72
|
+
"./materials": {
|
|
73
|
+
"types": "./materials/index.d.ts",
|
|
74
|
+
"esm2022": "./esm2022/materials/angular-three-soba-materials.mjs",
|
|
75
|
+
"esm": "./esm2022/materials/angular-three-soba-materials.mjs",
|
|
76
|
+
"default": "./fesm2022/angular-three-soba-materials.mjs"
|
|
77
|
+
},
|
|
78
78
|
"./modifiers": {
|
|
79
79
|
"types": "./modifiers/index.d.ts",
|
|
80
80
|
"esm2022": "./esm2022/modifiers/angular-three-soba-modifiers.mjs",
|