aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAge
...
* Revert of remove unused TableMaskFilter (patchset #1 id:1 of ↵Gravatar jcgregorio2016-07-18
| | | | | | | | | | | | | | | | | | | | | | | | | https://codereview.chromium.org/2156463002/ ) Reason for revert: Needed for Android: frameworks/base/core/jni/android/graphics/MaskFilter.cpp:5:10: fatal error: 'SkTableMaskFilter.h' file not found Original issue's description: > remove unused TableMaskFilter > > BUG=skia: > GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2156463002 > > TBR= > > Committed: https://skia.googlesource.com/skia/+/59779ae8ce316bf8b8082ec2df1683ccd38161f1 TBR=reed@google.com # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=skia: Review-Url: https://codereview.chromium.org/2156183002
* In GrShape detect that stroked axis-aligned lines are rrects.Gravatar bsalomon2016-07-18
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2151313002 Review-Url: https://codereview.chromium.org/2151313002
* Test auto mergerGravatar msarett2016-07-18
| | | | | | | | | TBR=djsollen@google.com NOTRY=true BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2158793004 Review-Url: https://codereview.chromium.org/2158793004
* Update SKP versionGravatar update-skps2016-07-17
| | | | | | | | | | Automatic commit by the RecreateSKPs bot. TBR= NO_MERGE_BUILDS GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2157823002 Review-Url: https://codereview.chromium.org/2157823002
* Guard SkMatrix::get*Scale[s]() against negative nearly-zero values.Gravatar kolczyk2016-07-16
| | | | | | | BUG=skia:4718 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2143133005 Review-Url: https://codereview.chromium.org/2143133005
* Revert of Rotate emoji with FreeType. (patchset #5 id:80001 of ↵Gravatar bungeman2016-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://codereview.chromium.org/2139703002/ ) Reason for revert: Causing roll to fail on telemetry_perf_unittests (bencharks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.load:search:taobao (and baidu)) and browser_tests (FindInPageControllerTest.FindInPageSpecialURLS). This is due to triggering the assert in copyFTBitmap SkASSERT(dstMask.fBounds.width() == static_cast<int>(srcFTBitmap.width)); when called from inside the block guarded by if (bitmapTransform.isIdentity()) Original issue's description: > Rotate bitmap strikes with FreeType. > > BUG=skia:3490 > GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2139703002 > > Committed: https://skia.googlesource.com/skia/+/31e0c1379e6d0ce48196183e295b929af51fa74e TBR=mtklein@google.com,reed@google.com # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia:3490 Review-Url: https://codereview.chromium.org/2149253005
* Add support for FuchsiaGravatar abarth2016-07-15
| | | | | | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2152273002 [mtklein edit from here down] No public API changes. TBR=reed@google.com Review-Url: https://codereview.chromium.org/2152273002
* Rotate bitmap strikes with FreeType.Gravatar bungeman2016-07-15
| | | | | | | BUG=skia:3490 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2139703002 Review-Url: https://codereview.chromium.org/2139703002
* move responsibility for creating raster-device into pdfGravatar reed2016-07-15
| | | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146333004 NOTRY=True win failure seems unrelated Review-Url: https://codereview.chromium.org/2146333004
* Speculatively fix Android automergerGravatar msarett2016-07-15
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2155713004 Review-Url: https://codereview.chromium.org/2155713004
* Add capability for SkColorXform to output half floatsGravatar msarett2016-07-15
| | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2147763002 CQ_INCLUDE_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review-Url: https://codereview.chromium.org/2147763002
* Dont allocate a new image which already has mip levels, when regenerating ↵Gravatar egdaniel2016-07-15
| | | | | | | | | vulkan mipmaps BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146063008 Review-Url: https://codereview.chromium.org/2146063008
* SkPdf: smaller color serializationGravatar halcanary2016-07-15
| | | | | | | | | | | | | | SkPDFUtils now has a special function (SkPDFUtils::AppendColorComponent) just for writing out (color/255) as a decimal with three digits of precision. SkPDFUnion now has a type to represent a color component. It holds a utint_8, but calls into AppendColorComponent to serialize. Added a unit test that tests all possible input values. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2151863003 Review-Url: https://codereview.chromium.org/2151863003
* SkPDF: Join Positioned TextGravatar halcanary2016-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When N sequential positioned glyphs differ in positions by exactly the advances of the first (N-1) glyphs, join the glyphs into a string rather than changing the text matrix between each glyph draw. Decreases PDF output size by about ~1.4%. Potentially more on text-heavy pages. A single-typeface PDF of an 27kB ASCII document shaped with harfbuzz: before: 187743 Bytes after: 65513 Bytes difference: -65.1% Before: BT /F0 13 Tf 1 0 0 -1 143.5 61 Tm <0029> Tj 1 0 0 -1 150.634765 61 Tm <004C> Tj 1 0 0 -1 154.602050 61 Tm <0055> Tj 1 0 0 -1 160.245117 61 Tm <0048> Tj 1 0 0 -1 167.925781 61 Tm <004B> Tj 1 0 0 -1 176.469726 61 Tm <0052> Tj 1 0 0 -1 184.518554 61 Tm <0056> Tj 1 0 0 -1 190.980468 61 Tm <0048> Tj ET After: BT /F0 13 Tf 1 0 0 -1 0 0 Tm 143.5 -61 Td <0029004C0055> Tj 16.7451171 0 Td <0048004B005200560048> Tj ET Also: update the Text matrix with the `Td` operator, instead of overwriting it with the the `Tm` operator. In the worst case, when every glyph is positioned differently than it's advance, this still makes the command stream smaller: Before: ... 1 0 0 -1 58.328125 660 Tm <0055> Tj 1 0 0 -1 61.609375 660 Tm <004C> Tj 1 0 0 -1 63.828125 660 Tm <0056> Tj ... After: ... 3.140625 0 Td <0055> Tj 3.28125 0 Td <004C> Tj 2.21875 0 Td <0056> Tj ... GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150393002 Review-Url: https://codereview.chromium.org/2150393002
* SkPDF: Always give a default advance for glyphs.Gravatar halcanary2016-07-15
| | | | | | | | | | Prior to this we assumed the default default was 0. It is actually 1000, according to the spec. fixes BUG=skia:5321 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146403005 Review-Url: https://codereview.chromium.org/2146403005
* Fix broken Android framework build.Gravatar djsollen2016-07-15
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2153953002 Review-Url: https://codereview.chromium.org/2153953002
* Add copy (when needed) to SkGpuDevice::asSpecialGravatar robertphillips2016-07-15
| | | | | | | | split out of https://codereview.chromium.org/2145343005/ (Recast draw_filter_into_device as drawDevice) GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2157513002 Review-Url: https://codereview.chromium.org/2157513002
* Exclude XML and dependencies from Bazel build.Gravatar benjaminwagner2016-07-15
| | | | | | | | | Depends on https://codereview.chromium.org/2150353002 BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2147303004 Review-Url: https://codereview.chromium.org/2147303004
* SkColorSpace::NewICC() warn instead of fail on bad inputGravatar msarett2016-07-15
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2093193002 Review-Url: https://codereview.chromium.org/2093193002
* Make XML compilation conditional.Gravatar fmalita2016-07-15
| | | | | | | | | Only enabled for gyp-based builds at this time. R=dogben@google.com,mtklein@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150353002 Review-Url: https://codereview.chromium.org/2150353002
* remove unused CreateInfo flagGravatar reed2016-07-15
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2153173002 NOTRY=True Review-Url: https://codereview.chromium.org/2153173002
* Convert Win toolchain to CIPD packageGravatar borenet2016-07-15
| | | | | | | BUG=skia:5427 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2111713003 Review-Url: https://codereview.chromium.org/2111713003
* Add SkGpuDevice::asSpecial entry pointGravatar robertphillips2016-07-15
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2151033003 Review-Url: https://codereview.chromium.org/2151033003
* Add a bench to measure the best way to pack from int to uint16_t with SSE.Gravatar mtklein2016-07-15
| | | | | | | | | | | | | | | | | | | | | | | I measured relative runtimes on my laptop: pack_int_uint16_t_ss… 1036 …e41 1x …se3 1.01x …e2_b 3.01x …e2_a 3.02x I've run into Clang problems with the actual _mm_packus_epi32 instruction, I think, so I'm going to exercise a little cowardice and leave that option disabled for now. The ssse3 version probably looks a little faster than it will be in practice. We'll usually need to load its mask, which here is hoisted out of the bench loop. The two sse2 variants are close enough in speed that I'm tie breaking them on other concerns: the <<16, >>16 version doesn't need any scratch registers or to load any constants, so it wins. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150343002 CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot Review-Url: https://codereview.chromium.org/2150343002
* Expand _01 half<->float limitation to _finite. Simplify.Gravatar mtklein2016-07-15
| | | | | | | | | | | | | | | | | | | | | | | It's become clear we need to sometimes deal with values <0 or >1. I'm not yet convinced we care about NaN or +-inf. We had some fairly clever tricks and optimizations here for NEON and SSE. I've thrown them out in favor of a single implementation. If we find the specializations mattered, we can certainly figure out how to extend them to this new range/domain. This happens to add a vectorized float -> half for ARMv7, which was missing from the _01 version. (The SSE strategy was not portable to platforms that flush denorm floats to zero.) I've tested the full float range for FloatToHalf on my desktop and a 5x. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2145663003 CQ_INCLUDE_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot Committed: https://skia.googlesource.com/skia/+/3296bee70d074bb8094b3229dbe12fa016657e90 Review-Url: https://codereview.chromium.org/2145663003
* Add getColorSpace to GrTextureProducerGravatar brianosman2016-07-15
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150113002 Review-Url: https://codereview.chromium.org/2150113002
* Probably no need for GM self-tests now that GM doesn't exist.Gravatar mtklein2016-07-14
| | | | | | | | | This is... belated. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2154603002 Review-Url: https://codereview.chromium.org/2154603002
* Dust-off SkXMLParserGravatar fmalita2016-07-14
| | | | | | | | | | | | Hook up SkXMLParser to Expat, such that it can actually parse, err, XML. Add a trivial unit test. R=robertphillips@google.com,reed@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2142893006 Review-Url: https://codereview.chromium.org/2142893006
* remove unused TableMaskFilterGravatar reed2016-07-14
| | | | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2156463002 TBR= Review-Url: https://codereview.chromium.org/2156463002
* Fix a bug in the Clamp in X direction tiling.Gravatar herb2016-07-14
| | | | | | | | | | The code mixed up which end of the span was cut and preserved in the sequence of span breaks. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2145193002 Review-Url: https://codereview.chromium.org/2145193002
* Remove GrWrapTextureInBitmap call in SkGpuDevice::drawSpriteWithFilterGravatar robertphillips2016-07-14
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146223003 Review-Url: https://codereview.chromium.org/2146223003
* Build Expat on all platformsGravatar fmalita2016-07-14
| | | | | | | | | | | | | | | | | * bump version to @android-6.0.1_r55 (2.1.1) * add as a dependency to the 'xml' target (for upcoming http://crrev.com/2142893006) * tweak build for Mac, Win: - define HAVE_EXPAT_CONFIG_H (same as in Android.mk) - use -Wno-missing-field-initializers (same as in Android.mk) - suppress MSVS warning 4244 (same as ..cmake/Utilities/cmexpat/expatConfig.h.in) GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150603004 R=mtklein@google.com Review-Url: https://codereview.chromium.org/2150603004
* Remove dead flag from SkPictureRecorderGravatar robertphillips2016-07-14
| | | | | | | | With the Chrome CL (https://codereview.chromium.org/2149533003/ (Remove use of unsupported Skia flag)) landed, this should be good to go. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2152943002 Review-Url: https://codereview.chromium.org/2152943002
* Revert of Expand _01 half<->float limitation to _finite. Simplify. ↵Gravatar mtklein2016-07-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (patchset #7 id:120001 of https://codereview.chromium.org/2145663003/ ) Reason for revert: Unit tests fail on Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast Original issue's description: > Expand _01 half<->float limitation to _finite. Simplify. > > It's become clear we need to sometimes deal with values <0 or >1. > I'm not yet convinced we care about NaN or +-inf. > > We had some fairly clever tricks and optimizations here for NEON > and SSE. I've thrown them out in favor of a single implementation. > If we find the specializations mattered, we can certainly figure out > how to extend them to this new range/domain. > > This happens to add a vectorized float -> half for ARMv7, which was > missing from the _01 version. (The SSE strategy was not portable to > platforms that flush denorm floats to zero.) > > I've tested the full float range for FloatToHalf on my desktop and a 5x. > > BUG=skia: > GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2145663003 > CQ_INCLUDE_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot > > Committed: https://skia.googlesource.com/skia/+/3296bee70d074bb8094b3229dbe12fa016657e90 TBR=msarett@google.com,mtklein@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review-Url: https://codereview.chromium.org/2151023003
* Expand _01 half<->float limitation to _finite. Simplify.Gravatar mtklein2016-07-14
| | | | | | | | | | | | | | | | | | | | | | It's become clear we need to sometimes deal with values <0 or >1. I'm not yet convinced we care about NaN or +-inf. We had some fairly clever tricks and optimizations here for NEON and SSE. I've thrown them out in favor of a single implementation. If we find the specializations mattered, we can certainly figure out how to extend them to this new range/domain. This happens to add a vectorized float -> half for ARMv7, which was missing from the _01 version. (The SSE strategy was not portable to platforms that flush denorm floats to zero.) I've tested the full float range for FloatToHalf on my desktop and a 5x. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2145663003 CQ_INCLUDE_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot;master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review-Url: https://codereview.chromium.org/2145663003
* Stop testing texture-backed bitmaps in drawbitmaprect GMGravatar bsalomon2016-07-14
| | | | | | | BUG=skia:5531 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2148793003 Review-Url: https://codereview.chromium.org/2148793003
* Rewrite GrTextureMipMapInvalidationTest using SkImageGravatar bsalomon2016-07-14
| | | | | | | BUG=skia:5531 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2149133002 Review-Url: https://codereview.chromium.org/2149133002
* Added premulFourChannelColor to GrInvariantOutputGravatar dvonbeck2016-07-14
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2148273002 Review-Url: https://codereview.chromium.org/2148273002
* Remove SkGrTexturePixelRef and SkGrRenderTargetPixelRef aliases for SkGrPixelRefGravatar bsalomon2016-07-14
| | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2151873002 Review-Url: https://codereview.chromium.org/2151873002
* Add verb field in scraping scriptsGravatar fmenozzi2016-07-14
| | | | | | | BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150663002 Review-Url: https://codereview.chromium.org/2150663002
* Remove unit test that tests subsetting texture backed bitmaps.Gravatar bsalomon2016-07-14
| | | | | | | BUG=skia:5531 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2143003006 Review-Url: https://codereview.chromium.org/2143003006
* Fix leak when DFPR fails to draw pathGravatar bsalomon2016-07-14
| | | | | | | TBR=jvanverth@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2144283002 Review-Url: https://codereview.chromium.org/2144283002
* GrBufferAllocPool: use _throw calloc() if unchecked.Gravatar mtklein2016-07-14
| | | | | | | | | | | Looks like this code is using sk_calloc(), NULL on failure, accidentally instead of sk_calloc_throw(). We're using sk_malloc_throw() in the parallel code path, so it really seems like we're not checking the result pointer. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2152753002 Review-Url: https://codereview.chromium.org/2152753002
* Remove GrWrapTextureInBitmap from public APIGravatar bsalomon2016-07-13
| | | | | | | BUG=skia:5531 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2147053002 Review-Url: https://codereview.chromium.org/2147053002
* Stop testing texture-backed bitmaps in bleed GMsGravatar bsalomon2016-07-13
| | | | | | | | BUG=skia:5531 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2141973004 Review-Url: https://codereview.chromium.org/2141973004
* Make GrBatchAtlas robust against attempts to add large rects.Gravatar bsalomon2016-07-13
| | | | | | | | | Make GrAADistanceFieldPathRenderer robust against paths that in src space wind up being too large for the atlas. BUG=chromium:627443 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2144663004 Review-Url: https://codereview.chromium.org/2144663004
* Update RT views and framebuffer in vulkan after mipmapingGravatar egdaniel2016-07-13
| | | | | | | | | | | | I've also changed it so all attachment views (texture, color, and resolve) are created separately and not shared with each other. This just added a lot more complexity than we were probably even saving in time. A quick fix to make sure we don't reuse keys in resource tracking also got merged into this change. BUG=skia:5223 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146103002 Review-Url: https://codereview.chromium.org/2146103002
* Add Texture2D and Sampler GrSLTypesGravatar egdaniel2016-07-13
| | | | | | | | | | | | | | | | | | | | | | | | These two new types are in support of Vulkan and the ability to send separate texture and sampler uniforms to the shader. They don't really fit well in the current system, since the current system ties together to idea of intended use and how to emit shader code into the same GrSLType enum. In vulkan, I want the GrGLSLSampler object to be used as a Sampler2D, but when appending its declaration it will emit a Texture2D and sampler object. Our query for GrSLTypeIsSamplerType refers more to the combination of texture and sampler and not just the sampler part. The GrSLTypeIs2DTextureType query is for is a a SamplerType that uses Texture2Ds. My new types don't really fit into either these categories as they are just half of the whole. In some refactoring down the road (possibly connected with SkSL), I suggest we split apart the concept of how we intend to use a GrGLSLSampler (Sampler2D, SamplerBuffer, etc.), from how we actually add it to the code (sampler, texture2D, sampler2D, etc.). BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2143143002 Review-Url: https://codereview.chromium.org/2143143002
* Added the framework for having canvas/recorder/picture record depth_set's.Gravatar vjiaoblack2016-07-13
| | | | | | | | GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2127233002 Committed: https://skia.googlesource.com/skia/+/6d3fb898d5f73a82e36f11c712a633c3921ed518 Committed: https://skia.googlesource.com/skia/+/1185d90c785f743364cc9113d7007a59af07470c Review-Url: https://codereview.chromium.org/2127233002
* Disable aliased font test on iOS.Gravatar bungeman2016-07-13
| | | | | | | | | | | | See if not requesting aliased text fixes iOS. BUG=skia:5530 TBR=mtklein GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2150483003 Review-Url: https://codereview.chromium.org/2150483003