summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering
Commit message (Collapse)AuthorAgeFilesLines
...
* Add CSS cursor ring definitionsCary Clark2010-07-303-0/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows web pages to have fine-grain control over the appearance of the rings drawn around nodes. Generated links (email, addresses, phone numbers) are no longer given unique colors. To preserve this feature, a separate change could add an HTML extension similar to vlink to provide the cursor ring defintions for theses links. The mechanism implemented below isn't appropriate since these links don't necessarily correspond to single DOM nodes or other DOM elements. ------------ CSS examples ------------ The CSS to specify the ring looks like: -webkit-ring-fill-color:rgba(0,0,255,0.4); -webkit-ring-inner-width:2 px; -webkit-ring-outer-width:3.5 px; -webkit-ring-outset: 8 px; -webkit-ring-pressed-inner-color:rgba(0,0,255,0.8); -webkit-ring-pressed-outer-color:rgba(0,0,127,0.3); -webkit-ring-radius: 10 px; -webkit-ring-selected-inner-color:rgba(63,63,255,0.8); -webkit-ring-selected-outer-color:rgba(63,63,127,0.3); and may be alternately defined with a property shortcut: -webkit-ring:rgba(255,0,0,0.4) 5px 7px rgba(255,0,0,0.8) rgba(127,0,0,0.3) 20px rgba(255,63,63,0.8) rgba(127,63,63,0.3); -------------------- Property definitions -------------------- A vertical cross-section of the ring corresponds to these parameters as shown: ______ R / ___O_ R = corner radius / / __I_ o I = inner ring / / / _O_ ^ O = outer ring | | | / F | F = fill |O|I|O| L o = outset | | | \_F_ | L = original link \ \ \__O_ V \ \___I_ o R \____O_ The fill color specifies what to draw inside the ring when the link is followed. The fill area consists of the original link area the outset. The inner and outer widths specify the stoke width of the inner and outer rings, respectively. The widths may be specified in fractional pixels. The implementation captures 4 bits of the fraction. The outset specifies the distance from the edge of the original link to the rings' center. Both rings are drawn at the same center location. The radius specifies the curvature of the corners at the center of the rings. ------------- Data lifetime ------------- The selected colors specify the colors of the inner and outer rings when the trackball or D-pad hovers over the link. The pressed colors specify the colors of the rings when the trackball center is pressed or the link is tapped. The CSS data is recorded in the RenderStyle when the DOM is parsed. The widths are scaled up by 16 to preserve the fraction. When the nav cache is built, the CSS style information is recorded in the CachedColor class. Only unique style sets are recorded; many CachedNode instances can share the same CachedColor instance. When the cursor ring is drawn, the CachedColor is retrieved by getting the index from the CachedNode, and looking up the entry in the CachedFrame. The widths are scaled down by 16 since Lengths are stored by the webkit as integers. ---------- File Edits ---------- WebCore/Android.derived.mk - Build the CSS data property tables by concatentating Android specific data and optionally SVG data. WebCore/config.h - Add switch for these rings. This switch is meant as a convenience for finding the code in WebKit that was added to enable this feature. Since the old code in DrawCursor has been removed, it does not revert to the old behavior if the switch is turned off. WebCore/css/AndroidCSSPropertyNames.in - The new ring properties, plus an old one we added before. WebCore/css/CSSComputedStyleDeclaration.cpp WebCore/css/CSSMutableStyleDeclaration.cpp WebCore/css/CSSParser.cpp WebCore/css/CSSStyleSelector.cpp - I can guess what these functions are for as well as anyone, but I really don't know. Do I need all of them? Do I need to modify Mutable at all? WebCore/css/CSSPropertyNames.in - Moved Android addition to AndroidCSSPropertyNames.in WebCore/platform/graphics/Color.h - Added initial color values here. WebCore/platform/graphics/android/android_graphics.* - This draws the cursor ring. The code that draws 'synthetic' links has been discarded. WebCore/rendering/style/RenderStyle.h - Functions to get, set, and initialize the style data. WebCore/rendering/style/StyleRareInheritedData.* - The storage for the style data and an equivalence function. WebKit/Android.mk - Added CachedColor to the build. WebKit/android/nav/CacheBuilder.cpp - Record the color from the DOM into the cache. WebKit/android/nav/CachedColor.* - Store the cached color info. WebKit/android/nav/CachedFrame.* - Where the array of colors is stored. WebKit/android/nav/CachedNode.* - Where the index to the colors is stored. Change-Id: Ia3a931f41d6545e47678e245aafe7c84d4658f94 http://b/2603197
* Merge Webkit at r63859 : New code in SVGResourceContainer is missing an include.Ben Murdoch2010-07-271-0/+1
| | | | | | This is a cherry pick of http://trac.webkit.org/changeset/64007 to fix the build. Change-Id: Ic86639eb7dbcd09f0273f614537354bfa7fd369d
* Merge WebKit at r63859 : Initial merge by git.Ben Murdoch2010-07-2750-272/+725
| | | | Change-Id: Ie8096c63ec7c991c9a9cba8bdd9c3b74a3b8ed62
* Add node check to prevent crash.Shimeng (Simon) Wang2010-07-261-1/+1
| | | | | issue: 2870827 Change-Id: I49f9a83fd7cd79100d7d8b0833db7d9f03c7e4f8
* Fix page cycler crashes.Patrick Scott2010-07-232-8/+10
| | | | | Bug: 2862822 Change-Id: I9de300517eaa2bd4027608d6bae093bf5a1072e0
* Enable scrollable divs.Patrick Scott2010-07-223-0/+81
| | | | | | | | | | | | | | Force a composite layer when the style says the content is scrollable. Record the border and background in the main content picture. When the contents of the layer are bigger than the size, record the foreground contents in a separate picture which is clipped by the border and size. When updating the base layer, remember the scroll position of each layer and update the new layer with the same position. Bug: 1566791 Change-Id: If440e4f215db6bda9df32a781d754d1f5a238162
* Merge WebKit at r63173 : Initial merge by git.Leon Clarke2010-07-2044-253/+511
| | | | Change-Id: Ife5af0c7c6261fbbc8ae6bc08c390efa9ef10b44
* Fix issue: 2741016 and refactor visible width logic in android layout.Shimeng (Simon) Wang2010-07-129-62/+45
| | | | | | | | | | | The site is not reflowed, because for some RenderBlock, the m_visibleWidth is set twice before layout; the current logic will think the visibleWidth is not changed, hence no relayout children and no reflow. The logic is refactored to to make it modularlized. issue: 2741016 Change-Id: I1f433e263add974c0981c332ad4ea092ddb395e0
* Merge WebKit at r62496: Initial merge by gitSteve Block2010-07-09104-885/+1798
| | | | Change-Id: Ie3da0770eca22a70a632e3571f31cfabc80facb2
* Enable composite layers for the sub frame.Grace Kloba2010-07-071-17/+4
| | | | | | | | | | | | | | | | | | | | | Fix the visibleContentRect for iframe. It should be relative to its parent instead of the viewport. For fixed position, we still check for the top frame as the current logic positions the object relative to the screen which only applied to the top frame. For plugin, it depends on PluginWidget's platformLayer(). The default is 0. For video, it depends on MediaPlayer's supportsAcceleratedRendering(). The default is false. Fix the crash in the GraphicsLayerAndroid. The root layer is a container layer, there is no need to draw them. As LayerAndroid doesn't create Picture for them, we should ensure to skip draw. Fix http://b/issue?id=2733947
* Merge WebKit at r61871: Initial merge by git.Kristian Monsen2010-07-0287-2491/+3022
| | | | Change-Id: I6cff43abca9cc4782e088a469ad4f03f166a65d5
* Fix for b/2786464Ben Murdoch2010-06-221-2/+3
| | | | | | | | Some renderobjects are "anonymous", i.e. have the document node associated with them and in this case the node() function returns null. We were then using the null RefPtr, hence the crash. RenderListMarker is an example of such an anonymous node which is why websites that use lists exposed the crash. Change-Id: I1a5527c42d99bbe8418b0e7bce4f3c245276e058
* Fix layout test crash: fast/replaced/frame-removed-during-resize.htmlBen Murdoch2010-06-181-0/+15
| | | | | | Fix b/2780565 Change-Id: I4956206dfbfaebd44414adaea7ab80e2c2fd4d1b
* Merge webkit.org at r61121: Fix build break introduced by r60689. This needs ↵Ben Murdoch2010-06-181-1/+0
| | | | | | | | to be upstreamed. See http://trac.webkit.org/changeset/60689 Upstreaming being tracked in https://bugs.webkit.org/show_bug.cgi?id=40822 Change-Id: I825e3f3ff7be9b48c4a5ad9e11d2bfbdef6ad29e
* Merge webkit.org at r61121: Initial merge by git.Ben Murdoch2010-06-1673-431/+1135
| | | | Change-Id: Icd6db395c62285be384d137164d95d7466c98760
* Merge webkit.org at r60469 : Initial merge by git.Leon Clarke2010-06-0827-358/+864
| | | | Change-Id: I66a0047aa2af802f66bb0c7f2a8b02247a596234
* Code clean up, http://b/issue?id=2724743Grace Kloba2010-05-286-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | Change Widget:screenWidth() to Widget:textWrapWidth() as the text wrap width may be different than the screen width after pinch zoom. Change AndroidWebHistoryBridge's m_screenWidthScale to m_textWrapScale to reflect its meaning. Remove unused screenWidth/screenHeight in PlatformBridge. Merge two restore methods to one. There is a matching CL in framework/base. Only setUseFixedLayout if layout width is different than screen width. Change from Node* to Ref<Node> to avoid a crash. Fix http://b/issue?id=2660396
* Merge WebKit at r60074: Fix conflictsSteve Block2010-05-273-101/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | DeviceOrientation - WebCore/Android.derived.jscbindings.mk - WebCore/Android.derived.v8bindings.mk - WebCore/page/Page.cpp Trivial - WebCore/css/CSSParser.cpp - WebCore/page/Settings.cpp - WebCore/page/Settings.h - WebCore/rendering/style/RenderStyle.h Code deletion - See http://trac.webkit.org/changeset/59749 - WebCore/html/HTMLTokenizer.cpp PluginView JSC guards uspstreaming - WebCore/plugins/PluginView.cpp - WebCore/plugins/PluginView.h Refactoring, see http://trac.webkit.org/changeset/59784 - WebCore/rendering/RenderLayer.cpp RenderBlock::columnGap() and columnRects() are now public, see http://trac.webkit.org/changeset/59784 - WebCore/rendering/RenderBlock.h Change-Id: I409c68d334d60c3854b4b0365c18e6f63884afa6
* Merge WebKit at r60074: Initial merge by gitSteve Block2010-05-2756-311/+731
| | | | Change-Id: I18a2dc5439e36c928351ea829d8fb4e39b062fc7
* Merge WebKit at r59636: Initial merge by gitKristian Monsen2010-05-2571-1201/+1770
| | | | Change-Id: I59b289c4e6b18425f06ce41cc9d34c522515de91
* Merge "First draft to add a fat point to WebKit hit test."Grace Kloba2010-05-2414-0/+312
|\
| * First draft to add a fat point to WebKit hit test.Grace Kloba2010-05-2414-0/+312
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If padding is 0, it is the old style point hit test. If it finds a node, it will break the search loop and return. If padding is non-zero, the first node will be added to HitTestResult's innerNode as before. But instead of finishing the search, hit test will continue to look for other nodes covered by the fat point unless it is fully inside the current node. Here are some highlights of the changes. . instead of testing renderRect.contains(x, y), we now test renderRect.intersect(pointRect) . when a Node is hit, it will be appended to the rawNodeList of HitTestResult. So the order inside the rawNodeList represents the hit test order. Currently the fat point doesn't support SVG nodes. It also doesn't support overflow control yet.
* | Fix the infinite loop when flatten iframes.Patrick Scott2010-05-201-9/+3
|/ | | | | | | | Somehow javascript can cause a layout of the parent renderer in the middle of the FrameView's layout. Bug: 2614175 Change-Id: I37ed3d2e88de1762715e0d0712549d8fab0f12d2
* Merge Webkit at r58956: SVGPaintServer has been deleted upstream and ↵Ben Murdoch2010-05-141-2/+2
| | | | | | | | | | | replaced with SVGResourceSolidColor.cpp. We had local modifications in the deleted file to correctly guard some Chromium/Skia includes we don't have on Android, so move the guards into the new file. See http://trac.webkit.org/changeset/58212 See http://trac.webkit.org/changeset/588212 Change-Id: I8e7e9ea39009019f7caefd68d99942be77ea602d
* Merge Webkit at r58956: Fix conflicts.Ben Murdoch2010-05-141-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix conflict: JavaScriptCore/wtf/MathExtras.h: Take theirs due to recently upstreamed change http://trac.webkit.org/changeset/58110 Fix conflict: WebCore/dom/Node.cpp: Take both. The Android part can be removed post-merge. Fix conflict: WebCore/platform/ScrollView.cpp Fix conflict: WebCore/platform/ScrollView.h Fix conflict: WebCore/platform/android/ScrollViewAndroid.cpp: Remove ScrollView::platformProhibitsScrolling and ScrollView::scrollRectIntoViewRecursively as they have been removed upstream in http://trac.webkit.org/changeset/58428, http://trac.webkit.org/changeset/58445 and http://trac.webkit.org/changeset/58611. platformProhibitsScrolling was an Android specific function called only from scrollRectIntoViewRecursively. Fix conflict: WebCore/bindings/v8/ScriptCallStack.cpp: Take both (we have an Android specific addition). Fix conflict: WebCore/html/HTMLOptionElement.cpp: Take theirs, our fix has been upstreamed in http://trac.webkit.org/changeset/58490. Fix conflict: WebCore/rendering/RenderBox.cpp: Take theirs. See http://trac.webkit.org/changeset/58177 Fix conflict: WebCore/css/CSSStyleSelector.cpp Take both (Android specific addition). Fix conflict: WebCore/css/CSSParser.cpp Take both (Android specific addition). Fix conflict: WebCore/bridge/jni/jni_jsobject.h: Take theirs. see http://trac.webkit.org/changeset/58775 Fix conflict: FileSystemAndroid.cpp: Fix conflict: FileSystemPOSIX.cpp: Take ours. Our changes have been upstreamed but beyond 58596. See http://trac.webkit.org/changeset/59226 Change-Id: I92c7e319bea9edcc2eb08726654b5c1e163effaf
* Merge Webkit at r58956: Initial merge by Git.Ben Murdoch2010-05-14101-2565/+3123
| | | | Change-Id: I1d9fb60ea2c3f2ddc04c17a871acdb39353be228
* Merge webkit.org at r58033 : Move Android iframe-flattening code to ↵Steve Block2010-05-119-301/+148
| | | | | | | | | | | | | | | | | | | RenderIFrame.cpp The Android iframe-flattening code was in RenderPartObject. The rendering classes have been refactored upstream in http://trac.webkit.org/changeset/57866 so that most of RenderPartObject was moved to RenderIFrame. RenderPartObject was then removed in http://trac.webkit.org/changeset/57900. Iframe-flattening was also added upstream in http://trac.webkit.org/changeset/56718. This change takes the Android iframe-flattening code from RenderPartObject and moves it to RenderIFrame. It also renames FLATTEN_IFRAME to ANDROID_FLATTEN_IFRAME and FLATTEN_FRAMESET to ANDROID_FLATTEN_FRAMESET for clarity. Change-Id: I1af8d042f8d0c4abd513f8a315ac681360c1cc53
* Merge webkit.org at r58033 : Resolve merge conflictsSteve Block2010-05-113-81/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - CanvasRenderingContext2D.cpp - Take upstream, conflict due to cherry-pick of security fix, see 285b474734e82bc42b25e48ea4824f8050badb4f - CanvasSurface.cpp, HTMLCanvasElement.cpp - convertLogicalToDevice has been refactored. See http://trac.webkit.org/changeset/56447 - Chrome.cpp/h, ChromeClient.h - Take upstream, conflict due to cherry-pick of cancelling Geolocation permission request - Document.h - Take both, conflicts due to ANDROID_META_SUPPORT - DragImage.h - Take both, conflict due to Android addition - EmptyClients.h - Take upstream, conflicts due to Geo cancel permission request - EventHandler.cpp - Take both, conflicts due to recently upstreamed touch events and ANDROID_PLUGINS - EventHandler.cpp - Keep ours, conflict due to touch event bug fixes not yet upstreamed. See 7f034a1734d634dd1fdb3b64817d5828b5e46922 and 73adc26dba4be1d9da34a7f0907cb7b12f10c909 - FileSystemPOSIX - Take both, conflict due to ANDROID_PLUGINS - FrameLoader.cpp - Take both, conflct due to ANDROID_BLOCK_NETWORK_IMAGE - FrameView.cpp - Take both, conflict due to Android frame flattening - Geolocation.h - Merge conflicts due to Android-specific changes - Geolocation.cpp - Take upstream, conflict due to addition of Geolocation maximumAge - GeolocationPositionCache.cpp - Take upstream, conflict due to addition of ENABLE_GEOLOCATION guards - Gradient.h - Take both, conflict due to Android addition - HTMLLinkElement.cpp, DocLoader.cpp - Take both, conflict due to new link prefetching not yet upstreamed. See f91ac8eab3399adb5325701bebe0590a77e49df7 - HTMLMetaElement.cpp - Take both, conflict due to recently upstreamed meta element - JavaInstanceJSC.cpp - Take both, conflict due to Android additional logging - MediaPlayer.cpp/h - Take both, conflict due to Android-specific change - PlatformTouchPoint.h - Take upstream, conflict due to recently upstreamed unsigned stuff - RenderFrame.cpp, RenderFrameSet.h - Take both, conflict due to Android frameset flattening - RenderLayerCompositor.cpp - Take both, conflicts due to Android layers code - Settings.cpp/h - Conflict due to ANDROID_PLUGINS - TextInputController.h - Take upstream, git got confused - V8DOMWindowShell.cpp - Take upstream, conflict due to cherry-pick of method to add V8 bindings for page cache, see 8fecd9c9a62aa89fb44ed3142ba583dc7b8cbe29 - V8DOMWraper.cpp - Take upstream, conflict due to recently upstreamed WORKERS guards - WebCore.xcodeproj - Take upstream, conflict due to addition of Geolocation maximumAge - Widget.h - Take both, conflict due to Android addition - jsc/JNIUtilityPrivate.cpp - Take upstream, conflict due to switching from bzero to memset - mac/WebCoreSupport/WebChromeCient.h - Take upstream, conflicts due to Geo cancel permission request Change-Id: I1b75eac220faddf2f84c7fd4fd3436a5e07edf64
* Merge webkit.org at r58033 : Initial merge by gitSteve Block2010-05-11134-1890/+4457
| | | | Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
* Merge webkit.org at r55033 : Initial merge by gitSteve Block2010-04-2758-373/+993
| | | | Change-Id: I98a4af828067cc243ec3dc5e5826154dd88074b5
* Revert previous CL due to side-effect.Nicolas Roard2010-04-151-10/+3
| | | | | | Bug:2600918 Change-Id: I72189bd2edf725b4f0db426d2735590e846dcba4
* am f635101c: am 233b1e5a: am 54070f49: Merge "Make sure to layout the view ↵Patrick Scott2010-04-151-0/+4
|\ | | | | | | with the final dimensions." into froyo
| * am 54070f49: Merge "Make sure to layout the view with the final dimensions." ↵Patrick Scott2010-04-141-0/+4
| |\ | | | | | | | | | | | | | | | | | | | | | | | | into froyo Merge commit '54070f490711d3ec763c006c9b84adf55d32f0a2' into froyo-plus-aosp * commit '54070f490711d3ec763c006c9b84adf55d32f0a2': Make sure to layout the view with the final dimensions.
| | * Make sure to layout the view with the final dimensions.Patrick Scott2010-04-141-0/+4
| | | | | | | | | | | | | | | Bug: 2532684 Change-Id: I6500fc08760f8dbc99d1d279e6beca7bdb3345c9
* | | am 02069cf9: am 5e9b4f88: Merge "When handling Fixed position, always ↵Grace Kloba2010-04-061-0/+27
|\ \ \ | |/ / | | | | | | relative to the top document." into froyo
| * | am 5e9b4f88: Merge "When handling Fixed position, always relative to the top ↵Grace Kloba2010-04-061-0/+27
| |\ \ | | |/ | | | | | | | | | | | | | | | | | | | | | document." into froyo Merge commit '5e9b4f88ec0abb578823e8225ad9614c1ba58c6b' into froyo-plus-aosp * commit '5e9b4f88ec0abb578823e8225ad9614c1ba58c6b': When handling Fixed position, always relative to
| | * When handling Fixed position, always relative toGrace Kloba2010-04-061-0/+27
| | | | | | | | | | | | | | | the top document. Fix http://b/issue?id=2281574
* | | am f39b1b26: merge from open-source masterThe Android Open Source Project2010-04-021-4/+0
|\ \ \ | |/ /
| * | merge from open-source masterThe Android Open Source Project2010-04-021-4/+0
| |\ \ | | |/ | |/| | | | Change-Id: I87473a9657b8906b4933a7e22bf1125a65e44502
| | * Remove old code that was fixed in WebKit r35902Julien Chaffraix2010-03-301-4/+0
| | | | | | | | | | | | | | | | | | | | | This code was based on WebKit r30711 which has now been integrated into Android (this fix was introduced in october 2008). Change-Id: I1faf6e611dfe226771ca8f28ee6a9e0cd80535ae
| | * Revert https://android-git.corp.google.com/g/37444Grace Kloba2010-01-141-5/+2
| | | | | | | | | | | | as https://android-git.corp.google.com/g/37486 is a better fix for http://b/issue?id=2375232
| | * For mobile site, allow text wrap to screen if scaleGrace Kloba2010-01-141-2/+5
| | | | | | | | | | | | | | | is not same as screen width scale. Fix http://b/issue?id=2375232
* | | am 9dbbb4da: On demand plugins are now per-page, not per-object.Patrick Scott2010-04-021-0/+3
|\ \ \ | |/ /
| * | On demand plugins are now per-page, not per-object.Patrick Scott2010-04-021-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Traverse the frame tree and enable all plugins currently on the page. Remember the setting for any future plugins that are created. Reset the setting in makeRepresentation as that seems to be called for all new documents. Bug: 2564543 Change-Id: I558f068992719ee0236ba40f76b918b10cfe0ed9
* | | resolved conflicts for merge of 541a0a9a to masterNicolas Roard2010-03-312-15/+47
|\ \ \ | |/ / | | | | | | Change-Id: Ic2abe87f52744e31098112505bdd14906600fc14
| * | Only allows composited layers if not in iframesNicolas Roard2010-03-302-15/+47
| | | | | | | | | | | | | | | | | | Bug:2498776 and fix Bug:2544493 Change-Id: I0041db690cbe7d80e8e092626a95e882a5afbe03
* | | am 2eba8dcf: Merge "Remove ANDROID_FIXED_ELEMENTS" into froyoNicolas Roard2010-03-301-16/+0
|\ \ \ | |/ /
| * | Remove ANDROID_FIXED_ELEMENTSNicolas Roard2010-03-301-16/+0
| | | | | | | | | | | | | | | | | | Bug:2534420 Change-Id: Ieb93c8888a1d05dece3c817a8847e4f2c22a865a
* | | Add checks to consider a fixed layer for compositing only if itsNicolas Roard2010-03-261-4/+11
|/ / | | | | | | | | | | | | | | dimensions are actually more than zero. Fix Bug:2545160 Change-Id: I08ca0c1f5a6729760dbf62084a96faee76d124f9
* | Only enable composited fixed elements for mobile sites.Nicolas Roard2010-03-221-1/+10
| | | | | | | | | | | | | | | | We can consider a website as being a 'mobile' site if: - the viewport width is either undefined (-1) or equal to device-width (0) - no scaling is allowed Change-Id: Id88257278312077a170eb10d9f666c46bad135b6