�PNG  IHDR��;���IDATx��ܻn�0���K�� �)(�pA��� ���7�LeG{�� �§㻢|��ذaÆ 6lذaÆ 6lذaÆ 6lom��$^�y���ذag�5bÆ 6lذaÆ 6lذa{���� 6lذaÆ �`����}H�Fkm�,�m����Ӫ���ô�ô!� �x�|'ܢ˟;�E:���9�&ᶒ�}�{�v]�n&�6� �h��_��t�ڠ͵-ҫ���Z;��Z$�.�P���k�ž)�!��o���>}l�eQfJ�T��u і���چ��\��X=8��Rن4`Vw�l�>����n�G�^��i�s��"ms�$�u��i��?w�bs[m�6�K4���O���.�4��%����/����b�C%��t ��M�ז� �-l�G6�mrz2���s�%�9��s@���-�k�9�=���)������k�B5����\��+͂�Zsٲ ��Rn��~G���R���C����� �wIcI��n7jJ���hۛNCS|���j0��8y�iHKֶۛ�k�Ɉ+;Sz������L/��F�*\��Ԕ�#"5��m�2��[S��������=�g��n�a�P�e�ғ�L�� lذaÆ 6l�^k��̱aÆ 6lذaÆ 6lذa;���� �_��ذaÆ 6lذaÆ 6lذaÆ ���R���IEND�B` var hpack = require('../hpack'); var utils = hpack.utils; var assert = utils.assert; function Table(options) { this['static'] = hpack['static-table']; this.dynamic = []; this.size = 0; this.maxSize = 0; this.length = this['static'].table.length; this.protocolMaxSize = options.maxSize; this.maxSize = this.protocolMaxSize; this.lookupDepth = options.lookupDepth || 32; } module.exports = Table; Table.create = function create(options) { return new Table(options); }; Table.prototype.lookup = function lookup(index) { assert(index !== 0, 'Zero indexed field'); assert(index <= this.length, 'Indexed field OOB') if (index <= this['static'].table.length) return this['static'].table[index - 1]; else return this.dynamic[this.length - index]; }; Table.prototype.reverseLookup = function reverseLookup(name, value) { var staticEntry = this['static'].map[name]; if (staticEntry && staticEntry.values[value]) return staticEntry.values[value]; // Reverse search dynamic table (new items are at the end of it) var limit = Math.max(0, this.dynamic.length - this.lookupDepth); for (var i = this.dynamic.length - 1; i >= limit; i--) { var entry = this.dynamic[i]; if (entry.name === name && entry.value === value) return this.length - i; if (entry.name === name) { // Prefer smaller index if (staticEntry) break; return -(this.length - i); } } if (staticEntry) return -staticEntry.index; return 0; }; Table.prototype.add = function add(name, value, nameSize, valueSize) { var totalSize = nameSize + valueSize + 32; this.dynamic.push({ name: name, value: value, nameSize: nameSize, totalSize: totalSize }); this.size += totalSize; this.length++; this.evict(); }; Table.prototype.evict = function evict() { while (this.size > this.maxSize) { var entry = this.dynamic.shift(); this.size -= entry.totalSize; this.length--; } assert(this.size >= 0, 'Table size sanity check failed'); }; Table.prototype.updateSize = function updateSize(size) { assert(size <= this.protocolMaxSize, 'Table size bigger than maximum'); this.maxSize = size; this.evict(); };