text:     var CheckedObserver = (function (_super) {
          inherits(CheckedObserver, _super);
  
          function CheckedObserver(observer) {
              _super.call(this);
              this._observer = observer;
              this._state = 0; // 0 - idle, 1 - busy, 2 - done
          }
  
          var CheckedObserverPrototype = CheckedObserver.prototype;
  
          CheckedObserverPrototype.onNext = function (value) {
              this.checkAccess();
              try {
                  this._observer.onNext(value);
              } catch (e) {
                  throw e;
              } finally {
                  this._state = 0;
              }
          };
  
          CheckedObserverPrototype.onError = function (err) {
              this.checkAccess();
              try {
                  this._observer.onError(err);
              } catch (e) {
                  throw e;
              } finally {
                  this._state = 2;
              }
          };
  
          CheckedObserverPrototype.onCompleted = function () {
              this.checkAccess();
              try {
                  this._observer.onCompleted();
              } catch (e) {
                  throw e;
              } finally {
                  this._state = 2;
              }
          };
  
          CheckedObserverPrototype.checkAccess = function () {
              if (this._state === 1) { throw new Error('Re-entrancy detected'); }
              if (this._state === 2) { throw new Error('Observer completed'); }
              if (this._state === 0) { this._state = 1; }
          };
  
          return CheckedObserver;
      }(Observer));
  