PageSourceSearch

https://www.jumbo.com/_nuxt/BAj4FbOS.js

js jumbo.com collected 2026-09-24 08:52:06 UTC 20,054 bytes, 136 lines download raw bytes

1import{dN as c,dO as M,ap as V,at as G}from"./CelG4gE-.js";var v={kind:"Document",definitions:[{kind:"FragmentDefinition",name:{kind:"Name",value:"commonOfferFields"},typeCondition:{kind:"NamedType",name:{kind:"Name",value:"LoyaltyPromotion"}},directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"burnPointsAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"canBeRedeemed"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"companyCode"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"description"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"employeePromotion"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"eurosDiscount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"expirationDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"externalId"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"extraMoneyAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"id"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"image"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"incentiveVersion"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"largeImage"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"locations"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"city"},arguments:[],directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"originalBurnPointsAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"originalPrice"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"percentageDiscount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"pointAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"pointType"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"promotionType"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"promotionTag"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"text"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"type"},arguments:[],directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"tag"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"title"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"vouchersAvailable"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"localState"},arguments:[],directives:[{kind:"Directive",name:{kind:"Name",value:"client"},arguments:[]}],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"badge"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"checked"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"disabled"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"discount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"expirationDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"id"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"incentiveVersion"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"image"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"cover"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"fade"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"src"},arguments:[],directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"redeemPoints"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"amount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"extraMoney"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"originalAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"preText"},arguments:[],directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"subtitle"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"tag"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"text"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"type"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"stack"},arguments:[],directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"title"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"type"},arguments:[],directives:[]}]}}]}}],loc:{start:0,end:795}};v.loc.source={body:`fragment commonOfferFields on LoyaltyPromotion {
2  burnPointsAmount
3  canBeRedeemed
4  companyCode
5  description
6  employeePromotion
7  eurosDiscount
8  expirationDate
9  externalId
10  extraMoneyAmount
11  id
12  image
13  incentiveVersion
14  largeImage
15  locations {
16    city
17  }
18  originalBurnPointsAmount
19  originalPrice
20  percentageDiscount
21  pointAmount
22  pointType
23  promotionType
24  promotionTag {
25    text
26    type
27  }
28  tag
29  title
30  vouchersAvailable
31  localState @client {
32    badge
33    checked
34    disabled
35    discount
36    expirationDate
37    id
38    incentiveVersion
39    image {
40      cover
41      fade
42      src
43    }
44    redeemPoints {
45      amount
46      extraMoney
47      originalAmount
48      preText
49    }
50    subtitle
51    tag {
52      text
53      type
54      stack
55    }
56    title
57    type
58  }
59}
60`,name:"GraphQL request",locationOffset:{line:1,column:1}};function k(e,n){if(e.kind==="FragmentSpread")n.add(e.name.value);else if(e.kind==="VariableDefinition"){var i=e.type;i.kind==="NamedType"&&n.add(i.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(t){k(t,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(t){k(t,n)}),e.definitions&&e.definitions.forEach(function(t){k(t,n)})}var y={};(function(){v.definitions.forEach(function(n){if(n.name){var i=new Set;k(n,i),y[n.name.value]=i}})})();function b(e,n){for(var i=0;i<e.definitions.length;i++){var t=e.definitions[i];if(t.name&&t.name.value==n)return t}}function I(e,n){var i={kind:e.kind,definitions:[b(e,n)]};e.hasOwnProperty("loc")&&(i.loc=e.loc);var t=y[n]||new Set,r=new Set,d=new Set;for(t.forEach(function(a){d.add(a)});d.size>0;){var l=d;
60d=new Set,l.forEach(function(a){if(!r.has(a)){r.add(a);var s=y[a]||new Set;s.forEach(function(m){d.add(m)})}})}return r.forEach(function(a){var s=b(e,a);s&&i.definitions.push(s)}),i}I(v,"commonOfferFields");var u={kind:"Document",definitions:[{kind:"FragmentDefinition",name:{kind:"Name",value:"redeemOfferFields"},typeCondition:{kind:"NamedType",name:{kind:"Name",value:"LoyaltyPromotion"}},directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"FragmentSpread",name:{kind:"Name",value:"commonOfferFields"},directives:[]},{kind:"Field",name:{kind:"Name",value:"categories"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"details"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"products"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"sku"},arguments:[],directives:[]}]}}]}},{kind:"Field",name:{kind:"Name",value:"redeemed"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"redemptionLimitCode"},arguments:[],directives:[]}]}}],loc:{start:0,end:259}};u.loc.source={body:`#import "@loyalty/graphql/fragments/commonOfferFields.gql"
61
62fragment redeemOfferFields on LoyaltyPromotion {
63    ...commonOfferFields
64    categories
65      details {
66        products {
67          sku
68        }
69      }
70      redeemed
71      redemptionLimitCode
72}
73`,name:"GraphQL request",locationOffset:{line:1,column:1}};var R={};function B(e){return e.filter(function(n){if(n.kind!=="FragmentDefinition")return!0;var i=n.name.value;return R[i]?!1:(R[i]=!0,!0)})}u.definitions=u.definitions.concat(B(v.definitions));function g(e,n){if(e.kind==="FragmentSpread")n.add(e.name.value);else if(e.kind==="VariableDefinition"){var i=e.type;i.kind==="NamedType"&&n.add(i.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(t){g(t,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(t){g(t,n)}),e.definitions&&e.definitions.forEach(function(t){g(t,n)})}var h={};(function(){u.definitions.forEach(function(n){if(n.name){var i=new Set;g(n,i),h[n.name.value]=i}})})();function P(e,n){for(var i=0;i<e.definitions.length;i++){var t=e.definitions[i];if(t.name&&t.name.value==n)return t}}function H(e,n){var i={kind:e.kind,definitions:[P(e,n)]};e.hasOwnProperty("loc")&&(i.loc=e.loc);var t=h[n]||new Set,r=new Set,d=new Set;for(t.forEach(function(a){d.add(a)});d.size>0;){var l=d;d=new Set,l.forEach(function(a){if(!r.has(a)){r.add(a);var s=h[a]||new Set;s.forEach(function(m){d.add(m)})}})}return r.forEach(function(a){var s=P(e,a);s&&i.definitions.push(s)}),i}H(u,"redeemOfferFields");var f={kind:"Document",definitions:[{kind:"FragmentDefinition",name:{kind:"Name",value:"SavingOfferFields"},typeCondition:{kind:"NamedType",name:{kind:"Name",value:"LoyaltyPromotion"}},directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"FragmentSpread",name:{kind:"Name",value:"commonOfferFields"},directives:[]},{kind:"Field",name:{kind:"Name",value:"balance"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"minimumSpent"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"points"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"spendIncrement"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"spendType"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"localState"},arguments:[],directives:[{kind:"Directive",name:{kind:"Name",value:"client"},arguments:[]}],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"savingPoints"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"amount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"text"},arguments:[],directives:[]}]}}]}}]}}],loc:{start:0,end:320}};f.loc.source={body:`#import "@loyalty/graphql/fragments/commonOfferFields.gql"
74
75fragment SavingOfferFields on LoyaltyPromotion {
76    ...commonOfferFields
77      balance
78      minimumSpent
79      points
80      spendIncrement
81      spendType
82      localState @client {
83        savingPoints {
84          amount
85          text
86        }
87      }
88
89}
90`,name:"GraphQL request",locationOffset:{line:1,column:1}};var x={};function Q(e){return e.filter(function(n){if(n.kind!=="FragmentDefinition")return!0;var i=n.name.value;return x[i]?!1:(x[i]=!0,!0)})}f.definitions=f.definitions.concat(Q(v.definitions));function S(e,n){if(e.kind==="FragmentSpread")n.add(e.name.value);else if(e.kind==="VariableDefinition"){var i=e.type;i.kind==="NamedType"&&n.add(i.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(t){S(t,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(t){S(t,n)}),e.definitions&&e.definitions.forEach(function(t){S(t,n)})}var O={};(function(){f.definitions.forEach(function(n){if(n.name){var i=new Set;S(n,i),O[n.name.value]=i}})})();function T(e,n){for(var i=0;i<e.definitions.length;i++){var t=e.definitions[i];if(t.name&&t.name.value==n)return t}}function _(e,n){var i={kind:e.kind,definitions:[T(e,n)]};e.hasOwnProperty("loc")&&(i.loc=e.loc);var t=O[n]||new Set,r=new Set,d=new Set;for(t.forEach(function(a){d.add(a)});d.size>0;){var l=d;
90d=new Set,l.forEach(function(a){if(!r.has(a)){r.add(a);var s=O[a]||new Set;s.forEach(function(m){d.add(m)})}})}return r.forEach(function(a){var s=T(e,a);s&&i.definitions.push(s)}),i}_(f,"SavingOfferFields");var N={kind:"Document",definitions:[{kind:"FragmentDefinition",name:{kind:"Name",value:"MassPromotionsFields"},typeCondition:{kind:"NamedType",name:{kind:"Name",value:"LoyaltyPromotion"}},directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"id"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"active"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"canBeRedeemed"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"description"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"employeePromotion"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"externalId"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"expirationDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"extraMoneyAmount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"image"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"incentiveVersion"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"minimumSpent"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"percentageDiscount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"eurosDiscount"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"startDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"packingState"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"personalizedEndDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"personalizedStartDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"spendType"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"startDate"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"title"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"localState"},arguments:[],directives:[{kind:"Directive",name:{kind:"Name",value:"client"},arguments:[]}],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"tag"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"text"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"type"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"stack"},arguments:[],directives:[]}]}}]}}]}}],loc:{start:0,end:428}};N.loc.source={body:`fragment MassPromotionsFields on LoyaltyPromotion {
91  id
92  active
93  canBeRedeemed
94  description
95  employeePromotion
96  externalId
97  expirationDate
98  extraMoneyAmount
99  image
100  incentiveVersion
101  minimumSpent
102  percentageDiscount
103  eurosDiscount
104  startDate
105  packingState
106  personalizedEndDate
107  personalizedStartDate
108  spendType
109  startDate
110  title
111  localState @client {
112    tag {
113      text
114      type
115      stack
116    }
117  }
118}
119`,name:"GraphQL request",locationOffset:{line:1,column:1}};function p(e,n){if(e.kind==="FragmentSpread")n.add(e.name.value);else if(e.kind==="VariableDefinition"){var i=e.type;i.kind==="NamedType"&&n.add(i.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(t){p(t,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(t){p(t,n)}),e.definitions&&e.definitions.forEach(function(t){p(t,n)})}var D={};(function(){N.definitions.forEach(function(n){if(n.name){var i=new Set;p(n,i),D[n.name.value]=i}})})();function $(e,n){for(var i=0;i<e.definitions.length;i++){var t=e.definitions[i];if(t.name&&t.name.value==n)return t}}function z(e,n){var i={kind:e.kind,definitions:[$(e,n)]};e.hasOwnProperty("loc")&&(i.loc=e.loc);var t=D[n]||new Set,r=new Set,d=new Set;for(t.forEach(function(a){d.add(a)});d.size>0;){var l=d;d=new Set,l.forEach(function(a){if(!r.has(a)){r.add(a);var s=D[a]||new Set;s.forEach(function(m){d.add(m)})}})}return r.forEach(function(a){var s=$(e,a);s&&i.definitions.push(s)}),i}z(N,"MassPromotionsFields");var o={kind:"Document",definitions:[{kind:"OperationDefinition",operation:"query",name:{kind:"Name",value:"GetHomeScreenOffers"},variableDefinitions:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"getHomeScreenOffers"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"birthdayOffers"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"FragmentSpread",name:{kind:"Name",value:"redeemOfferFields"},directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"welcomeOffers"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"FragmentSpread",name:{kind:"Name",value:"SavingOfferFields"},directives:[]}]}},{kind:"Field",name:{kind:"Name",value:"massOffers"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"FragmentSpread",name:{kind:"Name",value:"MassPromotionsFields"},directives:[]}]}}]}}]}}],loc:{start:0,end:383}};o.loc.source={body:`#import "@loyalty/graphql/fragments/redeemOffers.gql"
120#import "@loyalty/graphql/fragments/savingOffers.gql"
121#import "@loyalty/graphql/fragments/massPromotions.gql"
122
123query GetHomeScreenOffers {
124  getHomeScreenOffers {
125    birthdayOffers {
126      ...redeemOfferFields
127    }
128    welcomeOffers {
129      ...SavingOfferFields
130    }
131    massOffers {
132      ...MassPromotionsFields
133    }
134  }
135}
136`,name:"GraphQL request",locationOffset:{line:1,column:1}};var q={};function E(e){return e.filter(function(n){if(n.kind!=="FragmentDefinition")return!0;var i=n.name.value;return q[i]?!1:(q[i]=!0,!0)})}o.definitions=o.definitions.concat(E(u.definitions));o.definitions=o.definitions.concat(E(f.definitions));o.definitions=o.definitions.concat(E(N.definitions));function F(e,n){if(e.kind==="FragmentSpread")n.add(e.name.value);else if(e.kind==="VariableDefinition"){var i=e.type;i.kind==="NamedType"&&n.add(i.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(t){F(t,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(t){F(t,n)}),e.definitions&&e.definitions.forEach(function(t){F(t,n)})}var w={};(function(){o.definitions.forEach(function(n){if(n.name){var i=new Set;F(n,i),w[n.name.value]=i}})})();function A(e,n){for(var i=0;i<e.definitions.length;i++){var t=e.definitions[i];if(t.name&&t.name.value==n)return t}}function Y(e,n){var i={kind:e.kind,definitions:[A(e,n)]};e.hasOwnProperty("loc")&&(i.loc=e.loc);var t=w[n]||new Set,r=new Set,d=new Set;for(t.forEach(function(a){d.add(a)});d.size>0;){var l=d;
136d=new Set,l.forEach(function(a){if(!r.has(a)){r.add(a);var s=w[a]||new Set;s.forEach(function(m){d.add(m)})}})}return r.forEach(function(a){var s=A(e,a);s&&i.definitions.push(s)}),i}Y(o,"GetHomeScreenOffers");const C={[c.PRE_BIRTHDAY_CATEGORY]:e=>`${e.percentageDiscount}% korting op vers gebak`,[c.BIRTHDAY_PRODUCT]:()=>"We hebben een cadeau voor je"},L={[c.PRE_BIRTHDAY_CATEGORY]:()=>"Geldig één week voor en één week na verjaardag",[c.BIRTHDAY_PRODUCT]:e=>`Gratis ${e.title} ${e.description}`,[c.WELCOME_PRODUCT]:()=>"Om te vieren dat je meedoet met Jumbo Extra’s"};function U(e){const n={};for(const i in e){if(i==="__typename")continue;const t=e[i]??[];n[i]=t.map(r=>{if(i==="massOffers"){const d=M(r);return{...r,localState:{...r.localState,...d&&{tag:d}}}}return{...r,localState:{...r.localState,title:C[r.incentiveVersion]?C[r.incentiveVersion](r):r.title,subtitle:L[r.incentiveVersion]?L[r.incentiveVersion](r):"",image:{src:r.image}}}})}return n}const W=V("offers",{state:()=>({offers:{birthdayOffers:[],welcomeOffers:[],massOffers:[]},loading:!1,error:!1}),actions:{async fetch(){this.loading=!0,this.error=!1;try{const{client:e}=G(),{data:n}=await e.query({query:o,fetchPolicy:"cache-first"}),i=n?.getHomeScreenOffers??{},t=U(i);this.offers={birthdayOffers:t.birthdayOffers??[],welcomeOffers:t.welcomeOffers??[],massOffers:t.massOffers??[]}}catch(e){console.error("Failed to fetch home screen offers.",e),this.error=!0}finally{this.loading=!1}}},getters:{birthdayOffers(e){return e.offers.birthdayOffers??[]},welcomeOffers(e){return(e.offers.welcomeOffers??[]).filter(n=>n.incentiveVersion===c.WELCOME_PRODUCT)??[]},massOffers(e){return e.offers.massOffers??[]}}});export{W as u};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.