Profiling results ----------------- Total cpu time observed: 9532ms (out of 9704ms) Number of samples taken: 46 (once every 207ms) ======================================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================================== [1] 9532(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [6] 100.0% ---------------------------------------------------------------------------------------- ??? [65] 100.0% [2] 1914(20.1%) 0(0.0%) approximate9 ...ie/master/src/core/taylor.rkt:11:0 loop [7] 79.1% taylor-sqrt [10] 20.9% ---------------------------------------------------------------------------------------- hash-ref! [71] 100.0% [3] 1106(11.6%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:290:26 for-loop [8] 100.0% ---------------------------------------------------------------------------------------- matcher [77] 100.0% [4] 448(4.7%) 0(0.0%) ??? ...s/herbie/master/src/core/matcher.rkt:127:11 for-loop [9] 100.0% ---------------------------------------------------------------------------------------- for-loop [67] 100.0% [5] 200(2.1%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [11] 100.0% ---------------------------------------------------------------------------------------- ??? [1] 100.0% [6] 9532(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [12] 100.0% ---------------------------------------------------------------------------------------- approximate9 [2] 100.0% [7] 1514(15.9%) 0(0.0%) loop ...ies/herbie/master/src/core/taylor.rkt:86:4 ??? [65] 100.0% ---------------------------------------------------------------------------------------- ??? [3] 100.0% [8] 1106(11.6%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:290:52 hash-ref! [71] 90.0% f61 [13] 10.0% ---------------------------------------------------------------------------------------- ??? [4] 100.0% [9] 448(4.7%) 0(0.0%) for-loop ...bie/master/src/core/matcher.rkt:129:15 matcher [77] 100.0% ---------------------------------------------------------------------------------------- approximate9 [2] 100.0% [10] 400(4.2%) 0(0.0%) taylor-sqrt ...ie/master/src/core/taylor.rkt:351:0 hash-ref! [71] 100.0% ---------------------------------------------------------------------------------------- syntax-e [5] 100.0% [11] 200(2.1%) 0(0.0%) syntax-e/no-taint (unknown source) loop [89] 100.0% ---------------------------------------------------------------------------------------- profile-thunk16 [6] 100.0% [12] 9532(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [14] 100.0% ---------------------------------------------------------------------------------------- map [16] 16.1% parse-loop74 [81] 16.1% hash-ref! [71] 32.2% for-loop [8] 35.7% [13] 622(6.5%) 0(0.0%) f61 (unknown source) eval-const-expr [15] 83.9% map [16] 16.1% ---------------------------------------------------------------------------------------- for-loop [72] 5.2% run [12] 94.8% [14] 9532(100.0%) 600(6.3%) .../more-scheme.rkt:261:28 (unknown source) prepare-points-intervals [17] 53.2% run-improve47 [18] 36.3% errors [66] 3.1% eval-errors [20] 2.1% ??? [28] 2.1% ---------------------------------------------------------------------------------------- f61 [13] 37.9% parse-loop74 [81] 62.1% [15] 1640(17.2%) 0(0.0%) eval-const-expr ...e/master/src/programs.rkt:120:0 temp85_0 [19] 87.2% loop [89] 12.8% ---------------------------------------------------------------------------------------- f61 [13] 100.0% [16] 200(2.1%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 f61 [13] 100.0% ---------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [14] 100.0% [17] 5074(53.2%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:120:0 loop [21] 100.0% ---------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [14] 100.0% [18] 3664(38.4%) 0(0.0%) run-improve47 ...bie/master/src/mainloop.rkt:347:0 for-loop [22] 100.0% ---------------------------------------------------------------------------------------- eval-const-expr [15] 100.0% [19] 1430(15.0%) 0(0.0%) temp85_0 (unknown source) compile15 [23] 100.0% ---------------------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [14] 100.0% [20] 202(2.1%) 0(0.0%) eval-errors .../herbie/master/src/points.rkt:189:0 for-loop [24] 100.0% ---------------------------------------------------------------------------------------- prepare-points-intervals [17] 100.0% [21] 5074(53.2%) 0(0.0%) loop ...ghtlies/herbie/master/src/points.rkt:133:4 loop [25] 92.0% ??? [29] 8.0% ---------------------------------------------------------------------------------------- run-improve47 [18] 100.0% [22] 3664(38.4%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:366:4 run-iter! [26] 100.0% ---------------------------------------------------------------------------------------- temp85_0 [19] 100.0% [23] 1430(15.0%) 0(0.0%) compile15 (unknown source) temp91_0 [27] 100.0% ---------------------------------------------------------------------------------------- eval-errors [20] 100.0% [24] 202(2.1%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:191:2 ??? [28] 100.0% ---------------------------------------------------------------------------------------- loop [21] 100.0% [25] 4668(49.0%) 400(4.2%) loop ...ightlies/herbie/master/src/points.rkt:79:2 ??? [30] 52.1% real->precision [33] 17.6% ??? [65] 17.5% hash-update! [39] 4.3% ---------------------------------------------------------------------------------------- for-loop [22] 100.0% [26] 3664(38.4%) 0(0.0%) run-iter! .../herbie/master/src/mainloop.rkt:328:0 gen-series! [31] 52.2% finalize-iter! [34] 22.0% simplify! [35] 13.5% gen-rewrites! [36] 12.2% ---------------------------------------------------------------------------------------- compile15 [23] 100.0% [27] 1430(15.0%) 0(0.0%) temp91_0 (unknown source) temp118_0 [32] 100.0% ---------------------------------------------------------------------------------------- for-loop [24] 34.0% .../more-scheme.rkt:261:28 [14] 66.0% [28] 594(6.2%) 192(2.0%) ??? .../herbie/master/src/syntax/syntax.rkt:214:17 list-member? [38] 34.0% return/no-unsupplied [40] 33.7% ---------------------------------------------------------------------------------------- loop [21] 100.0% [29] 406(4.3%) 200(2.1%) ??? ...ightlies/herbie/master/src/points.rkt:113:6 sample-multi-bounded [37] 50.7% ---------------------------------------------------------------------------------------- loop [25] 100.0% [30] 2432(25.5%) 816(8.6%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-log [43] 33.2% ival-sqrt [47] 16.4% ival-sub [48] 8.6% ival-add [51] 8.2% ---------------------------------------------------------------------------------------- run-iter! [26] 100.0% [31] 1914(20.1%) 0(0.0%) gen-series! ...erbie/master/src/mainloop.rkt:161:0 for-loop [41] 100.0% ---------------------------------------------------------------------------------------- temp91_0 [27] 100.0% [32] 1430(15.0%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [42] 100.0% ---------------------------------------------------------------------------------------- loop [25] 100.0% [33] 820(8.6%) 0(0.0%) real->precision ...e/master/src/programs.rkt:94:11 ??? [65] 75.6% ??? [52] 24.4% ---------------------------------------------------------------------------------------- run-iter! [26] 100.0% [34] 806(8.5%) 0(0.0%) finalize-iter! ...ie/master/src/mainloop.rkt:279:0 ??? [44] 100.0% ---------------------------------------------------------------------------------------- run-iter! [26] 100.0% [35] 496(5.2%) 0(0.0%) simplify! .../herbie/master/src/mainloop.rkt:225:0 ??? [45] 100.0% ---------------------------------------------------------------------------------------- run-iter! [26] 100.0% [36] 448(4.7%) 0(0.0%) gen-rewrites! ...bie/master/src/mainloop.rkt:184:0 for-loop [46] 100.0% ---------------------------------------------------------------------------------------- ??? [29] 100.0% [37] 206(2.2%) 0(0.0%) sample-multi-bounded ...master/src/points.rkt:14:0 random-ranges [49] 100.0% ---------------------------------------------------------------------------------------- ??? [28] 100.0% [38] 202(2.1%) 202(2.1%) list-member? ...llects/racket/private/set.rkt:24:0 ---------------------------------------------------------------------------------------- loop [25] 100.0% [39] 200(2.1%) 200(2.1%) hash-update! ...cket/private/more-scheme.rkt:365:4 ---------------------------------------------------------------------------------------- ??? [28] 100.0% [40] 200(2.1%) 0(0.0%) return/no-unsupplied ...ct/private/arr-i.rkt:566:0 filter [50] 100.0% ---------------------------------------------------------------------------------------- gen-series! [31] 100.0% [41] 1914(20.1%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:168:7 taylor-alt [53] 100.0% ---------------------------------------------------------------------------------------- loop [89] 12.8% temp118_0 [32] 87.2% [42] 1640(17.2%) 222(2.3%) expand-capturing-lifts (unknown source) lambda-clause-expander [54] 61.5% dispatch-transformer41 [75] 25.0% ---------------------------------------------------------------------------------------- ??? [30] 100.0% [43] 808(8.5%) 606(6.4%) ival-log ...erbie/master/src/biginterval.rkt:202:0 bflog [56] 25.0% ---------------------------------------------------------------------------------------- finalize-iter! [34] 100.0% [44] 806(8.5%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [55] 100.0% ---------------------------------------------------------------------------------------- simplify! [35] 100.0% [45] 496(5.2%) 0(0.0%) ??? ...es/herbie/master/src/core/simplify.rkt:42:0 egraph-run [57] 100.0% ---------------------------------------------------------------------------------------- gen-rewrites! [36] 100.0% [46] 448(4.7%) 0(0.0%) for-loop .../herbie/master/src/mainloop.rkt:192:11 rewrite-expression-head24 [58] 100.0% ---------------------------------------------------------------------------------------- ??? [30] 100.0% [47] 400(4.2%) 0(0.0%) ival-sqrt ...rbie/master/src/biginterval.rkt:212:0 bflog [56] 100.0% ---------------------------------------------------------------------------------------- ??? [30] 100.0% [48] 208(2.2%) 0(0.0%) ival-sub ...erbie/master/src/biginterval.rkt:108:0 bfsub [82] 100.0% ---------------------------------------------------------------------------------------- sample-multi-bounded [37] 100.0% [49] 206(2.2%) 206(2.2%) random-ranges ...erbie/master/src/common.rkt:164:0 ---------------------------------------------------------------------------------------- return/no-unsupplied [40] 100.0% [50] 200(2.1%) 200(2.1%) filter ...5/collects/racket/private/list.rkt:256:2 ---------------------------------------------------------------------------------------- ??? [30] 100.0% [51] 200(2.1%) 200(2.1%) ival-add ...erbie/master/src/biginterval.rkt:102:0 ---------------------------------------------------------------------------------------- real->precision [33] 100.0% [52] 200(2.1%) 0(0.0%) ??? ...ects/racket/contract/private/guts.rkt:770:8 bigvalue? [59] 100.0% ---------------------------------------------------------------------------------------- for-loop [41] 100.0% [53] 1914(20.1%) 0(0.0%) taylor-alt ...herbie/master/src/mainloop.rkt:147:0 for-loop [60] 100.0% ---------------------------------------------------------------------------------------- expand-capturing-lifts [42] 100.0% [54] 1008(10.6%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [61] 100.0% ---------------------------------------------------------------------------------------- ??? [44] 100.0% [55] 806(8.5%) 0(0.0%) for-loop ...bie/master/src/core/alt-table.rkt:55:2 atab-add-altn [64] 50.4% errors [66] 49.6% ---------------------------------------------------------------------------------------- ival-log [43] 33.6% ival-sqrt [47] 66.4% [56] 602(6.3%) 0(0.0%) bflog ...-lib/math/private/bigfloat/mpfr.rkt:632:4 ??? [88] 100.0% ---------------------------------------------------------------------------------------- ??? [45] 100.0% [57] 496(5.2%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [62] 100.0% ---------------------------------------------------------------------------------------- for-loop [46] 100.0% [58] 448(4.7%) 0(0.0%) rewrite-expression-head24 ...core/matcher.rkt:85:0 rewriter [63] 100.0% ---------------------------------------------------------------------------------------- ??? [52] 100.0% [59] 200(2.1%) 200(2.1%) bigvalue? ...rbie/master/src/syntax/types.rkt:19:0 ---------------------------------------------------------------------------------------- taylor-alt [53] 100.0% [60] 1914(20.1%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:153:6 ??? [65] 100.0% ---------------------------------------------------------------------------------------- lambda-clause-expander [54] 24.3% for-loop [67] 75.7% [61] 1008(10.6%) 200(2.1%) finish-bodys (unknown source) for-loop [67] 98.8% ---------------------------------------------------------------------------------------- egraph-run [57] 100.0% [62] 496(5.2%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [68] 100.0% ---------------------------------------------------------------------------------------- rewrite-expression-head24 [58] 25.0% matcher [77] 75.0% [63] 448(4.7%) 248(2.6%) rewriter ...erbie/master/src/core/matcher.rkt:87:2 for-loop [69] 86.2% ---------------------------------------------------------------------------------------- for-loop [55] 100.0% [64] 406(4.3%) 0(0.0%) atab-add-altn ...ster/src/core/alt-table.rkt:203:0 errors [66] 100.0% ---------------------------------------------------------------------------------------- loop [7] 15.1% real->precision [33] 18.5% location-do [70] 21.0% for-loop [60] 21.0% loop [25] 24.4% [65] 3350(35.1%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:375:33 ival-mult [73] 24.4% location-do [70] 21.0% approximate9 [2] 21.0% bf [74] 18.5% hash-ref! [71] 15.1% ---------------------------------------------------------------------------------------- for-loop [55] 28.6% atab-add-altn [64] 29.0% .../more-scheme.rkt:261:28 [14] 42.3% [66] 1398(14.7%) 0(0.0%) errors ...tlies/herbie/master/src/points.rkt:211:0 for-loop [72] 100.0% ---------------------------------------------------------------------------------------- for-loop [67] 20.8% finish-bodys [61] 79.2% [67] 1008(10.6%) 0(0.0%) for-loop (unknown source) finish-bodys [61] 63.0% for-loop [67] 20.8% expand-id-application-form17 [78] 8.3% dispatch-transformer41 [75] 6.9% syntax-e [5] 1.1% ---------------------------------------------------------------------------------------- egraph-add-exprs [62] 100.0% [68] 496(5.2%) 0(0.0%) ??? ...s/herbie/master/src/core/simplify.rkt:102:6 for-loop [76] 100.0% ---------------------------------------------------------------------------------------- rewriter [63] 100.0% [69] 448(4.7%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:89:4 matcher [77] 88.8% for-loop [79] 11.2% ---------------------------------------------------------------------------------------- ??? [65] 43.0% location-do [70] 57.0% [70] 1914(20.1%) 0(0.0%) location-do ...herbie/master/src/programs.rkt:63:0 location-do [70] 57.0% ??? [65] 43.0% ---------------------------------------------------------------------------------------- ??? [85] 2.9% for-loop [8] 18.3% taylor-sqrt [10] 20.9% ??? [80] 29.0% ??? [65] 29.0% [71] 1914(20.1%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 parse-loop74 [81] 43.5% ??? [80] 29.0% ??? [3] 21.2% f61 [13] 3.5% ??? [85] 2.9% ---------------------------------------------------------------------------------------- errors [66] 100.0% [72] 1398(14.7%) 406(4.3%) for-loop ...ies/herbie/master/src/points.rkt:213:2 .../more-scheme.rkt:261:28 [14] 71.0% ---------------------------------------------------------------------------------------- ??? [65] 100.0% [73] 816(8.6%) 404(4.2%) ival-mult ...rbie/master/src/biginterval.rkt:120:0 bfsub [82] 50.5% ---------------------------------------------------------------------------------------- ??? [65] 100.0% [74] 620(6.5%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 new-mpfr [84] 67.7% ??? [88] 32.3% ---------------------------------------------------------------------------------------- for-loop [67] 33.7% expand-capturing-lifts [42] 66.3% [75] 618(6.5%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [83] 100.0% ---------------------------------------------------------------------------------------- ??? [68] 100.0% [76] 496(5.2%) 496(5.2%) for-loop ...bie/master/src/core/simplify.rkt:121:2 ---------------------------------------------------------------------------------------- for-loop [9] 50.0% for-loop [69] 50.0% [77] 448(4.7%) 0(0.0%) matcher ...erbie/master/src/core/matcher.rkt:115:2 ??? [4] 50.0% rewriter [63] 50.0% ---------------------------------------------------------------------------------------- for-loop [67] 100.0% [78] 400(4.2%) 0(0.0%) expand-id-application-form17 (unknown source) binding-lookup52 [86] 50.0% resolve+shift28 [98] 50.0% ---------------------------------------------------------------------------------------- for-loop [69] 100.0% [79] 200(2.1%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:96:8 fix-up-variables [87] 100.0% ---------------------------------------------------------------------------------------- hash-ref! [71] 100.0% [80] 1514(15.9%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:44:15 hash-ref! [71] 100.0% ---------------------------------------------------------------------------------------- parse-loop74 [81] 29.4% hash-ref! [71] 70.6% [81] 1492(15.7%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [15] 45.5% parse-loop74 [81] 29.4% simplify-node [90] 18.4% f61 [13] 6.7% ---------------------------------------------------------------------------------------- ival-sub [48] 33.5% ival-mult [73] 66.5% [82] 620(6.5%) 0(0.0%) bfsub ...-lib/math/private/bigfloat/mpfr.rkt:835:4 ??? [88] 100.0% ---------------------------------------------------------------------------------------- dispatch-transformer41 [75] 100.0% [83] 618(6.5%) 0(0.0%) apply-transformer52 (unknown source) apply-post-expansion [91] 34.0% loop [89] 33.7% apply-transformer-in-context [92] 32.4% ---------------------------------------------------------------------------------------- bf [74] 100.0% [84] 420(4.4%) 420(4.4%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 ---------------------------------------------------------------------------------------- hash-ref! [71] 100.0% [85] 222(2.3%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:362:30 hash-ref! [71] 100.0% ---------------------------------------------------------------------------------------- expand-id-application-form17 [78] 100.0% [86] 200(2.1%) 200(2.1%) binding-lookup52 (unknown source) ---------------------------------------------------------------------------------------- for-loop [79] 100.0% [87] 200(2.1%) 0(0.0%) fix-up-variables ...ter/src/core/matcher.rkt:108:2 for-loop [93] 100.0% ---------------------------------------------------------------------------------------- bf [74] 14.1% bflog [56] 42.3% bfsub [82] 43.6% [88] 1422(14.9%) 1422(14.9%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ---------------------------------------------------------------------------------------- syntax-e/no-taint [11] 32.4% apply-transformer52 [83] 33.7% eval-const-expr [15] 34.0% [89] 618(6.5%) 0(0.0%) loop (unknown source) expand-capturing-lifts [42] 34.0% core-form-sym [96] 33.7% gf [94] 32.4% ---------------------------------------------------------------------------------------- parse-loop74 [81] 100.0% [90] 274(2.9%) 0(0.0%) simplify-node ...e/master/src/core/reduce.rkt:46:0 gather-additive-terms6 [95] 100.0% ---------------------------------------------------------------------------------------- apply-transformer52 [83] 100.0% [91] 210(2.2%) 0(0.0%) apply-post-expansion (unknown source) gf [94] 100.0% ---------------------------------------------------------------------------------------- apply-transformer52 [83] 100.0% [92] 200(2.1%) 200(2.1%) apply-transformer-in-context (unknown source) ---------------------------------------------------------------------------------------- fix-up-variables [87] 100.0% [93] 200(2.1%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:41:9 for-loop [97] 100.0% ---------------------------------------------------------------------------------------- loop [89] 48.8% apply-post-expansion [91] 51.2% [94] 410(4.3%) 210(2.2%) gf (unknown source) cache-or-reuse-set [100] 48.8% ---------------------------------------------------------------------------------------- simplify-node [90] 100.0% [95] 274(2.9%) 0(0.0%) gather-additive-terms6 ...src/core/reduce.rkt:68:0 append-map [99] 100.0% ---------------------------------------------------------------------------------------- loop [89] 100.0% [96] 208(2.2%) 0(0.0%) core-form-sym (unknown source) resolve+shift28 [98] 100.0% ---------------------------------------------------------------------------------------- for-loop [93] 100.0% [97] 200(2.1%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:26:9 core457 [101] 100.0% ---------------------------------------------------------------------------------------- expand-id-application-form17 [78] 49.0% core-form-sym [96] 51.0% [98] 408(4.3%) 200(2.1%) resolve+shift28 (unknown source) fallback-loop [103] 51.0% ---------------------------------------------------------------------------------------- gather-additive-terms6 [95] 100.0% [99] 274(2.9%) 0(0.0%) append-map ...t-7.5/collects/racket/list.rkt:586:2 parse-loop368 [102] 100.0% ---------------------------------------------------------------------------------------- gf [94] 100.0% [100] 200(2.1%) 200(2.1%) cache-or-reuse-set (unknown source) ---------------------------------------------------------------------------------------- for-loop [97] 100.0% [101] 200(2.1%) 0(0.0%) core457 ...acket/contract/private/arr-i.rkt:976:19 successfully-got-the-right-kind-of-function [104]100.0% ---------------------------------------------------------------------------------------- append-map [99] 100.0% [102] 274(2.9%) 0(0.0%) parse-loop368 (unknown source) make-multiplication-node [105] 100.0% ---------------------------------------------------------------------------------------- resolve+shift28 [98] 100.0% [103] 208(2.2%) 208(2.2%) fallback-loop (unknown source) ---------------------------------------------------------------------------------------- core457 [101] 100.0% [104] 200(2.1%) 200(2.1%) successfully-got-the-right-kind-of-function ...5:4 ---------------------------------------------------------------------------------------- parse-loop368 [102] 100.0% [105] 274(2.9%) 0(0.0%) make-multiplication-node .../core/reduce.rkt:232:0 make-multiplication-subnode [106] 100.0% ---------------------------------------------------------------------------------------- make-multiplication-node [105] 100.0% [106] 274(2.9%) 0(0.0%) make-multiplication-subnode ...re/reduce.rkt:242:0 compose [107] 100.0% ---------------------------------------------------------------------------------------- make-multiplication-subnode [106] 100.0% [107] 274(2.9%) 274(2.9%) compose ...collects/racket/private/list.rkt:385:12 ----------------------------------------------------------------------------------------