{"push_id":1455629879,"size":1000,"distinct_size":7289,"ref":"refs/heads/master","head":"cdb98c2698b4af287925abcba4d77d92af82a0c3","before":"0cb65c83304a341b9d09678448d7c8b550689531","commits":[{"sha":"9a53682b340b97642793271ba095cc9531a7b649","author":{"name":"Pan Bian","email":"0182ef22c4546b8be5babad82ecddbc4da6e3149@163.com"},"message":"isdn: hisax: set error code on failure\n\nIn function hfc4s8s_probe(), the value of return variable err should be\nnegative on failures. However, when the call to request_region() returns\nNULL, the value of err is 0. This patch fixes the bug, assigning\n\"-EBUSY\" to err on the path that request_region() fails.\n\nBugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188931\n\nSigned-off-by: Pan Bian <bianpan2016@163.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/9a53682b340b97642793271ba095cc9531a7b649"},{"sha":"a6e169312971219a34927e8fdece60046fafb8ba","author":{"name":"Hadar Hen Zion","email":"1224a0d695a0b6a3974654e0b3716d1316587ade@mellanox.com"},"message":"net/sched: cls_flower: Set the filter Hardware device for all use-cases\n\nCheck if the returned device from tcf_exts_get_dev function supports tc\noffload and in case the rule can't be offloaded, set the filter hw_dev\nparameter to the original device given by the user.\n\nThe filter hw_device parameter should always be set by fl_hw_replace_filter\nfunction, since this pointer is used by dump stats and destroy\nfilter for each flower rule (offloaded or not).\n\nFixes: 7091d8c7055d ('net/sched: cls_flower: Add offload support using egress Hardware device')\nSigned-off-by: Hadar Hen Zion <hadarh@mellanox.com>\nReported-by: Simon Horman <horms@verge.net.au>\nTested-by: Simon Horman <simon.horman@netronome.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/a6e169312971219a34927e8fdece60046fafb8ba"},{"sha":"65870fa77fd7f83d7be4ed924d47ed9e3831f434","author":{"name":"Mintz, Yuval","email":"e7ff2cbe0352d468438315672d3ce2e0ac5acd78@cavium.com"},"message":"bnx2x: Correct ringparam estimate when DOWN\n\nUntil interface is up [and assuming ringparams weren't explicitly\nconfigured] when queried for the size of its rings bnx2x would\nclaim they're the maximal size by default.\nThat is incorrect as by default the maximal number of buffers would\nbe equally divided between the various rx rings.\n\nThis prevents the user from actually setting the number of elements\non each rx ring to be of maximal size prior to transitioning the\ninterface into up state.\n\nTo fix this, make a rough estimation about the number of buffers.\nIt wouldn't always be accurate, but it would be much better than\ncurrent estimation and would allow users to increase number of\nbuffers during early initialization of the interface.\n\nReported-by: Seymour, Shane <shane.seymour@hpe.com>\nSigned-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/65870fa77fd7f83d7be4ed924d47ed9e3831f434"},{"sha":"360d9df2acd9f0b89aabaf16fca08954f113bd4e","author":{"name":"Mintz, Yuval","email":"e7ff2cbe0352d468438315672d3ce2e0ac5acd78@cavium.com"},"message":"bnx2x: Prevent tunnel config for 577xx\n\nOnly the 578xx adapters are capable of configuring UDP ports for\nthe purpose of tunnelling - doing the same on 577xx might lead to\na firmware assertion.\nWe're already not claiming support for any related feature for such\ndevices, but we also need to prevent the configuration of the UDP\nports to the device in this case.\n\nFixes: f34fa14cc033 (\"bnx2x: Add vxlan RSS support\")\nReported-by: Anikina Anna <anikina@gmail.com>\nSigned-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/360d9df2acd9f0b89aabaf16fca08954f113bd4e"},{"sha":"34e0f2c2d82d7d939bfa249672311050b3b537f1","author":{"name":"David S. Miller","email":"79caf591e37e1438a2d55ae59670d5cd0d717764@davemloft.net"},"message":"Merge branch 'bnx2x-fixes'\n\nYuval Mintz says:\n\n====================\nbnx2x: fixes series\n\nTwo unrelated fixes for bnx2x - the first one is nice-to-have,\nwhile the other fixes fatal behaviour in older adapters.\n\nPlease consider applying them to `net'.\n====================\n\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/34e0f2c2d82d7d939bfa249672311050b3b537f1"},{"sha":"bec60e50af83741cde1786ab475d4bf472aed6f9","author":{"name":"Ravi Bangoria","email":"8bf882eaa418adc30e4aa19df84c433553a93960@linux.vnet.ibm.com"},"message":"perf annotate: Show raw form for jump instruction with indirect target\n\nFor jump instructions that does not include target address as direct operand,\nshow the original disassembled line for them. This is needed for certain\npowerpc jump instructions that use target address in a register (such as bctr,\nbtar, ...).\n\nBefore:\n     ld     r12,32088(r12)\n     mtctr  r12\n  v  bctr   ffffffffffffca2c\n     std    r2,24(r1)\n     addis  r12,r2,-1\n\nAfter:\n     ld     r12,32088(r12)\n     mtctr  r12\n  v  bctr\n     std    r2,24(r1)\n     addis  r12,r2,-1\n\nCommitter notes:\n\nTesting it using a perf.data file and vmlinux for powerpc64,\ncross-annotating it on a x86_64 workstation:\n\nBefore:\n\n  .__bpf_prog_run  vmlinux.powerpc\n         │        std    r10,512(r9)                      ▒\n         │        lbz    r9,0(r31)                        ▒\n         │        rldicr r9,r9,3,60                       ▒\n         │        ldx    r9,r30,r9                        ▒\n         │        mtctr  r9                               ▒\n  100.00 │      ↓ bctr   3fffffffffe01510                 ▒\n         │        lwa    r10,4(r31)                       ▒\n         │        lwz    r9,0(r31)                        ▒\n  <SNIP>\n  Invalid jump offset: 3fffffffffe01510\n\nAfter:\n\n  .__bpf_prog_run  vmlinux.powerpc\n         │        std    r10,512(r9)                      ▒\n         │        lbz    r9,0(r31)                        ▒\n         │        rldicr r9,r9,3,60                       ▒\n         │        ldx    r9,r30,r9                        ▒\n         │        mtctr  r9                               ▒\n  100.00 │      ↓ bctr                                    ▒\n         │        lwa    r10,4(r31)                       ▒\n         │        lwz    r9,0(r31)                        ▒\n  <SNIP>\n  Invalid jump offset: 3fffffffffe01510\n\nThis, in turn, uncovers another problem with jumps without operands, the\nENTER/-> operation, to jump to the target, still continues using the bogus\ntarget :-)\n\nBTW, this was the file used for the above tests:\n\n  [acme@jouet ravi_bangoria]$ perf report --header-only -i perf.data.f22vm.powerdev\n  # ========\n  # captured on: Thu Nov 24 12:40:38 2016\n  # hostname : pdev-f22-qemu\n  # os release : 4.4.10-200.fc22.ppc64\n  # perf version : 4.9.rc1.g6298ce\n  # arch : ppc64\n  # nrcpus online : 48\n  # nrcpus avail : 48\n  # cpudesc : POWER7 (architected), altivec supported\n  # cpuid : 74,513\n  # total memory : 4158976 kB\n  # cmdline : /home/ravi/Workspace/linux/tools/perf/perf record -a\n  # event : name = cycles:ppp, , size = 112, { sample_period, sample_freq } = 4000, sample_type = IP|TID|TIME|CPU|PERIOD, disabled = 1, inherit = 1, mmap = 1, c\n  # HEADER_CPU_TOPOLOGY info available, use -I to display\n  # HEADER_NUMA_TOPOLOGY info available, use -I to display\n  # pmu mappings: cpu = 4, software = 1, tracepoint = 2, breakpoint = 5\n  # missing features: HEADER_TRACING_DATA HEADER_BRANCH_STACK HEADER_GROUP_DESC HEADER_AUXTRACE HEADER_STAT HEADER_CACHE\n  # ========\n  #\n  [acme@jouet ravi_bangoria]$\n\nSuggested-by: Michael Ellerman <mpe@ellerman.id.au>\nSigned-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>\nTested-by: Arnaldo Carvalho de Melo <acme@redhat.com>\nCc: Alexander Shishkin <alexander.shishkin@linux.intel.com>\nCc: Chris Riyder <chris.ryder@arm.com>\nCc: Kim Phillips <kim.phillips@arm.com>\nCc: Markus Trippelsdorf <markus@trippelsdorf.de>\nCc: Masami Hiramatsu <mhiramat@kernel.org>\nCc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>\nCc: Peter Zijlstra <peterz@infradead.org>\nCc: Taeung Song <treeze.taeung@gmail.com>\nCc: linuxppc-dev@lists.ozlabs.org\nLink: http://lkml.kernel.org/r/1480953407-7605-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com\nSigned-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/bec60e50af83741cde1786ab475d4bf472aed6f9"},{"sha":"1c0d32fde5bdf1184bc274f864c09799278a1114","author":{"name":"Eric Dumazet","email":"b3d77ad2db30f558882cc0c038be5a3cf96611f9@google.com"},"message":"net_sched: gen_estimator: complete rewrite of rate estimators\n\n1) Old code was hard to maintain, due to complex lock chains.\n   (We probably will be able to remove some kfree_rcu() in callers)\n\n2) Using a single timer to update all estimators does not scale.\n\n3) Code was buggy on 32bit kernel (WRITE_ONCE() on 64bit quantity\n   is not supposed to work well)\n\nIn this rewrite :\n\n- I removed the RB tree that had to be scanned in\n  gen_estimator_active(). qdisc dumps should be much faster.\n\n- Each estimator has its own timer.\n\n- Estimations are maintained in net_rate_estimator structure,\n  instead of dirtying the qdisc. Minor, but part of the simplification.\n\n- Reading the estimator uses RCU and a seqcount to provide proper\n  support for 32bit kernels.\n\n- We reduce memory need when estimators are not used, since\n  we store a pointer, instead of the bytes/packets counters.\n\n- xt_rateest_mt() no longer has to grab a spinlock.\n  (In the future, xt_rateest_tg() could be switched to per cpu counters)\n\nSigned-off-by: Eric Dumazet <edumazet@google.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/1c0d32fde5bdf1184bc274f864c09799278a1114"},{"sha":"abf7e53e9e6bbd2aa23a6d46bd74cb5dc1b7f564","author":{"name":"Florian Fainelli","email":"244da8ca84c0b82369d8dd3f15015e61f28f6fe5@gmail.com"},"message":"net: ethoc: Account for duplex changes\n\nethoc_mdio_poll() which is our PHYLIB adjust_link callback does nothing,\nwe should at least react to duplex changes and change MODER accordingly.\nSpeed changes is not a problem, since the OpenCores Ethernet core seems\nto be reacting okay without us telling it.\n\nSigned-off-by: Florian Fainelli <f.fainelli@gmail.com>\nReviewed-by: Tobias Klauser <tklauser@distanz.ch>\nAcked-by: Thierry Reding <thierry.reding@gmail.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/abf7e53e9e6bbd2aa23a6d46bd74cb5dc1b7f564"},{"sha":"b34296a9c047504e2020fb4ce2f66f57bd5454a8","author":{"name":"Florian Fainelli","email":"244da8ca84c0b82369d8dd3f15015e61f28f6fe5@gmail.com"},"message":"net: ethoc: Utilize of_get_mac_address()\n\nDo not open code getting the MAC address exclusively from the\n\"local-mac-address\" property, but instead use of_get_mac_address() which\nlooks up the MAC address using the 3 typical property names.\n\nSigned-off-by: Florian Fainelli <f.fainelli@gmail.com>\nReviewed-by: Tobias Klauser <tklauser@distanz.ch>\nAcked-by: Thierry Reding <thierry.reding@gmail.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/b34296a9c047504e2020fb4ce2f66f57bd5454a8"},{"sha":"38b4bc207795339084ab41a2d9fa1add5cfd97d0","author":{"name":"Florian Fainelli","email":"244da8ca84c0b82369d8dd3f15015e61f28f6fe5@gmail.com"},"message":"net: ethoc: Demote packet dropped error message to debug\n\nSpamming the console with: net eth1: packet dropped can happen\nfairly frequently if the adapter is busy transmitting, demote the\nmessage to a debug print.\n\nSigned-off-by: Florian Fainelli <f.fainelli@gmail.com>\nReviewed-by: Tobias Klauser <tklauser@distanz.ch>\nAcked-by: Thierry Reding <thierry.reding@gmail.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/38b4bc207795339084ab41a2d9fa1add5cfd97d0"},{"sha":"70f23a807dcab4ee3467c70ba2c7be69026f0a67","author":{"name":"David S. Miller","email":"79caf591e37e1438a2d55ae59670d5cd0d717764@davemloft.net"},"message":"Merge branch 'ethoc-next'\n\nFlorian Fainelli says:\n\n====================\nnet: ethoc: Misc improvements\n\nThis patch series fixes/improves a few things:\n\n- implement a proper PHYLIB adjust_link callback to set the duplex mode\n  accordingly\n- do not open code the fetching of a MAC address in OF/DT environments\n- demote an error message that occurs more frequently than expected in low\n  CPU/memory/bandwidth environments\n\nTested on a Cirrus Logic EP93xx / TS7300 board.\n====================\n\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/70f23a807dcab4ee3467c70ba2c7be69026f0a67"},{"sha":"1afaf661b20a075a22eef3332db187001a334b81","author":{"name":"Daniel Borkmann","email":"4b94a04674ad2c69d990e94ab196ac3f8e9e03d4@iogearbox.net"},"message":"bpf: remove type arg from __is_valid_{,xdp_}access\n\nCommit d691f9e8d440 (\"bpf: allow programs to write to certain skb\nfields\") pushed access type check outside of __is_valid_access()\nto have different restrictions for socket filters and tc programs.\ntype is thus not used anymore within __is_valid_access() and should\nbe removed as a function argument. Same for __is_valid_xdp_access()\nintroduced by 6a773a15a1e8 (\"bpf: add XDP prog type for early driver\nfilter\").\n\nSigned-off-by: Daniel Borkmann <daniel@iogearbox.net>\nAcked-by: Alexei Starovoitov <ast@kernel.org>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/1afaf661b20a075a22eef3332db187001a334b81"},{"sha":"8d829bdb97dc3a0c9c8090b9b168ca46ea99c8d8","author":{"name":"Daniel Borkmann","email":"4b94a04674ad2c69d990e94ab196ac3f8e9e03d4@iogearbox.net"},"message":"bpf, cls: consolidate prog deletion path\n\nCommit 18cdb37ebf4c (\"net: sched: do not use tcf_proto 'tp' argument from\ncall_rcu\") removed the last usage of tp from cls_bpf_delete_prog(), so also\nremove it from the function as argument to not give a wrong impression. tp\nis illegal to access from this callback, since it could already have been\nfreed.\n\nRefactor the deletion code a bit, so that cls_bpf_destroy() can call into\nthe same code for prog deletion as cls_bpf_delete() op, instead of having\nit unnecessarily duplicated.\n\nSigned-off-by: Daniel Borkmann <daniel@iogearbox.net>\nAcked-by: Alexei Starovoitov <ast@kernel.org>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/8d829bdb97dc3a0c9c8090b9b168ca46ea99c8d8"},{"sha":"7bd509e311f408f7a5132fcdde2069af65fa05ae","author":{"name":"Daniel Borkmann","email":"4b94a04674ad2c69d990e94ab196ac3f8e9e03d4@iogearbox.net"},"message":"bpf: add prog_digest and expose it via fdinfo/netlink\n\nWhen loading a BPF program via bpf(2), calculate the digest over\nthe program's instruction stream and store it in struct bpf_prog's\ndigest member. This is done at a point in time before any instructions\nare rewritten by the verifier. Any unstable map file descriptor\nnumber part of the imm field will be zeroed for the hash.\n\nfdinfo example output for progs:\n\n  # cat /proc/1590/fdinfo/5\n  pos:          0\n  flags:        02000002\n  mnt_id:       11\n  prog_type:    1\n  prog_jited:   1\n  prog_digest:  b27e8b06da22707513aa97363dfb11c7c3675d28\n  memlock:      4096\n\nWhen programs are pinned and retrieved by an ELF loader, the loader\ncan check the program's digest through fdinfo and compare it against\none that was generated over the ELF file's program section to see\nif the program needs to be reloaded. Furthermore, this can also be\nexposed through other means such as netlink in case of a tc cls/act\ndump (or xdp in future), but also through tracepoints or other\nfacilities to identify the program. Other than that, the digest can\nalso serve as a base name for the work in progress kallsyms support\nof programs. The digest doesn't depend/select the crypto layer, since\nwe need to keep dependencies to a minimum. iproute2 will get support\nfor this facility.\n\nSigned-off-by: Daniel Borkmann <daniel@iogearbox.net>\nAcked-by: Alexei Starovoitov <ast@kernel.org>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/7bd509e311f408f7a5132fcdde2069af65fa05ae"},{"sha":"5397b31bce5febe1ae2e3dd30e137c560b7b9253","author":{"name":"David S. Miller","email":"79caf591e37e1438a2d55ae59670d5cd0d717764@davemloft.net"},"message":"Merge branch 'bpf-prog-digest'\n\nDaniel Borkmann says:\n\n====================\nMinor BPF cleanups and digest\n\nFirst two patches are minor cleanups, and the third one adds\na prog digest. For details, please see individual patches.\nAfter this one, I have a set with tracepoint support that makes\nuse of this facility as well.\n====================\n\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/5397b31bce5febe1ae2e3dd30e137c560b7b9253"},{"sha":"b0da4f743db522e006de5c8a1956b600872e6979","author":{"name":"Philippe Reynes","email":"00fa7bc76f4754a9e4237e29b9f9734df39b1276@gmail.com"},"message":"net: calxeda: xgmac: use new api ethtool_{get|set}_link_ksettings\n\nThe ethtool api {get|set}_settings is deprecated.\nWe move this driver to new api {get|set}_link_ksettings.\n\nSigned-off-by: Philippe Reynes <tremyfr@gmail.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/b0da4f743db522e006de5c8a1956b600872e6979"},{"sha":"c823abac17926767fb50175e098f087a6ac684c3","author":{"name":"Florian Fainelli","email":"244da8ca84c0b82369d8dd3f15015e61f28f6fe5@gmail.com"},"message":"net: ep93xx_eth: Do not crash unloading module\n\nWhen we unload the ep93xx_eth, whether we have opened the network\ninterface or not, we will either hit a kernel paging request error, or a\nsimple NULL pointer de-reference because:\n\n- if ep93xx_open has been called, we have created a valid DMA mapping\n  for ep->descs, when we call ep93xx_stop, we also call\n  ep93xx_free_buffers, ep->descs now has a stale value\n\n- if ep93xx_open has not been called, we have a NULL pointer for\n  ep->descs, so performing any operation against that address just won't\n  work\n\nFix this by adding a NULL pointer check for ep->descs which means that\nep93xx_free_buffers() was able to successfully tear down the descriptors\nand free the DMA cookie as well.\n\nFixes: 1d22e05df818 (\"[PATCH] Cirrus Logic ep93xx ethernet driver\")\nSigned-off-by: Florian Fainelli <f.fainelli@gmail.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/c823abac17926767fb50175e098f087a6ac684c3"},{"sha":"aad800403a8761073511abb93075738302983956","author":{"name":"Lukas Wunner","email":"7725246d78edfda814c85745e312e58ff7befafc@wunner.de"},"message":"Documentation/core-api/device_link: Add initial documentation\n\nDocument device links as introduced in v4.10 with commits:\n    4bdb35506b89 (\"driver core: Add a wrapper around\n                   __device_release_driver()\")\n    9ed9895370ae (\"driver core: Functional dependencies tracking\n                   support\")\n    8c73b4288496 (\"PM / sleep: Make async suspend/resume of devices use\n                   device links\")\n    21d5c57b3726 (\"PM / runtime: Use device links\")\n    baa8809f6097 (\"PM / runtime: Optimize the use of device links\")\n\nSigned-off-by: Lukas Wunner <lukas@wunner.de>\n[ jc: Moved from core-api to driver-api ]\nSigned-off-by: Jonathan Corbet <corbet@lwn.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/aad800403a8761073511abb93075738302983956"},{"sha":"20b786eb2598ac10c9743535b65611ce808c8d71","author":{"name":"Kevin Peng","email":"62e27e1d75cd8f1acc5c2ebfac3fd375bc7e7a1a@gmail.com"},"message":"Docs: change sh -> awk in REPORTING-BUGS\n\nscripts/ver_linux has been rewritten as an awk script; update\ndocumentation to reflect this fact.\n\nSigned-off-by: Kevin Peng <kkpengboy@gmail.com>\nSigned-off-by: Jonathan Corbet <corbet@lwn.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/20b786eb2598ac10c9743535b65611ce808c8d71"},{"sha":"f15c323397f87b978f4057eb1462efcbf487493a","author":{"name":"Mauro Carvalho Chehab","email":"ea19850a825a0b2eb1de0168fb2a06f5170bd9e2@s-opensource.com"},"message":"scripts: add a script to check if Documentation/00-INDEX is sane\n\nIt is easy to forget adding/removing entries at the\nDocumentation/00-INDEX file. In a matter of fact, even before\nReST conversion, people use to forget adding things here, as\nthere are lots of missing stuff out there.\n\nNow that we're doing a hard work converting entries to ReST,\nand while this hole file is not outdated, it is good to have\nsome tool that would help to verify that this file is kept\nupdated.\n\nSigned-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>\nSigned-off-by: Jonathan Corbet <corbet@lwn.net>","distinct":true,"url":"https://api.github.com/repos/clemensg/linux/commits/f15c323397f87b978f4057eb1462efcbf487493a"}]}
{"actor":{"display_login":"clemensg"}}