@dashkite/joy
Version:
*The simplicity of Lodash with the functional flair of Rambda.*
114 lines (113 loc) • 16.3 kB
JavaScript
var getter, getters, metaclass, method, methods, mixin, properties, property, setter, setters;
import { curry } from "./function";
import { merge } from "./object";
property = curry(function(key, description, target) {
return Object.defineProperty(target, key, merge({
enumerable: true,
configurable: true
}, description));
});
getter = curry(function(key, f, target) {
return property(key, {
get: f
}, target);
});
setter = curry(function(key, f, target) {
return property(key, {
set: f
}, target);
});
method = curry(function(key, f, target) {
return property(key, {
value: f,
configurable: true,
writeable: true
}, target);
});
properties = curry(function(dictionary, target) {
var description, key, results;
results = [];
for(key in dictionary){
description = dictionary[key];
results.push(property(key, description, target));
}
return results;
});
getters = curry(function(dictionary, target) {
var f, key, results;
results = [];
for(key in dictionary){
f = dictionary[key];
results.push(getter(key, f, target));
}
return results;
});
setters = curry(function(dictionary, target) {
var f, key, results;
results = [];
for(key in dictionary){
f = dictionary[key];
results.push(setter(key, f, target));
}
return results;
});
methods = curry(function(dictionary, target) {
var f, key, results;
results = [];
for(key in dictionary){
f = dictionary[key];
results.push(method(key, f, target));
}
return results;
});
mixin = curry(function(target, fx) {
var f, i, len;
for(i = 0, len = fx.length; i < len; i++){
f = fx[i];
f(target);
}
return target;
});
metaclass = function(base = Object) {
return class extends base {
static getter(key, f) {
return getter(key, f, this.prototype);
}
static setter(key, f) {
return setter(key, f, this.prototype);
}
static property(key, specifier) {
return property(key, specifier, this.prototype);
}
static getters(dictionary) {
return getters(dictionary, this.prototype);
}
static setters(dictionary) {
return setters(dictionary, this.prototype);
}
static properties(dictionary) {
return properties(dictionary, this.prototype);
}
static $getter(key, f) {
return getter(key, f, this);
}
static $setter(key, f) {
return setter(key, f, this);
}
static $property(key, specifier) {
return property(key, specifier, this);
}
static $getters(dictionary) {
return getters(dictionary, this);
}
static $setters(dictionary) {
return setters(dictionary, this);
}
static $properties(dictionary) {
return properties(dictionary, this);
}
};
};
export { property, getter, setter, method, properties, getters, setters, methods, mixin, metaclass }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS9qb3kvc3JjL21ldGFjbGFzcy5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQTs7QUFBQSxPQUFBO0VBQVEsS0FBUjtDQUFBLE1BQUE7O0FBQ0EsT0FBQTtFQUFRLEtBQVI7Q0FBQSxNQUFBOztBQUVBLFFBQUEsR0FBVyxLQUFBLENBQU0sUUFBQSxDQUFDLEdBQUQsRUFBTSxXQUFOLEVBQW1CLE1BQW5CLENBQUE7U0FDZixNQUFNLENBQUMsY0FBUCxDQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUNFLEtBQUEsQ0FBTTtJQUFFLFVBQUEsRUFBWSxJQUFkO0lBQW9CLFlBQUEsRUFBYztFQUFsQyxDQUFOLEVBQWdELFdBQWhELENBREY7QUFEZSxDQUFOOztBQUlYLE1BQUEsR0FBUyxLQUFBLENBQU0sUUFBQSxDQUFDLEdBQUQsRUFBTSxDQUFOLEVBQVMsTUFBVCxDQUFBO1NBQW9CLFFBQUEsQ0FBUyxHQUFULEVBQWM7SUFBQyxHQUFBLEVBQUs7RUFBTixDQUFkLEVBQXdCLE1BQXhCO0FBQXBCLENBQU47O0FBQ1QsTUFBQSxHQUFTLEtBQUEsQ0FBTSxRQUFBLENBQUMsR0FBRCxFQUFNLENBQU4sRUFBUyxNQUFULENBQUE7U0FBb0IsUUFBQSxDQUFTLEdBQVQsRUFBYztJQUFDLEdBQUEsRUFBSztFQUFOLENBQWQsRUFBd0IsTUFBeEI7QUFBcEIsQ0FBTjs7QUFDVCxNQUFBLEdBQVMsS0FBQSxDQUFNLFFBQUEsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLE1BQVQsQ0FBQTtTQUNiLFFBQUEsQ0FBUyxHQUFULEVBQWM7SUFBQyxLQUFBLEVBQU8sQ0FBUjtJQUFXLFlBQUEsRUFBYyxJQUF6QjtJQUErQixTQUFBLEVBQVc7RUFBMUMsQ0FBZCxFQUErRCxNQUEvRDtBQURhLENBQU47O0FBR1QsVUFBQSxHQUFhLEtBQUEsQ0FBTSxRQUFBLENBQUMsVUFBRCxFQUFhLE1BQWIsQ0FBQTtBQUNuQixNQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUE7QUFBRTtFQUFBLEtBQUEsaUJBQUE7O2lCQUNFLFFBQUEsQ0FBUyxHQUFULEVBQWMsV0FBZCxFQUEyQixNQUEzQjtFQURGLENBQUE7O0FBRGlCLENBQU47O0FBSWIsT0FBQSxHQUFVLEtBQUEsQ0FBTSxRQUFBLENBQUMsVUFBRCxFQUFhLE1BQWIsQ0FBQTtBQUNoQixNQUFBLENBQUEsRUFBQSxHQUFBLEVBQUE7QUFBRTtFQUFBLEtBQUEsaUJBQUE7O2lCQUNFLE1BQUEsQ0FBTyxHQUFQLEVBQVksQ0FBWixFQUFlLE1BQWY7RUFERixDQUFBOztBQURjLENBQU47O0FBSVYsT0FBQSxHQUFVLEtBQUEsQ0FBTSxRQUFBLENBQUMsVUFBRCxFQUFhLE1BQWIsQ0FBQTtBQUNoQixNQUFBLENBQUEsRUFBQSxHQUFBLEVBQUE7QUFBRTtFQUFBLEtBQUEsaUJBQUE7O2lCQUNFLE1BQUEsQ0FBTyxHQUFQLEVBQVksQ0FBWixFQUFlLE1BQWY7RUFERixDQUFBOztBQURjLENBQU47O0FBSVYsT0FBQSxHQUFVLEtBQUEsQ0FBTSxRQUFBLENBQUMsVUFBRCxFQUFhLE1BQWIsQ0FBQTtBQUNoQixNQUFBLENBQUEsRUFBQSxHQUFBLEVBQUE7QUFBRTtFQUFBLEtBQUEsaUJBQUE7O2lCQUNFLE1BQUEsQ0FBTyxHQUFQLEVBQVksQ0FBWixFQUFlLE1BQWY7RUFERixDQUFBOztBQURjLENBQU47O0FBSVYsS0FBQSxHQUFRLEtBQUEsQ0FBTSxRQUFBLENBQUMsTUFBRCxFQUFTLEVBQVQsQ0FBQTtBQUFlLE1BQUEsQ0FBQSxFQUFBLENBQUEsRUFBQTtFQUFDLEtBQUEsb0NBQUE7O0lBQUEsQ0FBQSxDQUFFLE1BQUY7RUFBQTtTQUF1QjtBQUF2QyxDQUFOOztBQUVSLFNBQUEsR0FBWSxRQUFBLENBQUUsT0FBTyxNQUFULENBQUE7U0FFVixNQUFBLFFBQWMsS0FBZDtJQUVXLE9BQVIsTUFBUSxDQUFFLEdBQUYsRUFBTyxDQUFQLENBQUE7YUFBYyxNQUFBLENBQU8sR0FBUCxFQUFZLENBQVosRUFBZSxJQUFDLENBQUEsU0FBaEI7SUFBZDs7SUFDQSxPQUFSLE1BQVEsQ0FBRSxHQUFGLEVBQU8sQ0FBUCxDQUFBO2FBQWMsTUFBQSxDQUFPLEdBQVAsRUFBWSxDQUFaLEVBQWUsSUFBQyxDQUFBLFNBQWhCO0lBQWQ7O0lBQ0UsT0FBVixRQUFVLENBQUUsR0FBRixFQUFPLFNBQVAsQ0FBQTthQUFzQixRQUFBLENBQVMsR0FBVCxFQUFjLFNBQWQsRUFBeUIsSUFBQyxDQUFBLFNBQTFCO0lBQXRCOztJQUNELE9BQVQsT0FBUyxDQUFFLFVBQUYsQ0FBQTthQUFrQixPQUFBLENBQVEsVUFBUixFQUFvQixJQUFDLENBQUEsU0FBckI7SUFBbEI7O0lBQ0EsT0FBVCxPQUFTLENBQUUsVUFBRixDQUFBO2FBQWtCLE9BQUEsQ0FBUSxVQUFSLEVBQW9CLElBQUMsQ0FBQSxTQUFyQjtJQUFsQjs7SUFDRyxPQUFaLFVBQVksQ0FBRSxVQUFGLENBQUE7YUFBa0IsVUFBQSxDQUFXLFVBQVgsRUFBdUIsSUFBQyxDQUFBLFNBQXhCO0lBQWxCOztJQUVILE9BQVQsT0FBUyxDQUFFLEdBQUYsRUFBTyxDQUFQLENBQUE7YUFBYyxNQUFBLENBQU8sR0FBUCxFQUFZLENBQVosRUFBZSxJQUFmO0lBQWQ7O0lBQ0EsT0FBVCxPQUFTLENBQUUsR0FBRixFQUFPLENBQVAsQ0FBQTthQUFjLE1BQUEsQ0FBTyxHQUFQLEVBQVksQ0FBWixFQUFlLElBQWY7SUFBZDs7SUFDRSxPQUFYLFNBQVcsQ0FBRSxHQUFGLEVBQU8sU0FBUCxDQUFBO2FBQXNCLFFBQUEsQ0FBUyxHQUFULEVBQWMsU0FBZCxFQUF5QixJQUF6QjtJQUF0Qjs7SUFDRCxPQUFWLFFBQVUsQ0FBRSxVQUFGLENBQUE7YUFBa0IsT0FBQSxDQUFRLFVBQVIsRUFBb0IsSUFBcEI7SUFBbEI7O0lBQ0EsT0FBVixRQUFVLENBQUUsVUFBRixDQUFBO2FBQWtCLE9BQUEsQ0FBUSxVQUFSLEVBQW9CLElBQXBCO0lBQWxCOztJQUNHLE9BQWIsV0FBYSxDQUFFLFVBQUYsQ0FBQTthQUFrQixVQUFBLENBQVcsVUFBWCxFQUF1QixJQUF2QjtJQUFsQjs7RUFkaEI7QUFGVTs7QUFrQlosT0FBQTtFQUNFLFFBREY7RUFFRSxNQUZGO0VBR0UsTUFIRjtFQUlFLE1BSkY7RUFLRSxVQUxGO0VBTUUsT0FORjtFQU9FLE9BUEY7RUFRRSxPQVJGO0VBU0UsS0FURjtFQVVFLFNBVkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2N1cnJ5fSBmcm9tIFwiLi9mdW5jdGlvblwiXG5pbXBvcnQge21lcmdlfSBmcm9tIFwiLi9vYmplY3RcIlxuXG5wcm9wZXJ0eSA9IGN1cnJ5IChrZXksIGRlc2NyaXB0aW9uLCB0YXJnZXQpIC0+XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0YXJnZXQsIGtleSxcbiAgICBtZXJnZSB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LCBkZXNjcmlwdGlvblxuXG5nZXR0ZXIgPSBjdXJyeSAoa2V5LCBmLCB0YXJnZXQpIC0+IHByb3BlcnR5IGtleSwge2dldDogZn0sIHRhcmdldFxuc2V0dGVyID0gY3VycnkgKGtleSwgZiwgdGFyZ2V0KSAtPiBwcm9wZXJ0eSBrZXksIHtzZXQ6IGZ9LCB0YXJnZXRcbm1ldGhvZCA9IGN1cnJ5IChrZXksIGYsIHRhcmdldCkgLT5cbiAgcHJvcGVydHkga2V5LCB7dmFsdWU6IGYsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGVhYmxlOiB0cnVlfSwgdGFyZ2V0XG5cbnByb3BlcnRpZXMgPSBjdXJyeSAoZGljdGlvbmFyeSwgdGFyZ2V0KSAtPlxuICBmb3Iga2V5LCBkZXNjcmlwdGlvbiBvZiBkaWN0aW9uYXJ5XG4gICAgcHJvcGVydHkga2V5LCBkZXNjcmlwdGlvbiwgdGFyZ2V0XG5cbmdldHRlcnMgPSBjdXJyeSAoZGljdGlvbmFyeSwgdGFyZ2V0KSAtPlxuICBmb3Iga2V5LCBmIG9mIGRpY3Rpb25hcnlcbiAgICBnZXR0ZXIga2V5LCBmLCB0YXJnZXRcblxuc2V0dGVycyA9IGN1cnJ5IChkaWN0aW9uYXJ5LCB0YXJnZXQpIC0+XG4gIGZvciBrZXksIGYgb2YgZGljdGlvbmFyeVxuICAgIHNldHRlciBrZXksIGYsIHRhcmdldFxuXG5tZXRob2RzID0gY3VycnkgKGRpY3Rpb25hcnksIHRhcmdldCkgLT5cbiAgZm9yIGtleSwgZiBvZiBkaWN0aW9uYXJ5XG4gICAgbWV0aG9kIGtleSwgZiwgdGFyZ2V0XG5cbm1peGluID0gY3VycnkgKHRhcmdldCwgZngpIC0+IGYgdGFyZ2V0IGZvciBmIGluIGZ4IDsgdGFyZ2V0XG5cbm1ldGFjbGFzcyA9ICggYmFzZSA9IE9iamVjdCApIC0+XG5cbiAgY2xhc3MgZXh0ZW5kcyBiYXNlXG5cbiAgICBAZ2V0dGVyOiAoIGtleSwgZiApIC0+IGdldHRlciBrZXksIGYsIEA6OlxuICAgIEBzZXR0ZXI6ICgga2V5LCBmICkgLT4gc2V0dGVyIGtleSwgZiwgQDo6XG4gICAgQHByb3BlcnR5OiAoIGtleSwgc3BlY2lmaWVyICkgLT4gcHJvcGVydHkga2V5LCBzcGVjaWZpZXIsIEA6OlxuICAgIEBnZXR0ZXJzOiAoIGRpY3Rpb25hcnkgKSAtPiBnZXR0ZXJzIGRpY3Rpb25hcnksIEA6OlxuICAgIEBzZXR0ZXJzOiAoIGRpY3Rpb25hcnkgKSAtPiBzZXR0ZXJzIGRpY3Rpb25hcnksIEA6OlxuICAgIEBwcm9wZXJ0aWVzOiAoIGRpY3Rpb25hcnkgKSAtPiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnksIEA6OlxuXG4gICAgQCRnZXR0ZXI6ICgga2V5LCBmICkgLT4gZ2V0dGVyIGtleSwgZiwgQFxuICAgIEAkc2V0dGVyOiAoIGtleSwgZiApIC0+IHNldHRlciBrZXksIGYsIEBcbiAgICBAJHByb3BlcnR5OiAoIGtleSwgc3BlY2lmaWVyICkgLT4gcHJvcGVydHkga2V5LCBzcGVjaWZpZXIsIEBcbiAgICBAJGdldHRlcnM6ICggZGljdGlvbmFyeSApIC0+IGdldHRlcnMgZGljdGlvbmFyeSwgQFxuICAgIEAkc2V0dGVyczogKCBkaWN0aW9uYXJ5ICkgLT4gc2V0dGVycyBkaWN0aW9uYXJ5LCBAXG4gICAgQCRwcm9wZXJ0aWVzOiAoIGRpY3Rpb25hcnkgKSAtPiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnksIEBcblxuZXhwb3J0IHtcbiAgcHJvcGVydHlcbiAgZ2V0dGVyXG4gIHNldHRlclxuICBtZXRob2RcbiAgcHJvcGVydGllc1xuICBnZXR0ZXJzXG4gIHNldHRlcnNcbiAgbWV0aG9kc1xuICBtaXhpblxuICBtZXRhY2xhc3Ncbn1cbiJdfQ==
//# sourceURL=/@dashkite/joy/src/metaclass.coffee
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyIvQGRhc2hraXRlL2pveS9zcmMvbWV0YWNsYXNzLmNvZmZlZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjdXJyeX0gZnJvbSBcIi4vZnVuY3Rpb25cIlxuaW1wb3J0IHttZXJnZX0gZnJvbSBcIi4vb2JqZWN0XCJcblxucHJvcGVydHkgPSBjdXJyeSAoa2V5LCBkZXNjcmlwdGlvbiwgdGFyZ2V0KSAtPlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGFyZ2V0LCBrZXksXG4gICAgbWVyZ2UgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSwgZGVzY3JpcHRpb25cblxuZ2V0dGVyID0gY3VycnkgKGtleSwgZiwgdGFyZ2V0KSAtPiBwcm9wZXJ0eSBrZXksIHtnZXQ6IGZ9LCB0YXJnZXRcbnNldHRlciA9IGN1cnJ5IChrZXksIGYsIHRhcmdldCkgLT4gcHJvcGVydHkga2V5LCB7c2V0OiBmfSwgdGFyZ2V0XG5tZXRob2QgPSBjdXJyeSAoa2V5LCBmLCB0YXJnZXQpIC0+XG4gIHByb3BlcnR5IGtleSwge3ZhbHVlOiBmLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRlYWJsZTogdHJ1ZX0sIHRhcmdldFxuXG5wcm9wZXJ0aWVzID0gY3VycnkgKGRpY3Rpb25hcnksIHRhcmdldCkgLT5cbiAgZm9yIGtleSwgZGVzY3JpcHRpb24gb2YgZGljdGlvbmFyeVxuICAgIHByb3BlcnR5IGtleSwgZGVzY3JpcHRpb24sIHRhcmdldFxuXG5nZXR0ZXJzID0gY3VycnkgKGRpY3Rpb25hcnksIHRhcmdldCkgLT5cbiAgZm9yIGtleSwgZiBvZiBkaWN0aW9uYXJ5XG4gICAgZ2V0dGVyIGtleSwgZiwgdGFyZ2V0XG5cbnNldHRlcnMgPSBjdXJyeSAoZGljdGlvbmFyeSwgdGFyZ2V0KSAtPlxuICBmb3Iga2V5LCBmIG9mIGRpY3Rpb25hcnlcbiAgICBzZXR0ZXIga2V5LCBmLCB0YXJnZXRcblxubWV0aG9kcyA9IGN1cnJ5IChkaWN0aW9uYXJ5LCB0YXJnZXQpIC0+XG4gIGZvciBrZXksIGYgb2YgZGljdGlvbmFyeVxuICAgIG1ldGhvZCBrZXksIGYsIHRhcmdldFxuXG5taXhpbiA9IGN1cnJ5ICh0YXJnZXQsIGZ4KSAtPiBmIHRhcmdldCBmb3IgZiBpbiBmeCA7IHRhcmdldFxuXG5tZXRhY2xhc3MgPSAoIGJhc2UgPSBPYmplY3QgKSAtPlxuXG4gIGNsYXNzIGV4dGVuZHMgYmFzZVxuXG4gICAgQGdldHRlcjogKCBrZXksIGYgKSAtPiBnZXR0ZXIga2V5LCBmLCBAOjpcbiAgICBAc2V0dGVyOiAoIGtleSwgZiApIC0+IHNldHRlciBrZXksIGYsIEA6OlxuICAgIEBwcm9wZXJ0eTogKCBrZXksIHNwZWNpZmllciApIC0+IHByb3BlcnR5IGtleSwgc3BlY2lmaWVyLCBAOjpcbiAgICBAZ2V0dGVyczogKCBkaWN0aW9uYXJ5ICkgLT4gZ2V0dGVycyBkaWN0aW9uYXJ5LCBAOjpcbiAgICBAc2V0dGVyczogKCBkaWN0aW9uYXJ5ICkgLT4gc2V0dGVycyBkaWN0aW9uYXJ5LCBAOjpcbiAgICBAcHJvcGVydGllczogKCBkaWN0aW9uYXJ5ICkgLT4gcHJvcGVydGllcyBkaWN0aW9uYXJ5LCBAOjpcblxuICAgIEAkZ2V0dGVyOiAoIGtleSwgZiApIC0+IGdldHRlciBrZXksIGYsIEBcbiAgICBAJHNldHRlcjogKCBrZXksIGYgKSAtPiBzZXR0ZXIga2V5LCBmLCBAXG4gICAgQCRwcm9wZXJ0eTogKCBrZXksIHNwZWNpZmllciApIC0+IHByb3BlcnR5IGtleSwgc3BlY2lmaWVyLCBAXG4gICAgQCRnZXR0ZXJzOiAoIGRpY3Rpb25hcnkgKSAtPiBnZXR0ZXJzIGRpY3Rpb25hcnksIEBcbiAgICBAJHNldHRlcnM6ICggZGljdGlvbmFyeSApIC0+IHNldHRlcnMgZGljdGlvbmFyeSwgQFxuICAgIEAkcHJvcGVydGllczogKCBkaWN0aW9uYXJ5ICkgLT4gcHJvcGVydGllcyBkaWN0aW9uYXJ5LCBAXG5cbmV4cG9ydCB7XG4gIHByb3BlcnR5XG4gIGdldHRlclxuICBzZXR0ZXJcbiAgbWV0aG9kXG4gIHByb3BlcnRpZXNcbiAgZ2V0dGVyc1xuICBzZXR0ZXJzXG4gIG1ldGhvZHNcbiAgbWl4aW5cbiAgbWV0YWNsYXNzXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQTtBQUFBLE9BQUEsRUFBUSxLQUFSLFFBQUEsYUFBQTtBQUNBLE9BQUEsRUFBUSxLQUFSLFFBQUEsV0FBQTtBQUVBLFFBQUEsR0FBVyxLQUFBLENBQU0sUUFBQSxDQUFDLEdBQUQsRUFBTSxXQUFOLEVBQW1CLE1BQW5CLENBQUE7V0FDZixNQUFNLENBQUMsY0FBUCxDQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUNFLEtBQUEsQ0FBTTtRQUFFLFVBQUEsRUFBWSxJQUFkO1FBQW9CLFlBQUEsRUFBYztJQUFsQyxDQUFOLEVBQWdELFdBQWhELENBREY7QUFEZSxDQUFOO0FBSVgsTUFBQSxHQUFTLEtBQUEsQ0FBTSxRQUFBLENBQUMsR0FBRCxFQUFNLENBQU4sRUFBUyxNQUFULENBQUE7V0FBb0IsUUFBQSxDQUFTLEdBQVQsRUFBYztRQUFDLEdBQUEsRUFBSztJQUFOLENBQWQsRUFBd0IsTUFBeEI7QUFBcEIsQ0FBTjtBQUNULE1BQUEsR0FBUyxLQUFBLENBQU0sUUFBQSxDQUFDLEdBQUQsRUFBTSxDQUFOLEVBQVMsTUFBVCxDQUFBO1dBQW9CLFFBQUEsQ0FBUyxHQUFULEVBQWM7UUFBQyxHQUFBLEVBQUs7SUFBTixDQUFkLEVBQXdCLE1BQXhCO0FBQXBCLENBQU47QUFDVCxNQUFBLEdBQVMsS0FBQSxDQUFNLFFBQUEsQ0FBQyxHQUFELEVBQU0sQ0FBTixFQUFTLE1BQVQsQ0FBQTtXQUNiLFFBQUEsQ0FBUyxHQUFULEVBQWM7UUFBQyxLQUFBLEVBQU8sQ0FBUjtRQUFXLFlBQUEs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